Featured image of post P2V (Physical to Virtual)

P2V (Physical to Virtual)

Windows Server 物理机迁移到 PVE 的完整流程:disk2vhd 导出与 qcow2 导入、UEFI 转 BIOS 引导修复,以及磁盘控制器、网卡与 CPU 类型的性能对比

P2V (Physical to Virtual)

1. disk2vhd导出虚拟磁盘

【操作步骤】勾选以下选项

a. Use Vhdx

b. Use Volume Shadow Copy

c. 系统盘、保留盘

FAQ

(1) vhdvhdx区别

vhd:最大容量2T

vhdx:更新更快,最大容量64TB

(2) Volume Shadow Copy卷影复制的作用

快照,保证从复制开始到结束时,数据的一致性

2. 挂载SMB

【操作步骤】数据中心 -> 存储 -> 添加SMB/CIFS

FAQ

(1) 添加失败,错误提示

create storage failed: storage ‘smb’ is not online (500)

【解决方法】添加时取消勾选启动,从编辑入口进入再设置启用即可

CIFS: storage is not online (500) | Proxmox Support Forum

3. vhdx转换qcow2并导入

qm importdisk 100 /mnt/pve/smb/ark.vhdx local --format qcow2

FAQ

(1) 只能导入到local-lvm,而导入到local会报错?

storage local does not support vm images

【解决办法】数据中心 -> 存储 -> local的内容扩充支持磁盘映像

(2) locallocal-lvm的区别?

佛西博客 - PVE的local和local-lvm (buduanwang.vip)

local-lvm属于lvm-thin类型,存储虚拟机时作为块设备,不能直接拷贝

local属于dir类型目录

lvs
cat /etc/pve/storage.cfg 

【建议】qcow2足够优秀,且属于文件类型,不建议使用lvm-thin作为其存储底层

【方案】移除local-lvm并将空间并入local

a. 扩展local内容支持

数据中心 -> 存储 -> 编辑local -> 内容勾选所有

b. 删除lvm-thin
lvremove /dev/pve/data
c. 释放空间并入local
lvextend -rl +100%FREE /dev/pve/root
d. 检查空间
df -h
e. GUI移除lvm-thin

数据中心 -> 存储 -> 移除local-lvm

4. UEFI启动转换为传统BIOS引导

(1) 老毛桃官网下载完整版

ISO模式 -> 一键生成ISO文件

(2) 上传ISO镜像

local -> ISO镜像 -> 上传

(3) 挂载ISO

VM100 -> 硬件 -> CD/DVD驱动器 -> 使用ISO

(4) winpe操作

a. 启动VM100,选择启动Win10 X64 PE

b. 使用分区工具软件,删除主分区外的其他分区(包括系统保留分区)

c. 分区表类型从GPT转换成MBR

磁盘 -> 转换分区表类型为MBR格式

d. 将主分区设置为活动分区

右键系统盘 -> 激活当前分区

e. 保存更改

f. 将步骤2释放的空间合并到系统盘

右键系统盘 -> 扩容分区 -> 开始

FAQ
(a) 警告提示

无法修改Windows系统的BCD启动设置,调整Windows系统分区可能导致其无法启动,请进入到该系统中再执行调整命令

【操作】选择仍然调整,暂未发现异常

(5) 修复系统引导

使用引导修复软件,修复后使用分区工具检查主分区下是否已生成Boot目录和bootmgr文件

FAQ

a. 修复引导后能正常进系统,但卸载掉pe光盘后启动提示boot failed?

需按后文步骤(7)调整引导顺序

(6) 卸载ISO

(7) 调整引导顺序

虚拟机 -> 选项 -> 引导顺序 -> 勾选虚拟磁盘并调整排序为首位

5. IDE磁盘转换为SCSI

(1) 挂载virtio-win-0.1.240.iso

(2) 添加一个SCSI磁盘,大小不重要,只用于安装驱动程序

(3) 启动VM -> 设备管理器 -> 其他设备 -> 带感叹号的SCSI设备 -> 手动指向驱动目录vioscsi\2k22\amd64 -> 关闭VM

(4) VM硬件设置,删除临时的SCSI磁盘,将IDE磁盘更改为SCSI,cache选择write back,勾选discard

