Как сделать файл устройств жесткого диска/dev/sdxY доступным в lxc контейнере?

Я создал 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, например.

3
задан 13 December 2014 в 03:56

2 ответа

опция

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

2
ответ дан 17 November 2019 в 19:00

Существует два метода. Я только упоминаю самый легкий. Все сделано в хосте, но Вы найдете свое устройство смонтированным в контейнере!

Монтируют устройство где-нибудь в хосте, как обычно, например, используют следующую команду для монтирования /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
0
ответ дан 17 November 2019 в 19:00

Другие вопросы по тегам:

Похожие вопросы: