|
r-MT
发表于 2022-7-17 19:16
来自 中国江苏无锡
pve默认把sata接口0-5(最多6个)挂载PCI Bridge---PCI-PCI bridge下面,2层全是pci,造成qnap无法找到sata硬盘,解决办法有下列几种,各取所需吧
一。修改pve的控制文件
比较简单
pve通过
/usr/share/perl5/PVE/QemuServer.pm和/usr/share/perl5/PVE/QemuServer/PCI.pm
2个文件来控制虚拟机pci/pcie设备的建立
感兴趣的 可以研究一下里面其他的
这里只说说sata
先备份
/usr/share/perl5/PVE/QemuServer.pm
找到
my $pciaddr = print_pci_addr("ahci$controller", $bridges, $arch, $machine_type);
把pci改成pcie
my $pciaddr = print_pcie_addr("ahci$controller", $bridges, $arch, $machine_type);
或者直接在pve的shell下面执行
- cp /usr/share/perl5/PVE/QemuServer.pm /usr/share/perl5/PVE/QemuServer.pm.bak
- sed -i 's/print_pci_addr("ahci/print_pcie_addr("ahci/g' /usr/share/perl5/PVE/QemuServer.pm
复制代码
先备份
/usr/share/perl5/PVE/QemuServer/PCI.pm
在sub get_pcie_addr_map段
找到# win7 is picky about pcie assignments这行在下面添加一行
# win7 is picky about pcie assignments
ahci0 => { bus => 'pcie.0', addr => 23 },
或者直接在pve的shell 执行
- cp /usr/share/perl5/PVE/QemuServer/PCI.pm /usr/share/perl5/PVE/QemuServer/PCI.pm.bak
- sed -i "/picky/a \ ahci0 => { bus => \'pcie.0\', addr => 23 }," /usr/share/perl5/PVE/QemuServer/PCI.pm
复制代码
重启PVE
这样以后pve建立的虚拟机的sata全部在00.17.0.0上了,也就是model.conf里面的DEV_BUS = B0023:F0
这个办法缺点也有,每次pve升级后都要自己手动修改一下,同时其他所有的虚拟机里面的sata接口也被改变到pcie上了
二.另外一种方法替换pve的加载sata命令,改成args: 来执行,比较繁琐
比如先建了虚拟机 ID=100 ,80G的sata硬盘
在pve的shell 执行
qm showcmd 100 --pretty
找到类似这三行复制下来,
-device 'ahci,id=ahci0,multifunction=on,bus=pci.0,addr=0x7' \
-drive 'file=/mnt/pve/wd500g/images/100/vm-100-disk-0.qcow2,if=none,id=drive-sata0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' \
-device 'ide-hd,bus=ahci0.0,drive=drive-sata0,id=sata0' \
然后在虚拟机硬件里面把该80G磁盘分离,不要删除
修改三行 前面加上args: ,删掉每行后面的\ 修改成如下
args: -device 'ahci,id=ahci1,multifunction=on,bus=pcie.0,addr=0x17'
-drive 'file=/mnt/pve/wd500g/images/100/vm-100-disk-0.qcow2,if=none,id=drive-sata6,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on'
-device 'ide-hd,bus=ahci1.0,drive=drive-sata6,id=sata6'
ps:这里新建一个ahci1,在pcie 17.00.0上,使用sata6.(pve默认的sata占用satat0-5,使用的ahci0)
然后合并成一行
args: -device 'ahci,id=ahci1,multifunction=on,bus=pcie.0,addr=0x17' -drive 'file=/mnt/pve/wd500g/images/100/vm-100-disk-0.qcow2,if=none,id=drive-,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' -device 'ide-hd,bus=ahci1.0,drive=drive-sata6,id=sata6'
添加到/etc/pve/qemu-server/100.conf成为第一行
启动虚拟机,sata磁盘就到pcie 00:17.0上了
如果需要添加第二个sata硬盘
先在web页面添加第二个sata硬盘50G
pve的shell里面执行
qm showcmd 100 --pretty
找到如下三行,复制出来
-device 'ahci,id=ahci0,multifunction=on,bus=pci.0,addr=0x7' \
-drive 'file=/mnt/pve/wd500g/images/100/vm-100-disk-1.qcow2,if=none,id=drive-sata0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' \
-device 'ide-hd,bus=ahci0.0,drive=drive-sata0,id=sata0' \
然后分离掉刚才50G磁盘,
前面已经建立个ahci1了,所以第一行就不要了,也不要加args:,去掉\,修改成如下
-drive 'file=/mnt/pve/wd500g/images/100/vm-100-disk-1.qcow2,if=none,id=drive-sata7,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on'
-device 'ide-hd,bus=ahci1.1,drive=drive-sata7,id=sata7'
合并成一行
继续添加到/etc/pve/qemu-server/100.conf第一行的结尾
进工具 hwinfo --disk
2个磁盘都在00:17.0下了
设置比较繁琐,pve以后升级可以不管
三。其他pve里面虚拟U盘引导qnap
把img引导盘上传到pve里面
/etc/pve/qemu-server/100.conf
第一行 添加
args: -device 'usb-ehci,addr=0x14' -drive 'id=qnapboot,file=/var/lib/vz/template/iso/x72-5.0.0.1932-dom.img,if=none,format=raw' -device 'usb-storage,id=qnapboot,drive=qnapboot,bootindex=1'
就直接usb引导了
其中
-device 'usb-ehci,addr=0x14'
也就是usb-ehci里面usb2.0对应model.conf
[Boot Disk 1]
DEV_BUS = B0020:F0
IN_HUB = 0
DEV_PORT_NS = 1
如果用-device 'qemu-xhci,addr=0x14' ,也就是usb3.0
[Boot Disk 1]
DEV_BUS = B0020:F0
IN_HUB = 0
DEV_PORT = 1
|
|