FAQ

a. 性能对比:VirtIO SCSI>IDE

IDE

ide_as-ssd-benchide_CrystalDiskMark

VirtIO SCSI

scsi_as-ssd-bench

scsi_CrystalDiskMark

6. 虚拟磁盘扩容

VM -> 点选磁盘 -> 磁盘操作 -> 调整大小 -> 填写增量大小 -> 重启VM

FAQ

(1)Windows扩容C盘,但是右边有一个恢复分区挡住?

Solution

使用CMD(管理员)删除恢复分区

diskpart
list disk # 查看所有磁盘信息
select disk X # X为包含恢复分区的磁盘编号
list partition # 查看磁盘上的所有分区
select partition Y # Y为恢复分区的编号
delete partition override
exit

7. Intel E1000网卡转为VirtIO

(1) VM-> 硬件 -> 网络设备 -> 模型Intel E1000改为VirtIO

(2) 启动VM -> 设备管理器 -> 其他设备 -> 带感叹号的以太网设备 -> 手动指向驱动目录NetKVM\2k22\amd64

FAQ

a. 性能对比:VirtIO>Intel E1000

Intel E1000

intel_e1000_speedtest

VirtIO

virtIO_speedtest

8. CPU类型性能对比

2690v4

host

host_cpuz

avx2

host_cpuz_avx2

kvm64

kvm64_cpuz

qemu64

qemu64_cpuz

x86-64-v3

x86-64-v3_cpuz

aux2

x86-64-v3_cpuz_avx2

1650v4

x86-64-v3

x86-64-v3_cpuz

aux2

x86-64-v3_cpuz_avx2

FAQ

(1) 为什么host反而跑分最低?

待研究

(2) kvm64qemu64下的cpuzavx2测试项可选?

可能因为cpu高级设置未勾选aux2特性

9. 内存Balloon

(1) 安装Balloon驱动

设备管理器 -> 其他设备 -> 带感叹号的PCI设备 -> 手动指向驱动目录Balloon\2k22\amd64

(2) 设置最小内存

VM -> 硬件 -> 内存 -> 高级 -> 最小内存

10. 直通SATA硬盘

pve硬盘直通

(1) 列出硬盘列表

ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part

lrwxrwxrwx 1 root root 9 Oct 31 21:40 ata-WDC_WD20SPZX-22UA7T0_WD-WXA1E6962PFE -> ../../sda lrwxrwxrwx 1 root root 13 Oct 31 21:34 nvme-eui.00000000000000008ce38e03006b6199 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Oct 31 21:34 nvme-KIOXIA-EXCERIA_SSD_71HA11F9K2V2 -> ../../nvme0n1 lrwxrwxrwx 1 root root 9 Oct 31 21:40 wwn-0x50014ee2670010fa -> ../../sda

nvme -> m2, ata -> sata

(2) 设置直通

qm set <vmid> --scsiX /dev/disk/by-id/xxxxxxx
qm set 100 --scsi1 /dev/disk/by-id/ata-WDC_WD20SPZX-22UA7T0_WD-WXA1E6962PFE

取消直通

qm set <vmid> --delete scsiX
qm set 100 --delete scsi1

11. WOL

Wake On Lan on Debian

(1) Install ethtool

apt install ethtool

(2) Checking the interface

ip a

enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000 link/ether 00:e0:4c:ad:e9:7e brd ff:ff:ff:ff:ff:ff

(3) Temporarily turn on WOL

ethtool --change enp5s0 wol g

(4) Check WOL status

ethtool enp5s0

Wake-on: g

g -> on, d -> off

(5) Permanently turn on WOL

a. Find ethtool directory

which ethtool

/usr/sbin/ethtool

b. Create wol.service in /etc/systemd/system/

[Unit]
Description=Enable Wake On Lan

[Service]
Type=oneshot
ExecStart =/usr/sbin/ethtool --change enp5s0 wol g

[Install]
WantedBy=basic.target

c. Enable service

systemctl daemon-reload
systemctl enable wol.service

12. KSM

調整 PVE 內建 KSM 機制參數

(1) Temporarily turn off KSM

系统 -> ksmtuned -> 停止

