我在 Ubuntu 14.04 上使用 lxc 1.0.5-0ubuntu0.1 创建了一个 lxc 容器sudo lxc-create -n ubuntu-trusty-amd64 -t ubuntu -- --arch amd64 --release trusty
,但发现我的硬盘中没有设备文件/dev/
。我该如何让它们在 lxc 中可用(通过设备文件或类似的解决方法),以便我可以挂载该设备?
我认为(在评论中引用了 muru 的链接)添加
lxc.hook.autodev = /path/to/script
到配置文件(顺便问一下哪个?)是必要的并且script
包含一个mknod
语句,但我不明白的用法mknod
。
ls -a /dev/
在 lxc 中给出
. dsp1 loop3 midi03 port ram15 rmidi0 stderr tty7
.. dsp2 loop4 midi1 ptmx ram16 rmidi1 stdin tty8
agpgart dsp3 loop5 midi2 pts ram2 rmidi2 stdout tty9
audio fd loop6 midi3 ram ram3 rmidi3 tty urandom
audio1 full loop7 mixer ram0 ram4 sequencer tty0 zero
audio2 kmem lxc mixer1 ram1 ram5 shm tty1
audio3 kmsg mem mixer2 ram10 ram6 smpte0 tty2
audioctl log midi0 mixer3 ram11 ram7 smpte1 tty3
console loop0 midi00 mpu401data ram12 ram8 smpte2 tty4
core loop1 midi01 mpu401stat ram13 ram9 smpte3 tty5
dsp loop2 midi02 null ram14 random sndstat tty6
我尝试挂载设备文件(虽然看起来很奇怪)。因此/var/lib/lxc/<name>/rootfs/dev/
必须创建下面的挂载点。使用 创建文件touch
不起作用,因为主机无法在文件下挂载设备文件。在mkdir
主机上创建目录可以,但不允许在 lxc 中挂载它,因为它被识别为目录。
应该可以dd
使用设备文件创建设备的图像里面 例如 lxc。
答案1
fstab 选项
您可能想要使用 fstab 文件:
$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/dev/sdc1 mnt/sdc ext4 noatime 0 0
重要的是,挂载点(第二个参数)不能以斜杠开头,否则 LXC 脚本会尝试在主机操作系统中挂载文件系统。
在 Ubuntu 上,该文件应该已经存在,但为空。如果没有,只需创建它并确保配置文件中包含以下行:
$ grep fstab /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.mount = /var/lib/lxc/ubuntu-trusty-amd64/fstab
设备选项
如果您确实需要访问您的设备,您可以在容器中提供它:
$ grep devices /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.cgroup.devices.allow = b 8:1 rwm
这将使 /dev/sda1 在您的容器中可用(8:1 是块设备主要:次要)。
但这还不够。您的容器通常没有挂载任何文件系统的权限。您还需要使用以下行或类似的技巧:
$ grep profile /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.aa_profile = unconfined
警告:这不仅仅允许安装
共享目录选项
如果您想从多个容器(和主机操作系统)访问您的数据,您可能需要使用最常见的解决方案:与第一个选项类似,使用 fstab 将已挂载的目录绑定挂载到您的容器:
$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/mnt/mydata mnt/mydata none bind 0 0
再次强调:第一个参数是源,即主机操作系统中的目录。第二个参数是容器中的目录,相对于其根目录。再次强调:不要在第二个参数前面加斜杠。
如果你不想在容器中创建目录,你可以使用选项自动执行此操作,bind,create=dir
而不是简单地bind
答案2
有两种方法。我只提最简单的一种。一切都在主机中完成,但您会发现您的设备已安装在容器中!
像往常一样将设备挂载到主机的某个位置,例如使用以下命令进行/dev/sdb1
挂载/mnt/myharddisk
:
mount /dev/sdb1 /mnt/myharddisk
在主机上创建容器的挂载点:
mkdir /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles
要将其临时安装在容器中,请在主机中使用它:
mount -o bind /mnt/myharddisk /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles
要永久挂载它,请在容器的 fstab 末尾添加以下行(/var/lib/lxc/ubuntu-trusty-amd64/fstab
):
/mnt/myharddisk /var/lib/lxc/ubuntu-trusty-amd64/rootfs/media/myfiles none bind 0 0