• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |
花生壳

关于PVE虚拟SATA盘不能作为数据盘的解法

威联通 QNAP  / 教程分享  / 正序浏览   © 著作权归作者本人所有

#楼主# 2022-6-20 12:43

跳转到指定楼层
本帖最后由 game168 于 2022-6-20 12:43 编辑

以下解法感谢r-MT分享。我仅做了简单的补充
不能用web控制台添加sata盘,而应该直接编辑/etc/pve/qemu-server/111.conf文件
文件范例见附件。
其中/dev/pve/vm-111-disk-1为手动添加sata盘后分离得到
pve虚拟sata解法范例.txt (935 Bytes, 下载次数: 64)
那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

0

精华

89

回帖

946

积分

入门用户

Rank: 1

云币
0
贡献
48
活跃
658
精华
0
zml1985 发表于 2024-8-29 09:33 来自 中国西藏拉萨
本帖最后由 zml1985 于 2024-8-29 09:42 编辑

rmt大哥太强大了。
一直用PVE作为宿主机虚拟威联通,威联通的数据硬盘都是SATA直通过去了,在添加一个虚拟磁盘用来存威联通的非重要数据,这样PVE使用软路由,重启下宿主机,在也不用像威联通那样等待10多分钟才能恢复网络了。虚拟机也有了,威联通也有了,而且不是虚拟磁盘,硬盘本身没故障,NAS数据也不会受到影响。

这样处理,直接用rmtdebian.img作为U盘引导,直通了SATA控制器,都是在D28下,之后在添加个虚拟磁盘,在D23下,这样就非常完美了

  1. args: -device 'qemu-xhci,addr=0x14' -drive 'id=qnapboot,file=/var/lib/vz/template/iso/x721.img,if=none,format=raw' -device 'usb-storage,id=qnapboot,drive=qnapboot,bootindex=1' -device 'ahci,id=ahci1,multifunction=on,bus=pcie.0,addr=0x17' -drive 'file=/var/lib/vz/images/105/vm-105-disk-1.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,rotation_rate=1'
复制代码

顺路问一下, PVE下的qemu-ga代理程序谁能给制作一份QPKG呢,安装了entware-std 可以用opkg install 安装一些ipk的软件包,但是这里面并没有QEMU Guest Agent相关的,重启下PVE的情况下,要提前进威联通关机,要不然没有API信号就直接强制关机了。
回复 支持 反对 印象

使用道具 举报

0

精华

97

回帖

2288

积分

搞机大神

Rank: 3Rank: 3

云币
0
贡献
86
活跃
1807
精华
0
s2k7 发表于 2022-7-18 18:10 来自 日本
谢谢大侠的精彩解说,慢慢体会学习。
回复 支持 反对 印象

使用道具 举报

2

精华

46

回帖

4605

积分

技术达人

Rank: 6Rank: 6

云币
301
贡献
320
活跃
2778
精华
2
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下面执行
  1. cp /usr/share/perl5/PVE/QemuServer.pm /usr/share/perl5/PVE/QemuServer.pm.bak
  2. 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 执行
  1. cp /usr/share/perl5/PVE/QemuServer/PCI.pm /usr/share/perl5/PVE/QemuServer/PCI.pm.bak
  2. 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








回复 支持 反对 印象

使用道具 举报

0

精华

26

回帖

308

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
295
精华
0
wings1988 发表于 2022-7-3 21:36 来自 中国江苏苏州
很有价值和意义的分享,谢谢大佬们的分享
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图