Как сделать рекурсивный снимок субвола btrfs?

Предположим, что подтом btrfs с именем «child-subvol» находится внутри другого подтома, скажем, «root-subvol», и если мы делаем снимок «root-subvol», то «child-subvol» также должен быть сделан.

Поскольку в файловой системе btrfs еще нет поддержки рекурсивных моментальных снимков, как этого можно добиться в качестве альтернативы?


person Pramod Aithal    schedule 08.07.2014    source источник


Ответы (3)


Шаг 1: Получите все находящиеся подтома btrfs. Предпочтительно в отсортированном порядке, достигнутом приведенной ниже командой.

Список подтомов $ btrfs --sort=-path ‹ top_subvol >

Шаг 2: В порядке предпочтения выполните операцию удаления/моментального снимка.

$ btrfs subvolume удалить ‹ имя подтома >

person Pramod Aithal    schedule 06.10.2014
comment
Это неправильный ответ, потому что процедура моментального снимка не является атомарной. Это нельзя назвать моментальным снимком. Правильный ответ: нет (все еще) способа делать рекурсивные снимки на Btrfs. Только ZFS имеет такую ​​функцию (zfs snapshot -r). В отличие от Btrfs, ZFS имеет иерархию подтомов, организованную в виде древовидной структуры, отделенной от структуры подключенных каталогов (за исключением необязательных точек подключения по умолчанию). Дерево подтомов представляет рекурсивное покрытие атомарности моментальных снимков, независимо от точек монтирования. openzfs.github.io/openzfs-docs/man/ 8/zfs-snapshot.8.html - person Andrej Podzimek; 15.07.2020

Мне тоже это было интересно, и я не смог найти в Интернете никаких рекомендуемых передовых практик. Должна быть возможность написать сценарий для создания моментального снимка, который обрабатывает рекурсию.

person Peter R    schedule 30.09.2014
comment
Невозможно написать такой сценарий без поддержки на стороне ядра. Серия снимков (без взаимной атомарности) не помогает. Давайте предположим, что программа сначала создает файл в подтоме A, а затем записывает символическую ссылку на новый файл в подтом B. Сценарий создания моментальных снимков, работающий примерно в то же время, может, например, сначала сделать снимок подтома A, before< /i> был создан новый файл на A. Затем он может сделать снимок подтома B, после создания символической ссылки из B в A. Там. У нас есть оборванная символическая ссылка между двумя отдельными снимками. - person Andrej Podzimek; 15.07.2020
comment
Я бы сказал, что неатомарная серия снимков лучше, чем полное отсутствие рекурсивных снимков, верно? - person Peter R; 15.10.2020

Как предлагает Питер Р., вы можете написать сценарий. Однако, если вы хотите отправить подтом, он должен быть помечен как доступный только для чтения, и вы не можете рекурсивно создавать моментальные снимки томов только для чтения.

Чтобы решить эту проблему, вы можете использовать btrfs-property (найденный через этот ответ) в скрипте, который обрабатывает рекурсию, заставляя его (после создания всех снимков) помечать снимки только для чтения, поэтому вы может отправить их.

В качестве альтернативы вы можете сделать

cp -a --reflink=always /path/to/root_subvol/ /path/to/child_subvol/

(--reflink=auto никогда раньше у меня не работало, а также может помочь вам отловить ошибки)

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

person Olivetree    schedule 28.10.2015
comment
моментальный снимок является атомарным для каждого подтома, reflink является атомарным для каждого файла. Любая программа, которая использует несколько файлов данных и изменяет свои данные между началом и концом копии рефлинка, может иметь поврежденные данные (базы данных особенно уязвимы для этого). - person Perkins; 18.08.2017