比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。
目录
[1. 先检查你的 Linux 环境(必做)](#1. 先检查你的 Linux 环境(必做))
[2. 下载 OSX-KVM 现成的引导和固件(不用自己做)](#2. 下载 OSX-KVM 现成的引导和固件(不用自己做))
[3. 把你的 qcow2 放对位置](#3. 把你的 qcow2 放对位置)
[4. 按需调整脚本](#4. 按需调整脚本)
前言
vmwre跑在windows上,总是不太稳定,想给它们都迁移到物理服务器上,但是环境搭建很麻烦,所以希望可以顺利转换格式,进行部署
提示:以下是本篇文章正文内容,下面案例可供参考
一、打包
删除所有镜像------关闭虚拟机------右键选择"打开虚拟机目录"------使用打包工具进行打包------传到linux服务器上------解压------保留所有后缀为.vmdk的文件,其他的全部删除------执行转换命令
# 先进入你传好的文件夹(比如你改名叫macos-10.13-vmdk)
cd ~/macos-10.13-vmdk
# 执行转换,源文件就是你箭头指的那个主索引,全程不用改文件名
qemu-img convert -c -p -f vmdk -O qcow2 "macOS 10.13-cl8.vmdk" "macos-10.13-final.qcow2"
#主索引是不带那些s0001、0002之类编号的
| 参数 | 意思 | 作用 |
|---|---|---|
qemu-img |
工具名字 | 专门处理虚拟机磁盘的工具 |
convert |
核心命令 | 告诉工具:"我要做格式转换这件事" |
-c |
压缩(Compress) | 最有用的参数 !自动把虚拟磁盘里的空白空间、没用的零字节全部压缩掉,你原来 500G 的预分配空间,会直接缩成几十 G,而且是无损压缩,系统和文件完全不受影响 |
-p |
显示进度(Progress) | 让工具在转换时实时显示百分比进度条,不然你看着黑框没反应,会以为卡死了 |
-f vmdk |
指定源格式(Format) | 告诉工具:"我要转的源文件是 vmdk 格式的",注意是小写的 f |
-O qcow2 |
指定目标格式(Output Format) | 告诉工具:"我要生成的目标文件是 qcow2 格式的",注意是大写的 O,不是数字 0 |
"源文件.vmdk" |
输入文件 | 就是你箭头指的那个 macOS 10.13-cl8.vmdk,因为文件名有空格,所以必须加双引号 |
"目标文件.qcow2" |
输出文件 | 你想生成的 qcow2 文件名,随便你起,比如 macos-10.13-final.qcow2,同样有空格要加双引号 |
二、把制作好的.qcow跑起来
1. 先检查你的 Linux 环境(必做)
-
确认 CPU 硬件虚拟化已开启:
lsmod | grep kvm输出有
kvm_intel或kvm_amd就没问题。 -
装必要的工具:
# Ubuntu/Debian sudo apt install -y git virt-manager ovmf qemu-kvm libvirt-daemon-system
2. 下载 OSX-KVM 现成的引导和固件(不用自己做)
直接用行业标准的 OSX-KVM 项目,里面有现成的 OpenCore 引导和适配 macOS 的 OVMF 固件:
# 找个地方存文件,比如 /mnt/package
cd /mnt/package
git clone https://github.com/kholia/OSX-KVM.git
下载完,你会得到一个 OSX-KVM 文件夹,里面的 OpenCore/ 和 OVMF/ 就是我们要用的。
3. 把你的 qcow2 放对位置
把你刚才生成的 macos-10.13-final.qcow2 复制到 OSX-KVM 文件夹里:
mv macos-10.13-final.qcow2 /mnt/package/OSX-KVM/
4. 按需调整脚本
cp OpenCore-Boot.sh OpenCore-Boot.sh.bak
cat /mnt/package/OSX-KVM/OpenCore-Boot.sh
#!/usr/bin/env bash
# 100%还原你能进系统的配置,仅修复USB鼠标键盘
MY_OPTIONS="+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
ALLOCATED_RAM="8192" # MiB
CPU_SOCKETS="1"
CPU_CORES="4"
CPU_THREADS="8"
REPO_PATH="."
OVMF_DIR="."
args=(
# 能启动的CPU配置,不动!
-enable-kvm -m "$ALLOCATED_RAM" -cpu Skylake-Client,-hle,-rtm,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,"$MY_OPTIONS"
-machine q35
# 【USB配置,用最简单兼容的方式】
-usb
-device usb-kbd
-device usb-tablet
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
# 苹果SMC授权
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
# OVMF固件
-drive if=pflash,format=raw,readonly=on,file="$REPO_PATH/$OVMF_DIR/OVMF_CODE_4M.fd"
-drive if=pflash,format=raw,file="$REPO_PATH/$OVMF_DIR/OVMF_VARS-1920x1080.fd"
-smbios type=2
-device ich9-intel-hda -device hda-duplex
-device ich9-ahci,id=sata
# OpenCore引导
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file="$REPO_PATH/OpenCore/OpenCore.qcow2"
-device ide-hd,bus=sata.2,drive=OpenCoreBoot
# -device ide-hd,bus=sata.3,drive=InstallMedia
#-drive id=InstallMedia,if=none,file="$REPO_PATH/BaseSystem.img",format=raw
# 系统盘(qcow2的名字要写对,我这个是给它改了新的名字)
-drive id=MacHDD,if=none,file="$REPO_PATH/macOS_10.qcow2",format=qcow2
-device ide-hd,bus=sata.4,drive=MacHDD
# 网络配置(2223端口也可以自己选择,默认是2222)
-netdev user,id=net0,hostfwd=tcp::2223-:22
-device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27
# VNC配置(5902端口,可以自己选择端口)
-vnc 0.0.0.0:2,password=off
# 显卡配置
-device vmware-svga
-monitor stdio
)
qemu-system-x86_64 "${args[@]}"
遇到报错:failed to parse default acl file `/etc/qemu/bridge.conf'
qemu-system-x86_64: -netdev bridge,br=br0,id=net0: bridge helper failed
解决方式:这是 QEMU/KVM 在使用 bridge 网络时,qemu-bridge-helper 失败导致的。
-
/etc/qemu/bridge.conf文件不存在 -
或者格式错误
-
或者权限不对
sudo mkdir -p /etc/qemu
sudo echo "allow br0" | sudo tee /etc/qemu/bridge.conf
sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper
执行: ./OpenCore-Boot.sh
就可以启动起来mac虚拟机了,使用VNC访问 宿主机ip:5902 就可以看到图形化页面了~~~
三、优化一下
上面去执行那个脚本会发现,当前的终端就会被占用,所以我给它做成了systemctl的service方便管理。
$ sudo vim /etc/systemd/system/macos10-vm.service
$ cat /etc/systemd/system/macos10-vm.service
[Unit]
Description=macOS 10 Virtual Machine
After=network.target
[Service]
Type=simple
WorkingDirectory=/mnt/package/OSX-KVM
ExecStart=/usr/bin/qemu-system-x86_64 \
-enable-kvm \
-m 64G \ #注意单位
-cpu Skylake-Client,-hle,-rtm,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check \
-machine q35 \
-usb \
-device usb-kbd \
-device usb-tablet \
-smp 32,cores=32,sockets=1 \
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" \
-drive if=pflash,format=raw,readonly=on,file=/mnt/package/OSX-KVM/OVMF_CODE_4M.fd \
-drive if=pflash,format=raw,file=/mnt/package/OSX-KVM/OVMF_VARS-1920x1080.fd \
-smbios type=2 \
-device ich9-intel-hda \
-device hda-duplex \
-device ich9-ahci,id=sata \
-drive id=OpenCoreBoot,if=none,snapshot=on,format=qcow2,file=/mnt/package/OSX-KVM/OpenCore/OpenCore.qcow2 \
-device ide-hd,bus=sata.2,drive=OpenCoreBoot \
-drive id=MacHDD,if=none,file=/mnt/package/OSX-KVM/macOS_10.qcow2,format=qcow2 \
-device ide-hd,bus=sata.4,drive=MacHDD \
-netdev user,id=net0,hostfwd=tcp::2223-:22 \
-device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 \
-vnc 0.0.0.0:2,password=off \
-device vmware-svga \
-monitor stdio
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
# 重载 systemd 配置(每次修改配置文件都必须做)
sudo systemctl daemon-reload
# 启动虚拟机
sudo systemctl start macos10-vm
# 查看运行状态
sudo systemctl status macos10-vm
# 开机自启(可选)
sudo systemctl enable macos10-vm
# 停止虚拟机
sudo systemctl stop macos10-vm
总结
不用重新搭环境真的太棒了,尤其是mac/windows的环境