Куда LXD Init перемещает данные из уже существующего пула ZFS?

TL; DR;

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

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

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

  1. Может кто-нибудь объяснить Зачем. Я наблюдаю несоответствие точек монтирования между LXD и ZFS и какие последствия это может иметь, если таковые имеются?
  2. Перемещает ли LXD фактически содержимое набора данных tank/lxdвне VDEV пула ZFS из места монтирования в /mnt/tank/lxd/... в /var/lib/lxd/..., или что-то еще делается? а) Как я могу подтвердить / подтвердить любой случай? (б) Еще лучше, как я могу заставить 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 и набора данных. Вот так выглядит перед с 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 ГБ), но не заметил разницы.

Следует ли перенести этот вопрос на дочерний сайт суперпользователь?

code_dredd 07.05.2018 22:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
599
1

Ответы 1

Когда 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, чтобы помочь отладить подобные проблемы.

LXD размонтирует файловую систему, но не казаться для использования cmd zfs; в противном случае я бы ожидал, что zfs mount будет использоваться позже, а zfs list покажет точку монтирования, но это не так. При создании тома с lxc storage volume create ...zfs list показывает, что mountpoint находится под /var/lib/lxd/storage-pools/.... В /etc/fstab записи не добавляются. Проверка w / df -P /var/lib/lxd/... показывает файлы, смонтированные в корневом каталоге /, а не /mnt/..., предлагая теперь данные за пределами пула ZFS, но это всего лишь точка монтирования, поэтому мне все еще непонятно. Вы можете это прояснить?

code_dredd 02.05.2018 19:58

Правильно, я предположил, что lxd монтирует файловую систему каким-то образом, что не очень хорошо работает со встроенной системой учета ZFS; Я предполагаю, что иногда он мог делать «правильные» / интуитивно понятные вещи, возможно, потому, что создание файловой системы установит встроенный учет, а также смонтирует файловую систему. Последняя (странная) возможность, о которой я подумал, заключается в том, что lxd может создавать пустую родительскую файловую систему для настройки некоторых общих свойств, а затем оставлять ее отключенной, поскольку она будет создавать дочерние файловые системы для создаваемых вами томов (и монтировать только их) .

Dan 04.05.2018 10:44

Из-за такого поведения я сейчас нахожу время, чтобы явно подключить каждый набор данных к точке монтирования пула, чтобы убедиться, что ZFS хотя бы правильно перечисляет их. Тем не менее, я не смог на самом деле что-либо окончательно подтвердить или опровергнуть. Я бы не хотел гадать / предполагать, что что-то (скорее всего) так, только для того, чтобы позже узнать, что это не так, и в конечном итоге для меня неприятный сюрприз. Есть ли у вас какие-либо предложения по тестированию / подтверждению того, какое из них действительно имеет место?

code_dredd 04.05.2018 22:20

Думаю, я бы попробовал написать что-нибудь в одном из томов и посмотреть, показывает ли zfs list дополнительное использование места.

Dan 04.05.2018 22:24

Я попробую, когда вернусь в офис на следующей неделе, и посмотрю, как все пойдет. Я поделюсь всем, что найду, чтобы ответ мог объяснить это и любые другие попытки и / или выводы, чтобы быть более полными.

code_dredd 05.05.2018 02:28

Я пробовал кое-что, но результаты были странными. Пожалуйста, посмотрите мою правку в основном сообщении.

code_dredd 07.05.2018 22:47

Кстати, тест проводился после уничтожения и воссоздания всего как на уровне пула ZFS, так и на уровне LXD. Я избегал команд zfs set mountpoint, чтобы понаблюдать за тем, что мог делать LXD.

code_dredd 07.05.2018 22:50

Попробуйте скопировать из / dev / urandom вместо / dev / zero внутри контейнеров - блоки нулей будут сжаты почти до нуля, поэтому могут не отображаться в разрешении, на которое вы смотрите.

Dan 07.05.2018 22:55

Хорошо, конечно ... действительно, получение его от /dev/urandom было способом пройти тест, чтобы показать убедительные результаты. По какой-то причине я ускользнул от того факта, что на прошлой неделе я включил сжатие в пуле ZFS и что это приведет к сжатию всех /dev/zero до ничтожно малой величины. Данные является хранятся в пуле, как и ожидалось, но теперь я смог подтвердить это напрямую. Вам следует подумать об обновлении своего ответа. Большое спасибо за помощь.

code_dredd 07.05.2018 23:04
«Итак, краткий ответ: я думаю, что было нечего исправить».. Хотя детали не были полностью правильными, это предложение, приведенное выше, оказалось совершенно правильным. Ваши комментарии также были очень полезны, и я ценю это. Ожидаю добавить ответ с более подробной информацией для потомков.
code_dredd 08.05.2018 18:07

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