fstab 选项

fstab 选项

我在 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

相关内容