在Promox VE(PVE)虚拟机安装黑群晖并开启硬盘休眠的方法

Promox VE(PVE)虚拟环境安装虚拟黑群晖,也能实现像EXSi直通SATA控制器那样实现硬盘休眠,而且硬盘管理比EXSi要灵活。PVE虚拟黑群晖硬盘休眠的关键也是隐藏引导磁盘和SATA控制器直通,本文将详细介绍PVE虚拟机安装黑裙并开启硬盘休眠的详细步骤。

Proxmox VE虚拟黑群晖硬盘休眠记录

 

先上结论:上图一共5块硬盘和虚拟硬盘,分别在PVE虚拟环境下通过以下5种方式添加给黑裙,而且都能一起实现休眠:

  • 直通SATA控制器(包括eSATA)
  • 映射的单个硬盘(包括eSATA)
  • 直接添加虚拟磁盘
  • 直通USB控制器
  • 直通单个USB硬盘

其中最惊喜的是在完全隐藏群晖引导盘后,PVE虚拟黑裙就算添加了虚拟磁盘也不影响硬盘休眠。在群晖的“存储空间管理员”里面也能看到虚拟磁盘的S.M.A.R.T信息,这就不难理解了:PVE提供给群晖假的S.M.A.R.T信息,让群晖硬盘得以休眠。

PVE虚拟硬盘的SMART信息

一、虚拟机环境设置

1、黑群晖虚拟机的硬件配置入下图,机器是默认的“i440fx”,引导盘是“sata0”:

PVE虚拟黑群晖实现硬盘休眠避坑指南教程1

2、把虚拟机的“机器”改成“q35”,默认的“i440fx”在用Jun引导的第三项“VMWARE/ESXi”引导的时候会无限要求重装DSM系统或找不到硬盘。

3、引导盘先“分离”再“编辑”,改到sata5,PVE虚拟环境的SATA控制器最多只能添加6个SATA硬盘,sata5是最后一个,便于隐藏引导盘。改完以后“硬件”配置如下图:

PVE虚拟黑群晖实现硬盘休眠避坑指南教程2

二、直通SATA控制器

编辑/etc/default/grub开启PVE直通:

打开PVE节点的shell,输入命令:

nano /etc/default/grub
PVE虚拟黑群晖实现硬盘休眠避坑指南教程3
在里面找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"
intel CPU修改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
amd cpu请改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
PVE虚拟黑群晖实现硬盘休眠避坑指南教程4

编辑完成后按“Ctrl + X” > “Y” > “回车”,确认保存并退出。

再更新一下配置:update-grub

编辑/etc/modules加载硬件直通相关模块:

到这里先不要重启,在PVE的shell中输入:

nano /etc/modules

查看modules中是否有这些模块,如果没有就添加到文件末尾。修改好重启PVE系统使设置生效。

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd 
PVE虚拟黑群晖实现硬盘休眠避坑指南教程5

添加SATA控制器

重启之后PVE硬件直通的设置就生效了,点击“DSM虚拟机” > 硬件 > 添加 > PCI设备 > 选选择SATA控制器,最后点击“添加”把SATA控制器添加给群晖虚拟机。

然后用同样的步骤给群晖虚拟机添加USB控制器或者单独的USB设备

PVE虚拟黑群晖实现硬盘休眠避坑指南教程6

三、映射单个硬盘

打开PVE节点的shell,输入命令:

ls -l /dev/disk/by-id/

就能看到系统当前所有未直通SATA控制器下的硬盘和分区,其中“ata”开头的就是SATA硬盘的ID,复制备用;最后面的“sdx”是盘符,后面也要用到。

PVE虚拟黑群晖实现硬盘休眠避坑指南教程7

输入以下命令映射单个硬盘给虚拟机-:

qm set 100 --sata0 /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989

“qm set”其实是类似与EXSi RDM的磁盘映射,后面的参数“100”是群晖虚拟机的编号,“sata0”表示添加到SATA控制器的第一块硬盘,“/dev/disk/by-id/”表示按硬盘的ID添加,最后面加上硬盘的ID。

添加成功够就能在虚拟机的硬件选项卡看到“sata0”磁盘映射:

