Я создал lxc контейнер с sudo lxc-create -n ubuntu-trusty-amd64 -t ubuntu -- --arch amd64 --release trusty
на Ubuntu 14.04 с lxc, 1.0.5-0ubuntu0.1 и понятым, что нет никаких файлов устройств в /dev/
для моих жестких дисков. Как я могу сделать их доступными (через файл устройств или подобное обходное решение) в lxc так, чтобы я мог смонтировать устройство?
Я изобразил (со ссылкой muru в комментариях) то добавление
lxc.hook.autodev = /path/to/script
к файлу конфигурации (который BTW?) необходимо и script
содержит a 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, потому что это распознано как каталог.
Должно быть возможно создать a dd
изображение устройства с помощью файла устройств в lxc, например.
fstab Вы, вероятно, хотите использовать fstab файл:
$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/dev/sdc1 mnt/sdc ext4 noatime 0 0
важно, чтобы точка монтирования (2-й аргумент) не начиналась с наклонной черты, иначе сценарий LXC пытается смонтировать файловую систему в хосте OS.
На 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, блочное устройство major:minor).
, Но это не будет достаточно. Ваш контейнер обычно не имеет разрешения смонтировать любую файловую систему. Необходимо будет использовать следующую строку или подобный прием также:
$ grep profile /var/lib/lxc/ubuntu-trusty-amd64/config
lxc.aa_profile = unconfined
Предупреждение: это позволяет намного больше, чем просто монтирование
общего каталога, Если Вы хотите получить доступ к своим данным из нескольких контейнеров (и хост OS), можно хотеть использовать наиболее распространенное решение: Подобный праву преимущественной покупки, используйте fstab для привязки - монтируют aready-смонтированный каталог к контейнеру:
$ cat /var/lib/lxc/ubuntu-trusty-amd64/fstab
/mnt/mydata mnt/mydata none bind 0 0
Снова: первым аргументом является источник, каталог в Вашем хосте OS. Вторым аргументом является каталог в Вашем контейнере относительно его корня. Снова: не ПОМЕЩАЙТЕ НАКЛОННУЮ ЧЕРТУ ПЕРЕД ВТОРЫМ АРГУМЕНТОМ.
, Если Вы не хотите создавать каталог в своем контейнере, можно сделать это автоматически использовать опции bind,create=dir
вместо просто bind
Существует два метода. Я только упоминаю самый легкий. Все сделано в хосте, но Вы найдете свое устройство смонтированным в контейнере!
Монтируют устройство где-нибудь в хосте, как обычно, например, используют следующую команду для монтирования /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