如何在树莓派Ubuntu 22.04的LXC容器中挂载USB磁盘?
问题描述
在树莓派的Ubuntu 22.04主机上创建了同系统的LXC容器,需在容器内读写USB磁盘文件,按教程配置后失败。
USB设备信息
Bus 001 Device 007: ID 14cd:1212 Super Top microSD card reader (SY-T18)
设备已挂载到主机系统。
已尝试的配置
在容器config中添加了以下两行:
lxc.cgroup.devices.allow = c 189:* rwm lxc.mount.entry = /dev/bus/usb/001/007 dev/bus/usb/001/007 none bind,optional,create=dir
完整config:
lxc.rootfs.path = dir:/dockers/regular/rootfs lxc.uts.name = regular lxc.arch = armhf # Network configuration lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:61:b2:40 lxc.cgroup.devices.allow = c 189:* rwm lxc.mount.entry = /dev/bus/usb/001/007 dev/bus/usb/001/007 none bind,optional,create=dir
现象
启动容器后,/dev/bus/usb/001/007目录存在,但容器内找不到sda1这类块设备,通过设备名或UUID挂载均失败。
解决方案
方法1:直接绑定主机已挂载目录(最简单)
如果主机已经挂载了USB磁盘,直接把挂载点绑定到容器,无需传递块设备:
- 确认主机上的挂载路径,比如
/mnt/usb_disk - 编辑容器config,添加挂载条目:
lxc.mount.entry = /mnt/usb_disk mnt/usb_disk none bind,optional,create=dir - 重启容器,进入后即可直接访问
/mnt/usb_disk
方法2:传递块设备给容器(自行挂载)
如果需要容器独立管理挂载,需传递块设备文件并配置权限:
- 在主机上查看USB磁盘的块设备信息:
找到对应的设备,比如lsblk/dev/sda(磁盘)和/dev/sda1(分区) - 编辑容器config,替换原USB总线配置,添加:
# 允许块设备主设备号8(sda类设备的主设备号) lxc.cgroup.devices.allow = b 8:* rwm # 绑定分区设备到容器 lxc.mount.entry = /dev/sda1 dev/sda1 none bind,optional,create=file # 如需整个磁盘,添加此行: # lxc.mount.entry = /dev/sda dev/sda none bind,optional,create=file - 重启容器,进入后执行
mount /dev/sda1 /mnt/usb挂载(需提前创建/mnt/usb目录)
方法3:使用LXC新设备直通语法(推荐,适配新版本)
Ubuntu 22.04的LXC支持更简洁的设备直通配置,替换旧的cgroup和挂载条目:
- 编辑容器config,添加:
# 直通整个USB设备 lxc.device.entry = /dev/bus/usb/001/007 devtype=char mode=0660 # 直通块设备(如需) lxc.device.entry = /dev/sda1 devtype=block mode=0660 - 重启容器,即可在容器内看到对应的设备文件
注意事项
- 用方法2或3时,需确保主机未挂载该USB设备,否则容器无法挂载
- 容器内需安装
mount工具及对应文件系统驱动(如ext4、fat32) - USB设备重新插拔后设备号可能变化,可通过udev规则固定设备名,避免频繁修改config
内容的提问来源于stack exchange,提问作者Bella Wang
相关产品推荐
相关产品推荐

