Куда LXD Init перемещает данные из существующего пула ZFS? - PullRequest
0 голосов
/ 02 мая 2018

TL; DR;

Я вижу некоторые расхождения между тем, что я настроил с помощью zfs, что lxd может делать во время процесса lxd init, и тем, что я ожидал увидеть.

Я использую LXD около месяца, просмотрел документацию и сделал несколько поисков, но они, похоже, не затрагивают эту тему.

Пожалуйста, просмотрите раздел ниже для более подробной информации о моих вопросах:

  1. Может кто-нибудь объяснить почему Я наблюдаю несоответствие точек монтирования между LXD и ZFS и какие последствия это может иметь, если таковые имеются?
  2. Является ли LXD на самом деле , перемещая содержимое tank/lxd набора данных из VDEV пула ZFS из местоположения монтирования в /mnt/tank/lxd/... в /var/lib/lxd/... или что-то еще делается? (a) Как я могу подтвердить / подтвердить любой случай? (b) Еще лучше, как я могу заставить LXD сохранять / помещать все в набор данных, который я настроил, используя zfs?
  3. Я хочу, чтобы все, что обычно хранилось в /var/lib/lxd/, хранилось в tank/lxd, указанном мной во время lxd init: Как я могу это сделать? (Хороший путь ZFS / LXD предпочтителен; я мог бы mv /var/lib/lxd в бак и ln -s каталог, чтобы указать на /mnt/tank/..., но это похоже на плохой взлом и хочу его избежать . Должен быть лучший способ.)

Заранее спасибо.


Фон

Я использую LXD 3.0.0 в Ubuntu 18.04, настраивая его на использование уже существующих ZFS Pool и Dataset. Вот как это выглядит до работы lxd init:

$ sudo zpool create -m /mnt/tank tank raidz3 <6 storage SSDs omitted>
$ sudo zfs set compression=on tank
$ sudo zfs create tank/lxd
$ sudo zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank       216K  1.31T  43.7K  /mnt/tank
tank/lxd  41.7K  1.31T  41.7K  /mnt/tank/lxd

Это выглядит так, как я ожидал. Затем я запускаю lxd init и выполняю следующие действия:

$ lxd init
[...]
Create a new ZFS pool? (yes/no) [default=yes]: no
Name of the existing ZFS pool or dataset: tank/lxd
[...]

Это то, что zfs list показывает после выполнения вышеуказанного:

$ sudo zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
tank                  589K  1.31T  41.7K  /mnt/tank
tank/lxd              250K  1.31T  41.7K  none
tank/lxd/containers  41.7K  1.31T  41.7K  none
tank/lxd/custom      41.7K  1.31T  41.7K  none
tank/lxd/deleted     41.7K  1.31T  41.7K  none
tank/lxd/images      41.7K  1.31T  41.7K  none
tank/lxd/snapshots   41.7K  1.31T  41.7K  none

LXD создал несколько наборов данных, но mountpoint больше не являются тем, чем они были раньше (то есть tank/lxd ушел), и не тем, чего я ожидал (в списке lxd/... ничего нет). Короче говоря, исходная точка монтирования исчезла, а другие наборы данных не отображаются, как я ожидал.

Я, наверное, здесь не прав, но выглядит так, как будто LXD переместил данные, которые должны быть под /mnt/tank/lxd/... , из пула ZFS vdevs и в каталог /var/lib/lxd/ на LVM, где была установлена ​​ОС. Я не уверен, что я пропустил.

Я могу использовать zfs set команды, чтобы изменить «исправить» это:

$ sudo zfs set mountpoint=/mnt/tank/lxd tank/lxd
$ sudo zfs set mountpoint=/mnt/tank/lxd/containers tank/lxd/containers
$ sudo zfs set mountpoint=/mnt/tank/lxd/custom tank/lxd/custom
$ sudo zfs set mountpoint=/mnt/tank/lxd/deleted tank/lxd/deleted
$ sudo zfs set mountpoint=/mnt/tank/lxd/images tank/lxd/images
$ sudo zfs set mountpoint=/mnt/tank/lxd/snapshots tank/lxd/snapshots

И убедитесь, что они снова появляются, как и ожидалось:

