|  | 
 
                                                                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 = B00
  23: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 = B00
  20:F0 IN_HUB = 0
 DEV_PORT_NS = 1
 如果用-device 'qemu-xhci,addr=0x14' ,也就是usb3.0
 [Boot Disk 1]
 DEV_BUS = B00
  20:F0 IN_HUB = 0
 DEV_PORT = 1
 
 
 
 
 
 
 
 
 
 | 
 |