В контейнере LXD можно смонтировать образ диска таким образом, чтобы он был закрыт контейнером?

Внутри контейнера LXD я создал файл образа диска и, наконец, выяснил, как его монтировать. Тем не менее, побочный эффект установки изображения делает его видимым и читаемым для операционной системы хоста.

Есть ли способ смонтировать это изображение внутри контейнера, но сохранить его в контейнере?

Ubuntu 16.04.3 LTS (GNU / Linux 4.4.0-93-generic x86_64) lxd версия 2.17

1
задан 6 September 2017 в 04:52

2 ответа

Я мог бы скрыть монтирование, явно создав новое пространство имен имен. Во-первых, я включил устройства цикла и установил, как в этом методе.

$ lxc exec z1 touch foo $ lxc exec z1 truncate -s 100M foo $ lxc exec z1 mkfs.ext4 foo mke2fs 1.43.4 (31-Jan-2017) Discarding device blocks: done Creating filesystem with 102400 1k blocks and 25688 inodes Filesystem UUID: 79152d07-1b5e-4b60-b716-84e72a1cce50 Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done $ lxc exec z1 mount foo /mnt $ lxc exec z1 touch /mnt/foo

С помощью этой конфигурации точка монтирования не легко видна за пределами контейнера (например, это не выведено в вывод mount, например ). Мне приходилось обращаться к нему с помощью /proc/<pid-of-container-process>/cwd (который, в свою очередь, был доступен только для root, но не для моего обычного пользователя, который может запускать команды lxc):

$ grep /mnt /proc/*/mounts | head /proc/13782/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/13858/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14266/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14394/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14397/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14398/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14406/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14407/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14420/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14421/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 $ ls /proc/14421/cwd/mnt ls: cannot access '/proc/14421/cwd/mnt': Permission denied $ sudo ls /proc/14421/cwd/mnt # a process in the container foo lost+found

Теперь, делая приватный используя этот метод :

$ lxc exec z1 bash root@z1:~# umount /mnt root@z1:~# unshare --mount -- /bin/bash root@z1:~# mount --make-private foo /mnt root@z1:~# ls /mnt foo lost+found root@z1:~# exit root@z1:~# ls /mnt root@z1:~# exit

Теперь эти команды не выдали выход:

$ sudo ls /proc/14421/cwd/mnt $ grep /mnt /proc/*/mounts | head

Но теперь любые процессы в контейнере, которые нуждаются в доступ к этой точке монтирования должен выполняться в этом пространстве имен mount. Это можно сделать, например, с помощью nsenter.

0
ответ дан 18 July 2018 в 07:21

Я мог бы скрыть монтирование, явно создав новое пространство имен имен. Во-первых, я включил устройства цикла и установил, как в этом методе.

$ lxc exec z1 touch foo $ lxc exec z1 truncate -s 100M foo $ lxc exec z1 mkfs.ext4 foo mke2fs 1.43.4 (31-Jan-2017) Discarding device blocks: done Creating filesystem with 102400 1k blocks and 25688 inodes Filesystem UUID: 79152d07-1b5e-4b60-b716-84e72a1cce50 Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done $ lxc exec z1 mount foo /mnt $ lxc exec z1 touch /mnt/foo

С помощью этой конфигурации точка монтирования не легко видна за пределами контейнера (например, это не выведено в вывод mount, например ). Мне приходилось обращаться к нему с помощью /proc/<pid-of-container-process>/cwd (который, в свою очередь, был доступен только для root, но не для моего обычного пользователя, который может запускать команды lxc):

$ grep /mnt /proc/*/mounts | head /proc/13782/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/13858/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14266/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14394/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14397/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14398/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14406/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14407/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14420/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 /proc/14421/mounts:/dev/loop2 /mnt ext4 rw,relatime,data=ordered 0 0 $ ls /proc/14421/cwd/mnt ls: cannot access '/proc/14421/cwd/mnt': Permission denied $ sudo ls /proc/14421/cwd/mnt # a process in the container foo lost+found

Теперь, делая приватный используя этот метод :

$ lxc exec z1 bash root@z1:~# umount /mnt root@z1:~# unshare --mount -- /bin/bash root@z1:~# mount --make-private foo /mnt root@z1:~# ls /mnt foo lost+found root@z1:~# exit root@z1:~# ls /mnt root@z1:~# exit

Теперь эти команды не выдали выход:

$ sudo ls /proc/14421/cwd/mnt $ grep /mnt /proc/*/mounts | head

Но теперь любые процессы в контейнере, которые нуждаются в доступ к этой точке монтирования должен выполняться в этом пространстве имен mount. Это можно сделать, например, с помощью nsenter.

0
ответ дан 24 July 2018 в 18:47
  • 1
    Спасибо, что нашли время с этой проблемой. Однако, похоже, он работает не так, как ожидалось. Хотя точка монтирования является частной в контейнере, на рабочем столе Ubuntu объем отображается в доке как / media / tk / 95c3f396-9419-42df-aebc-d16e2038324a. Он недоступен для обычного пользователя, но root может легко читать и записывать в том. – TiberiusKirk 6 September 2017 в 14:26
  • 2
    @TiberiusKirk, как вы установили mount? – muru 6 September 2017 в 14:27
  • 3
    Как вы показали в своем ответе, но конкретно: mount --make-private -t xfs -o rw brick1.img /data/brick1 – TiberiusKirk 6 September 2017 в 14:30

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

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