$ sudo zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
tank                  641K  1.31T  43.7K  /mnt/tank
tank/lxd              252K  1.31T  43.7K  /mnt/tank/lxd
tank/lxd/containers  41.7K  1.31T  41.7K  /mnt/tank/lxd/containers
tank/lxd/custom      41.7K  1.31T  41.7K  /mnt/tank/lxd/custom
tank/lxd/deleted     41.7K  1.31T  41.7K  /mnt/tank/lxd/deleted
tank/lxd/images      41.7K  1.31T  41.7K  /mnt/tank/lxd/images
tank/lxd/snapshots   41.7K  1.31T  41.7K  /mnt/tank/lxd/snapshots

Но это похоже на частичное решение, так как все остальные файлы (например, lxd.db, ключи и т. Д.) Остаются ниже /var/lib/lxd. Поэтому я не уверен, что я что-то исправляю или что-то исправляю вообще.

Кроме того, мне неясно, достиг ли я чего-либо с помощью команд zfs set. Например, touch /var/lib/lxd/containers/hi.txt действительно не показывает файл под /mnt/tank/lxd/containers/, что я ожидал бы , если они оба смотрели в одно и то же место.

Заранее спасибо за помощь.


EDIT0: Предлагаемый тест в комментариях и результатах

Было предложено попробовать записать некоторые файлы в качестве теста, чтобы увидеть, где фактически используется используемое пространство на основе системной информации. Шаги испытаний были следующими:

  1. Уничтожьте и заново создайте пул ZFS и конфигурации LXD, но без выполнения команд zfs set mountpoint, чтобы LXD делал свое дело и видел, что происходит. (Шаги опущены ниже для краткости.)
  2. В качестве элемента управления проверьте емкость и использование пула / набора данных на хосте.
  3. Введите контейнер и выполните еще одну контрольную проверку использования пространства.
  4. Запишите тестовый файл внутри контейнера.
  5. Повторите проверки на шагах 1 и 2 для поиска изменений.

Результаты были безрезультатными и их можно увидеть ниже.

2. Контрольная проверка на хосте

$ sudo zfs list
NAME                                                                               USED  AVAIL  REFER  MOUNTPOINT
tank                                                                              1.18G  1.31T  41.7K  /mnt/tank
tank/lxd                                                                          1.18G  1.31T  41.7K  none
tank/lxd/containers                                                                270M  1.31T  41.7K  none
tank/lxd/containers/base-server                                                    251M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/base-server
tank/lxd/containers/dev-server                                                    9.18M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/dev-server
tank/lxd/containers/qa-server                                                     9.14M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/qa-server
tank/lxd/custom                                                                    125K  1.31T  41.7K  none
tank/lxd/custom/dev-volume                                                        41.7K   512G  41.7K  /var/lib/lxd/storage-pools/lxd-pool/custom/dev-volume
tank/lxd/custom/qa-volume                                                         41.7K   512G  41.7K  /var/lib/lxd/storage-pools/lxd-pool/custom/qa-volume
tank/lxd/deleted                                                                  41.7K  1.31T  41.7K  none
tank/lxd/images                                                                    937M  1.31T  41.7K  none
tank/lxd/images/ab23ac2bda8cfb48c176a2d1e790181d5a1ed3522732a0cf8ff189dea848d3f1   588M  1.31T   588M  none
tank/lxd/images/b36ec647e374da4816104a98807633a2cc387488083d3776557081c4d0333618   349M  1.31T   349M  none
tank/lxd/snapshots                                                                41.7K  1.31T  41.7K  none

3. Внутри контейнера

root@dev-server:~$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
tank/lxd/containers/dev-server  1.4T  589M  1.4T   1% /
none                            492K     0  492K   0% /dev
udev                             32G     0   32G   0% /dev/tty
tmpfs                           100K     0  100K   0% /dev/lxd
tank/lxd/custom/dev-volume      512G  128K  512G   1% /mnt/tank
tmpfs                           100K     0  100K   0% /dev/.lxd-mounts
tmpfs                            32G     0   32G   0% /dev/shm
tmpfs                            32G  160K   32G   1% /run
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                            32G     0   32G   0% /sys/fs/cgroup

4. Запишите тестовый файл в контейнер

root@dev-server:~$ dd if=/dev/zero of=/root/test.img bs=8MB
^C3929+0 records in
3929+0 records out
31432000000 bytes (31 GB, 29 GiB) copied, 17.7005 s, 1.8 GB/s

