其实一开始用虚拟机感觉没问题,毕竟觉得linux用的也不多,但是后来重要的生产工具都只在虚拟机里搞了,实体机成了只看视频,打游戏的了,而且由于VMware只能用60hz的刷新率,总感觉卡卡的,而且虚拟化也浪费很多性能,所以才迁移到物理机。
目录
操作前请坐下来思考三分钟你是否真的很需要Linux虚拟机转移到物理机。
操作前请坐下来思考三分钟你是否真的很需要Linux虚拟机转移到物理机。
我的方法并不是最好最高效的,会有更好的办法,我只是记录一下我折腾的过程,如果你认为你有更好或更简单的办法可以实现同样的预期,请你按照自己认为好的办法
环境介绍
每个人的设备环境是不一样的,你能看到这篇文章,已经研究迁移虚拟机这种操作了,我相信你是有很强的动手能力和的思考能力的,我相信你会发现我们配置过程中的不同之处的,所以不要完全按我的办法来。碰到错误也欢迎提问,我会尽力帮你解答的。
以下是我的使用环境:
- 物理机和虚拟机都是uefi引导
- 如果不是,也无所谓,重建一下引导就好了,最后都是需要重建引导的
- 虚拟机和物理机都是nvme硬盘
- 如果不是也无所谓,只不过在linux中将nvme#n#p#换成sdn#就好了
- 虚拟机vmdk是一个文件,没有分多个文件
- 如果不是也无所谓,网上找一个工具合并一下就好了
- 实体机是windows11+windows10,虚拟机是archlinux
- 这个看每个人需求.我个人需要Windows11玩游戏,Windows10用ENSP,ArchLinux主力
如果你有些地方不一样,可以先尽量将虚拟机调整为适合迁移的状态,比如装好实体机应需要的驱动,先把多个vmdk合并,其它都无所谓。因为还要重建引导。
准备工作
- startwind Converter
- DiskGenius
- 奥梅分区助手
- 一个linux liveCD U盘(我用的是archlinux)
- 一个会查wiki的脑子
在Windows 做好硬盘处理工作
- 先使用startwind Converter将vmdk转换成vhdx
- 使用windows自带的磁盘管理挂载vhdx,这一步会报错,会提示分区损坏,忽略即可,你会看到VHDX中有两个分区,一个没有损坏的ESP,一个损坏的Linux的根目录,(如果你有其它分区(例如/home),也一并显示出来了)。(这里损坏是非常正常的,Windwos没有做LinuxFS的相关驱动)
- 将物理机中ESP分区所有文件复制到一个地方作为备份.
- 用奥梅分区助手在物理硬盘中分出一个空闲分区,大小不能小于转换后的vhdx文件中的/分区。不要格式化,(如果你Linux的/home分区是独立的,你需要对应的再新建一个分区,存放/home分区)。
- 用任意硬盘克隆工具将挂载的vhdx硬盘中的/分区和你有其它有用的分区克隆到物理硬盘分区。/boot分区可以直接丢掉了,后续会使用物理机本身的ESP。
- 检查一下分区有没有错误,一定要看一眼你的物理机ESP分区能不能放得下你Linux本来的/boot挂载点里的这些文件,特别是多内核的小伙伴。因为Windows自带的ESP分区只有300M,勉强才能放下一个Linux内核。如果你虚拟机使用的是/efi挂载点和/boot挂载点分开的话,就看一下能不能放的下/efi挂载点就好了。
进入Live CD环境继续操作
如果你在livecd环境看到了audit xxxx在疯狂输出,可以用audit -e0让它闭嘴。
- 关机,使用livecd U盘启动电脑。进入liveCD后先来一手ls /dev/和blkid,列出所有物理机硬盘和UUID,拍个照或者手写下来记录好,这些内容将对你非常重要我的朋友。
- 使用mount /dev/nvme#n#p# /mnt/挂载你的linux根目录,之后使用mount /dev/nvme#n#p# /mnt/boot挂载启动点。
- 使用arch-chroot /mnt命令进入原虚拟机的文件系统。编辑fstab,检查一下uuid是否和物理机相同,cat /etc/fstab,如果不相同,就用vim改成和你物理机相同的uuid, 你也可以在这里挂载你的NTFS分区. 官方指南:FSTAB 这里是一个示例
╭─ > ~ > < ✔ < 16:12:27 ─╮
╰─ cat /etc/fstab ─╯
# Static information about the filesystems.
# See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p2
UUID=ea26a20b-fbe0-4be1-88dd-f7af3e9XXXXXX / ext4 rw,relatime 0 1
# /dev/nvme0n1p1
UUID=DA18-XXXX /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,err rs=remount-ro 0 2
# UUID=65F33762C1XXXXXX /run/media/apiclo/Windows11 ntfs defaults 0 0
UUID=C0123EDB12XXXXXX /mnt/data512G ntfs uid=1000,gid=1000,rw,user,exec,umask=000 0 0
# UUID=4A62AE7262XXXXXX /run/media/apiclo/Windows10 ntfs defaults 0 0
UUID=4E8DF62023XXXXXX /mnt/data2TB ntfs uid=1000,gid=1000,rw,user,exec,umask=000 0 0
重建引导
如果你对重建引导没那么理解,请先补充一下课
确保你现在屏幕上显示的终端是由archiso chroot进之前虚拟机的终端.
单系统
如果要单系统重建引导,你将不会再拥有Windows的引导项(不推荐)
- 首先你需要重新格式化/boot分区,然后重新挂载,这里可以直接参考
- 你可以选择很多引导方式,Archlinux默认是由systemd-boot引导,其它Linux大多默认GRUB.如果是systemd-boot,建议按照archlinux的wiki的步骤来,执行bootctl install,如果没有出现错误,ls /boot/EFI你将会在你的物理机的ESP/EFI看到systemd的文件夹。Systemd-Boot
- 安装好systemd-boot后,重建一下内核,毕竟很多虚拟机里的模块和HOOK在实体机用不到,vim /etc/mkinitcpio.conf,将不需要的模块和钩子取消掉,然后运行一下mkinitcpio -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img。官方指南:Mkinitcpio
- 手动编写/boot/loader/loader.conf和/boot/loader/entries/xxxxx.conf
多系统
如果你使用的是多个操作系统,非常推荐使用reFind引导,方便配置,
reFind官方安装指南https://www.rodsbooks.com/refind/installing.htmlArchLinux reFind安装指南
https://wiki.archlinuxcn.org/wiki/REFInd
下面是一个示例refind.conf示例
# 等待时间
timeout 1
use_nvram false
# 我只保留了Windows和下方menuentry中的配置,systemd-boot已经关掉了
# 这样做的好处是可以避免套娃引导,略过systemd-boot,取消自动扫描可以更方便地添加内核参数
dont_scan_files vmlinuz-linux,systemd-bootx64.efi,initramfs-linux-fallback.img,bootx64.efi
# 同上
dont_scan_dirs ESP:/EFI/boot,EFI/systemd
# 取消多内核扫描
scan_all_linux_kernels false
# 默认使用Windows开机
# default_selection 1 # 这个数字是refind开机菜单中的顺序
# default_selection "Microsoft EFI Boot"
# default_selection "Microsoft Boot EFI"
# default_selection Microsoft
# 默认使用Linux开机
default_selection 2
default_selection "Arch Linux"
default_selection "Linux"
# 分辨率
resolution max
# 开启鼠标
enable_mouse
# 自定义启动菜单
menuentry "Arch Linux" {
icon /EFI/refind/icons/os_arch.png
loader /vmlinuz-linux
initrd /amd-ucode.img #如果是intel则需要换成 /intel-ucode.img(如果有)
initrd /initramfs-linux.img #这里填写你已有的内核
options "root=UUID=ea26xx0b-fbe0-xxe1-xxdd-xxxxxxxxxxxx rw"
}
# 主题配置
include theme/glassy/theme.conf
开机后就可以准备安装驱动或者使用其它物理机的相关内容,比如smbios,acpi这些.