记录一下将VMware中的Linux虚拟机迁至物理机的过程

其实一开始用虚拟机感觉没问题,毕竟觉得linux用的也不多,但是后来重要的生产工具都只在虚拟机里搞了,实体机成了只看视频,打游戏的了,而且由于VMware只能用60hz的刷新率,总感觉卡卡的,而且虚拟化也浪费很多性能,所以才迁移到物理机。

目录

操作前请坐下来思考三分钟你是否真的很需要Linux虚拟机转移到物理机。

环境介绍

准备工作

在Windows 做好硬盘处理工作

进入Live CD环境继续操作

重建引导

单系统

多系统


操作前请坐下来思考三分钟你是否真的很需要Linux虚拟机转移到物理机。

我的方法并不是最好最高效的,会有更好的办法,我只是记录一下我折腾的过程,如果你认为你有更好或更简单的办法可以实现同样的预期,请你按照自己认为好的办法

环境介绍

每个人的设备环境是不一样的,你能看到这篇文章,已经研究迁移虚拟机这种操作了,我相信你是有很强的动手能力和的思考能力的,我相信你会发现我们配置过程中的不同之处的,所以不要完全按我的办法来。碰到错误也欢迎提问,我会尽力帮你解答的。

以下是我的使用环境:

  1. 物理机和虚拟机都是uefi引导
    • 如果不是,也无所谓,重建一下引导就好了,最后都是需要重建引导的
  2. 虚拟机和物理机都是nvme硬盘
    • 如果不是也无所谓,只不过在linux中将nvme#n#p#换成sdn#就好了
  3. 虚拟机vmdk是一个文件,没有分多个文件
    • 如果不是也无所谓,网上找一个工具合并一下就好了
  4. 实体机是windows11+windows10,虚拟机是archlinux
    • 这个看每个人需求.我个人需要Windows11玩游戏,Windows10用ENSP,ArchLinux主力

如果你有些地方不一样,可以先尽量将虚拟机调整为适合迁移的状态,比如装好实体机应需要的驱动,先把多个vmdk合并,其它都无所谓。因为还要重建引导。

准备工作

  1. startwind Converter
  2. DiskGenius
  3. 奥梅分区助手
  4. 一个linux liveCD U盘(我用的是archlinux)
  5. 一个会查wiki的脑子

在Windows 做好硬盘处理工作

  1. 先使用startwind Converter将vmdk转换成vhdx
  2. 使用windows自带的磁盘管理挂载vhdx,这一步会报错,会提示分区损坏,忽略即可,你会看到VHDX中有两个分区,一个没有损坏的ESP,一个损坏的Linux的根目录,(如果你有其它分区(例如/home),也一并显示出来了)。(这里损坏是非常正常的,Windwos没有做LinuxFS的相关驱动)
  3. 将物理机中ESP分区所有文件复制到一个地方作为备份.
  4. 用奥梅分区助手在物理硬盘中分出一个空闲分区,大小不能小于转换后的vhdx文件中的/分区。不要格式化,(如果你Linux的/home分区是独立的,你需要对应的再新建一个分区,存放/home分区)。
  5. 用任意硬盘克隆工具将挂载的vhdx硬盘中的/分区和你有其它有用的分区克隆到物理硬盘分区。/boot分区可以直接丢掉了,后续会使用物理机本身的ESP。
  6. 检查一下分区有没有错误,一定要看一眼你的物理机ESP分区能不能放得下你Linux本来的/boot挂载点里的这些文件,特别是多内核的小伙伴。因为Windows自带的ESP分区只有300M,勉强才能放下一个Linux内核。如果你虚拟机使用的是/efi挂载点和/boot挂载点分开的话,就看一下能不能放的下/efi挂载点就好了。

进入Live CD环境继续操作

如果你在livecd环境看到了audit xxxx在疯狂输出,可以用audit -e0让它闭嘴。

  1. 关机,使用livecd U盘启动电脑。进入liveCD后先来一手ls /dev/和blkid,列出所有物理机硬盘和UUID,拍个照或者手写下来记录好,这些内容将对你非常重要我的朋友。
  2. 使用mount /dev/nvme#n#p# /mnt/挂载你的linux根目录,之后使用mount /dev/nvme#n#p# /mnt/boot挂载启动点。
  3. 使用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的引导项(不推荐)

  1. 首先你需要重新格式化/boot分区,然后重新挂载,这里可以直接参考
  2. 你可以选择很多引导方式,Archlinux默认是由systemd-boot引导,其它Linux大多默认GRUB.如果是systemd-boot,建议按照archlinux的wiki的步骤来,执行bootctl install,如果没有出现错误,ls /boot/EFI你将会在你的物理机的ESP/EFI看到systemd的文件夹。Systemd-Boot
  3. 安装好systemd-boot后,重建一下内核,毕竟很多虚拟机里的模块和HOOK在实体机用不到,vim /etc/mkinitcpio.conf,将不需要的模块和钩子取消掉,然后运行一下mkinitcpio -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img。官方指南:Mkinitcpio
  4. 手动编写/boot/loader/loader.conf和/boot/loader/entries/xxxxx.conf

多系统

如果你使用的是多个操作系统,非常推荐使用reFind引导,方便配置,

reFind官方安装指南icon-default.png?t=N7T8https://www.rodsbooks.com/refind/installing.htmlArchLinux reFind安装指南icon-default.png?t=N7T8https://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这些.

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值