root@dev-server:~$ ls -lh
total 512
-rw-r--r-- 1 root root 30G May  7 20:21 test.img

5,1. Результаты проверки из контейнера

root@dev-server:~$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
tank/lxd/containers/dev-server  1.4T  589M  1.4T   1% /
none                            492K     0  492K   0% /dev
udev                             32G     0   32G   0% /dev/tty
tmpfs                           100K     0  100K   0% /dev/lxd
tank/lxd/custom/dev-volume      512G  128K  512G   1% /mnt/tank
tmpfs                           100K     0  100K   0% /dev/.lxd-mounts
tmpfs                            32G     0   32G   0% /dev/shm
tmpfs                            32G  160K   32G   1% /run
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                            32G     0   32G   0% /sys/fs/cgroup

5,2. Результаты проверки с хоста

$ sudo zfs list
NAME                                                                               USED  AVAIL  REFER  MOUNTPOINT
tank                                                                              1.18G  1.31T  41.7K  /mnt/tank
tank/lxd                                                                          1.18G  1.31T  41.7K  none
tank/lxd/containers                                                                270M  1.31T  41.7K  none
tank/lxd/containers/base-server                                                    251M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/base-server
tank/lxd/containers/dev-server                                                    9.18M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/dev-server
tank/lxd/containers/qa-server                                                     9.14M  1.31T   588M  /var/lib/lxd/storage-pools/lxd-pool/containers/qa-server
tank/lxd/custom                                                                    125K  1.31T  41.7K  none
tank/lxd/custom/dev-volume                                                        41.7K   512G  41.7K  /var/lib/lxd/storage-pools/lxd-pool/custom/dev-volume
tank/lxd/custom/qa-volume                                                         41.7K   512G  41.7K  /var/lib/lxd/storage-pools/lxd-pool/custom/qa-volume
tank/lxd/deleted                                                                  41.7K  1.31T  41.7K  none
tank/lxd/images                                                                    937M  1.31T  41.7K  none
tank/lxd/images/ab23ac2bda8cfb48c176a2d1e790181d5a1ed3522732a0cf8ff189dea848d3f1   588M  1.31T   588M  none
tank/lxd/images/b36ec647e374da4816104a98807633a2cc387488083d3776557081c4d0333618   349M  1.31T   349M  none
tank/lxd/snapshots                                                                41.7K  1.31T  41.7K  none

Выполнение команды df -h на хосте до и после создания / уничтожения тестового файла также не показало никаких изменений. Я повторил это с большим (100 ГБ) тестовым файлом, но не заметил разницы.

1 Ответ

0 голосов
/ 02 мая 2018

Когда mountpoint равно none, это может означать одно из двух:

  1. Кто-то явно отключил эту файловую систему с помощью команды zfs unmount.
  2. Кто-то использовал команду mount, чтобы указать, где должна быть смонтирована эта файловая система, вместо использования команды zfs mount.

Я предполагаю, что LXD делает последнее, а ZFS просто не знает, где он был смонтирован. Если это так, LXD, вероятно, также записывает записи в /etc/fstab для воссоздания этих монтирований в /var/lib/lxd/... при перезагрузке. (Черт, может быть, авторы LXD даже считают эту особенность тем, что любопытные энтузиасты ZFS с меньшей вероятностью будут пытаться хранить или изменять вещи в своих каталогах данных виртуальной машины, если точка монтирования будет менее удобной для ввода.)

Итак, короткий ответ: я думаю, что нечего было исправить. Однако я не думаю, что изменения, внесенные вами с помощью zfs set, также принесут вред.

Вы упомянули, что touch ... в каталогах LXD ничего не создает в каталогах /mnt/tank/.... Файловая система может быть смонтирована только в одном месте за раз, поэтому я думаю, что соответствующие каталоги в /mnt - это просто каталоги, которые ZFS оставила на месте, когда изменилась точка монтирования. Если вы попытаетесь переключить точку монтирования обратно на /mnt/... сейчас, это заставит вас удалить файл, к которому вы прикоснулись, до того, как произойдет монтирование («наложение» дубликатов каталогов из двух разных файловых систем недопустимо). Если вы хотите, чтобы они были связаны по какой-либо причине, вы можете использовать символическую ссылку для этого.

В будущем вы можете выяснить, на какой файловой системе записан файл, используя df -P /path/to/file, чтобы помочь отладить подобные проблемы.

...