LXC 直通硬盘 lxc 直通磁盘大致需要以下步骤: 配置 cgroup 规则,赋予 lxc 容器对

应硬件的权限; 如果使用 cgroup 2,需要将配置文件中的 lxc.cgroup 改为 lxc.cgroup2 ; 之后通过主副设备号将硬

LXC 直通硬盘

lxc 直通磁盘大致需要以下步骤:

  • 配置 cgroup 规则,赋予 lxc 容器对应硬件的权限;
  • 如果使用 cgroup 2,需要将配置文件中的 lxc.cgroup 改为 lxc.cgroup2
  • 之后通过主副设备号将硬盘挂载到 LXC 容器中的对应位置;

使用这条命令看到磁盘、wwn以及主:次设备号:

# 使用 lsblk -h 看到更多格式
$ lsblk -o name,wwn,MAJ:MIN
NAME                  WWN                MAJ:MIN
sda                   0x5002538e728014d6   8:0
├─sda1                0x5002538e728014d6   8:1
├─sda2                0x5002538e728014d6   8:2
└─sda3                0x5002538e728014d6   8:3
  ├─openeuler-root                       253:0
  ├─openeuler-var                        253:1
  ├─openeuler-var_log                    253:2
  └─openeuler-home                       253:3
sdb                   0x5000c500eda070c8   8:16
sdc                   0x5000c500eda93f3c   8:32
sdd                   0x5000c500eda94c15   8:48
sde                   0x5000c500edacae3b   8:64

LXC 直通磁盘步骤

确定硬盘id和关系

ls -al /dev/sd*
#或者
ls -al /dev/disk/by-label

反正最后比如我想找我的sda1设备,那我得到了以下输出:

# ls -al /dev/sda
brw-rw---- 1 root disk 8, 0 Dec 19 11:16 /dev/sda1
# ls -al /dev/sda1
brw-rw---- 1 root disk 8, 1 Dec 19 11:16 /dev/sda1

可以看出,sda=> 8,0 sda1=>8,1

绑定硬盘

继续编辑lxc配置文件,添加:

lxc.cgroup.devices.allow: b 8:0 rwm
lxc.cgroup.devices.allow: b 8:1 rwm

这个8:08:1就是刚才我们得到的。

设置自动挂载脚本

pve中,创建/var/lib/lxc/ID/mount-hook.sh文件,其中ID就是你的lxc的ID:

#!/bin/sh
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda b 8 0
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda1 b 8 1

然后chmod +x 一下,然后在lxc配置文件中添加:

lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/ID/mount-hook.sh

然后根据我们要挂载的设备,再添加一行(有个教程说不用,但是我加上了,然后成功了):

lxc.mount.entry: /dev/sda1 /dev/sda1 bind,create=dir,optional 0 0

至此,可以启动容器了。

PVE 硬盘直通

要将硬盘直通给 pve 管理的虚拟机,最简单使用下面的命令:

# 下面两种方式均可,风险点不同
qm set 101 --scsi1 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN
qm set 101 --scsi1 /dev/sdb

References

最后修改:2024 年 09 月 05 日
如果觉得我的文章对你有用,请随意赞赏