PVE虚拟黑群晖实现硬盘休眠避坑指南教程8

四、添加eSATA硬盘

接下来把直通的SATA控制器上的磁盘2改成eSATA设备:

启用群晖系统的SSH服务,用putty SSH登录到群晖,

先提权:sudo -i
编辑synoinfo.conf配置文件:
vi /etc.defaults/synoinfo.conf
修改下面两个参数:
internalportcfg="0xffd"
esataportcfg="0xff002"

这两个参数都是16进制,“0xffd”对应二进制值“111111111101”,右数第2个0表示第二个SATA接口不是内部SATA接口;"0xff002"对应二进制值“11111111000000000010”,右数第2个1表示第二个SATA接口是eSATA接口。

关于群晖内部SATA接口改eSATA接口的方法可以看这篇文章:《群晖系统挂载NTFS硬盘》。

至此,我们的黑群晖虚拟机“DSM”上就挂了6块硬盘,总共是五种磁盘,后面会全部实现休眠:

  • sata0:单个映射的硬盘
  • sata1:直接添加的虚拟磁盘
  • sata5:黑群晖引导盘
  • 直通的SATA控制器上的SATA磁盘
  • 直通的SATA控制器上的eSATA磁盘
  • USB控制器上的USB移动硬盘

五、改变默认引导项

重启黑群晖虚拟机,这次选择引导盘的第三个启动项,引导选项一闪而过,请疯狂按键盘箭头向下“↓”键:

选择这个启动项才能使后面隐藏引导磁盘的配置生效。

PVE虚拟黑群晖实现硬盘休眠避坑指南教程9

六、隐藏引导磁盘

在PVE的SHELL里面输入命令,先看看PVE物理机上有哪些SATA控制器

lspci -n | grep "0106"
PVE虚拟黑群晖实现硬盘休眠避坑指南教程10

SSH登录到群晖,再看看虚拟群晖有哪些SATA控制器

lspci -v | grep "0106"
PVE虚拟黑群晖实现硬盘休眠避坑指南教程11

总共有三个,前面两个是一样的,应该是PVE的虚拟SATA控制器,第三个“8086 5ae3”PVE里面能找到一样的,应该是直通过来的,所以引导盘“sata5”应该是在前两个控制器上。

再看引导盘的grub配置文件的这一行:

set sata_args='sata_uid=1 sata_pcislot=5 synoboot_satadom=1 DiskIdxMap=0C SataPortMap=1 SasIdxMap=0'

“DiskIdxMap=0C”表示第一个SATA控制器上的磁盘序号从13开始算,“SataPortMap=1”表示第一个SATA控制器只有一个SATA磁盘;而DS3617XS默认只有12个SATA接口,看来引导配置文件默认已经隐藏了第一个SATA控制器的“sata5”磁盘,但是群晖系统里面还能看到引导盘,因此肯定引导盘在第二个控制器!

修改grub配置文件

SSH登录到群晖,修改引导配置文件“grub.cfg”,找到下面这行,改成:

set sata_args='sata_uid=1 sata_pcislot=5 synoboot_satadom=1 DiskIdxMap=0F0700 SataPortMap=656 SasIdxMap=0'

 

PVE虚拟黑群晖实现硬盘休眠避坑指南教程12

修改完成后重启群晖就看不到引导盘了,这时第三个SATA控制器的6个接口对应硬盘1~6;第二个SATA控制器的前5个SATA接口对应硬盘7~12,引导盘“sata5”在第二个SATA控制器的第六个接口,刚好隐藏了;第三个SATA控制器对应硬盘16~21。

PVE虚拟黑群晖实现硬盘休眠避坑指南教程

打开群晖控制面板 > 硬盘休眠,启用SATA硬盘休眠和USB硬盘休眠,并勾选硬盘休眠日志。

关闭群晖的管理UI,过一段时间再登陆就能看到第一张图的硬盘休眠唤醒记录,包括内置硬盘和USB硬盘的唤醒记录。

PVE虚拟黑群晖实现硬盘休眠避坑指南教程13

七、映射硬盘的休眠控制

虽然有休眠记录,但是用手去摸映射的硬盘(sata0),发现它并没有停转,推测群晖只是停止映射硬盘的读写,而原物理硬盘的控制权还在PVE那里,所以要由PVE来控制原物理硬盘的休眠:

hdparm -S 180 /dev/sdc

其中参数“180”对应15分钟(180/12),“sdc”是物理硬盘的盘符,通过命令“ls -l /dev/disk/by-id/”查看,前文有提到。

这样映射的磁盘可以停转了,但还会频繁唤醒,谷歌了下还有个守护进程“pvestatd”在频繁读写硬盘,这个进程会定时询问各个虚拟机、磁盘和容器的状态并发送到各个节点导致硬盘唤醒,可以直接关闭它:

pvestatd stop #停用该服务无法新建虚拟机,需要时使用pvestatd start开启

也可以使用lvm的metadata的缓存,如果开启的话,就会缓存lvm的信息,不再频繁读取硬盘:

修改/etc/lvm/lvm.conf文件
设置use_lvmetad = 1

八、隐藏引导盘的参数说明

SataPortMap: 定义每个SATA控制器上有多少个硬盘。

SataPortMap=656,表示第一个控制器上有6个sata,第二个有5个,第三个控制器上有6个;本例中引导盘在第二个控制器上的第六个“sata5”,刚好隐藏

DiskIdxMap: 定义每个SATA控制器第一个SATA接口映射到的索引位置,后面参数是16进制,每个控制器截取两位,比如DiskIdxMap=07表示第一个SATA控制器的第一个SATA硬盘在群里系统里为“硬盘7”,DiskIdxMap=0A00,表示第一个SATA控制器从0A(十进制11)开始索引,第一个控制器从00(十进制0)开始索引。

本例中DiskIdxMap=0F0700,排序后就是:

1:SATA30 - 2:SATA31 - 3:SATA32 - 4:SATA33 - 5:SATA34- 6 :SATA35 - 7:空

8:SATA20 - 9:SATA21 - 10:SATA22 - 11SATA23 -:12SATA24 -:13SATA25 --- SATA1X。

更新:后续进一步测试发现“SataPortMap”参数起作用,“DiskIdxMap”只能整理磁盘顺序,不能彻底隐藏引导盘。

九、试验平台

本教程首先在华擎J3455-ITX平台上完成试验,这块主板做虚拟机All-in-one需要扩展一块PCIE-X1网卡。

另外在双网口的华擎(ASRock)Z390M-ITX/ac主板 也搭建成功,这块主板有m2接口,我把PVE装在闪迪CZ430酷豆U盘上,m2直通给Win10做HTPC用,还有一条PCI-EX 16接口准备上万兆网卡。

至此,PVE安装虚拟黑群晖并实现硬盘休眠的的详细教程就结束了,虽然5种给虚拟群晖添加硬盘的方式都能实现休眠,但是这里还是推荐以SATA控制器直通为主,其他方式为辅,以保障数据安全。

 


原文出处:https://www.10bests.com/dsm-hdd-hibernation-on-pve/