(2) Permanently turn off KSM

systemctl disable ksmtuned
systemctl status ksmtuned

(3) Permanently turn on KSM

systemctl enable ksmtuned
systemctl start ksmtuned

(4) 配置文件/etc/ksmtuned.conf

# Configuration file for ksmtuned.

# How long ksmtuned should sleep between tuning adjustments
# KSM_MONITOR_INTERVAL=60

# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
# KSM_SLEEP_MSEC=100

# KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN=64
# KSM_NPAGES_MAX=1250

# KSM_THRES_COEF=20 # 剩余内存低于20%时激活ksm
# KSM_THRES_CONST=2048 # 剩余内存少于2048字节时激活

# uncomment the following if you want ksmtuned debug info

# LOGFILE=/var/log/ksmtuned
# DEBUG=1

(5) 实测效果与性能损耗

13. Swap

(1) Check the current Swap strategy

cat /proc/sys/vm/swappiness
# or
sysctl vm.swappiness
# vm.swappiness = 60 # 剩余内存低于60%时,启用Swap

(2) Temporary adjustment

sysctl vm.swappiness=0

(3) Persistent configuration

nano /etc/sysctl.conf

# Append at the end
vm.swappiness=0

sysctl -p # Reload configuration

14. Backup pve configuration

# storage, vm, cluster, user config
cp -r /var/lib/pve-cluster /mnt/pve/hdd/pveBackup
# restore
cp /mnt/pve/hdd/pveBackup/pve-cluster/config.db /var/lib/pve-cluster

# boot, modules config
mkdir /mnt/pve/hdd/pveBackup/{boot,modprobe}
cp /etc/modules-load.d/* /mnt/pve/hdd/pveBackup/modprobe/
cp /etc/default/grub /mnt/pve/hdd/pveBackup/boot/
cp /etc/modules /mnt/pve/hdd/pveBackup/
# restore
cp /mnt/pve/hdd/pveBackup/modprobe/* /etc/modules-load.d/
cp /mnt/pve/hdd/pveBackup/boot/grub /etc/default/
cp /mnt/pve/hdd/pveBackup/modules /etc/
update-grub
update-initramfs -k all -u

# network config
cp -r /etc/network /mnt/pve/hdd/pveBackup/
# restore
cp -r /mnt/pve/hdd/pveBackup/network/* /etc/network/
systemctl restart networking

FAQ

1. VM暂停和休眠的区别

【暂停】保持内存加载,但cpu分配为0

【休眠】内存保存到磁盘后释放

2. CPU-X 查询硬件信息

(1) cpu频率、占用、温度

(2) 内存频率、占用

apt install -y cpu-x
cpu-x # 会自动检查是否有显卡,无则启动基于文本的用户界面

3. 查询CPU温度(deprecated)

Debian 查看CPU温度

apt install lm-sensors -y
sensors-detect # all press Enter
sensors

4. 查询内存频率(deprecated)

硬件信息查询工具: lshw, dmidecode, hwinfo, CPU-X

(1) lshw

lshw -short -C memory

H/W path Device Class Description /0/0 memory 64KiB BIOS /0/56 memory 136GiB System Me /0/56/0 memory 32GiB DIMM DDR4 /0/56/1 memory 32GiB DIMM DDR4 /0/56/2 memory 32GiB DIMM DDR4 /0/56/3 memory 32GiB DIMM DDR4 /0/62 memory 896KiB L1 cache /0/63 memory 3584KiB L2 cache /0/64 memory 35MiB L3 cache

(2) dmidecode

apt install -y dmidecode
dmidecode -t memory | grep 'Speed:'

Speed: 2400 MT/s Configured Memory Speed: 2400 MT/s

FAQ

1. 数据是否准确?

【实测】5条内存只查出4条

【结论】不准确,可能是寨板魔改的原因

do I listen to dmidecode or the manufacturer?

5. 查询固态硬盘写入寿命

(1) Install smartmontools

apt install smartmontools -y

(2) Query NVMe device

ls /dev/nvm*

/dev/nvme0 /dev/nvme0n1p1 …

(3) Get smart info

smartctl -a /dev/nvme0

Data Units Written: 50,632,796 [25.9 TB]