点赞
  1. 飞翔的企鹅说道:
    Google Chrome Windows 10
    引导盘,默认就在群晖里面看不见,但是挂载的rdm硬盘还是休眠不了
  2. 飞翔的企鹅说道:
    Google Chrome Windows 10
    usb硬盘能不能添加成共享文件夹,我想用来做moments保存图片
    1. 博主说道:
      Google Chrome Windows 10
      不可以
  3. cocoa说道:
    Google Chrome Windows 10
    博主,好像隐藏引导盘不能通过SataPortMap参数设置隐藏吧,是通过DiskIdxMap参数,超出十六进制来隐藏吧???比如两个控制,第一个控制器为引导盘,第二个控制器4块,是不是可以配置为SataPortMap=14,DiskIdxMap=0C00,来隐藏引导盘。
    1. 博主说道:
      Google Chrome Windows 10
      对啊,我教程有讲过的:https://wp.gxnas.com/10940.html
  4. sunshe35说道:
    Google Chrome Windows 10
    有个问题没搞明白,为啥pve群晖实现硬盘休眠的关键在于隐藏引导盘和硬盘直通?硬盘直通可以理解,隐藏引导盘无法理解啊。不隐藏的话就会一直占用所以没办法实现休眠吗? 然后还有一个问题,我是通过arpl.img(挂载到sata3)引导群晖的,那么这个隐藏引导方法也适用吗?
  5. lflfree说道:
    Google Chrome Windows 10
    你好,请问ESXI装黑群晖可以休眠RDM直通的硬盘吗?我好像只能使用RDM直通的。 另外,也试了PVE系统,装的是PVE7.2,安装教程无法把E1000E网卡给弄出来,只能又转到ESXI上了
    1. 博主说道:
      Google Chrome Windows 10
      虚拟机不休眠哦
      1. lflfree说道:
        Google Chrome Windows 10
        乱整了半天,好像PCI直通硬盘后可以休眠了,摸了一下硬盘可以停转了
        1. 博主说道:
          Google Chrome Windows 10
          好的
          1. 哒啵郎说道:
            PVE下创建黑群,能否用U盘引导黑群?U盘是原本物理机的引导盘,能否创建黑群时添加usb设备,让U盘做引导。有什么需要注意的
          2. 博主说道:
            Google Chrome Windows 10
            PVE还要用U盘引导群晖那不是多此一举!
  6. 蔡先生早上好说道:
    Google Chrome Windows 10
    大佬,自动获取SataPortMap那篇文章过来的,用lspci -n | grep "0106"显示pve root@cccc:~# lspci -n | grep "0106" 00:13.0 0106: 8086:0f23 (rev 11) 03:00.0 0106: 1b4b:9215 (rev 11) 用lspci -v | grep "0106"获取群晖的控制器出来了5条,J1900应该是无法直通的, 0000:00:1f.2 Class 0106: Device 8086:2922 (rev 02) 0000:06:07.0 Class 0106: Device 8086:2922 (rev 02) 0001:01:00.0 Class 0106: Device 1b4b:9215 (rev 11) 0001:02:00.0 Class 0106: Device 1b4b:9215 (rev 11) 0001:08:00.0 Class 0106: Device 1b4b:9235 (rev 11)这里4、5两条与pve的一致,是pve映射来的两个实体硬盘吗?这样我的群晖是不是5个控制器,SataPortMap=66111,DiskIdxMap=0600070809这样正确吗
    1. 博主说道:
      Google Chrome Windows 10
      J1900用PVE的话不可以直通SATA控制器给群晖虚拟机用的,所以你在PVE里面用qm set命令挂载硬盘给群晖就行了,引导文件里面把这3个参数删了。
  7. mute说道:
    Google Chrome Windows 10
    群晖7 好像不能这么改esata 了
    1. 博主说道:
      Google Chrome Windows 10
      可以改,需要在编译引导前直接改源代码再编译出引导文件才可以。
  8. K说道:
    Google Chrome Windows 10
    你好,我直通了SATA控制器,虚拟机开不了机(unable to read tail (got 0 bytes)。发现PVE节点里的磁盘还有两个非挂载的硬盘。然后物理地拔掉硬盘才能开机。。。 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 5.5T 0 disk ├─sda1 8:1 0 2.4G 0 part ├─sda2 8:2 0 2G 0 part └─sda3 8:3 0 5.5T 0 part sdb 8:16 0 5.5T 0 disk ├─sdb1 8:17 0 2.4G 0 part ├─sdb2 8:18 0 2G 0 part └─sdb3 8:19 0 5.5T 0 part nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 1007K 0 part ├─nvme0n1p2 259:2 0 512M 0 part /boot/efi └─nvme0n1p3 259:3 0 238G 0 part ├─pve-swap 253:0 0 8G 0 lvm [SWAP] ├─pve-root 253:1 0 59.3G 0 lvm / ├─pve-data_tmeta 253:2 0 1.6G 0 lvm │ └─pve-data-tpool 253:4 0 151.6G 0 lvm │ └─pve-data 253:5 0 151.6G 1 lvm └─pve-data_tdata 253:3 0 151.6G 0 lvm └─pve-data-tpool 253:4 0 151.6G 0 lvm └─pve-data 253:5 0 151.6G 1 lvm
    1. 博主说道:
      Google Chrome Windows 10
      直通SATA控制器不行的话,就用qm set命令挂载给群晖吧。

发表回复