Відкат підручника btrfs з дочірніми підпунктами


9

Чи існує канонічний спосіб повернення до знімка підгрупу, який містить дочірні підпункти. Так, наприклад, це мій об'ємний макет btrfs:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var

Таким чином, ви можете бачити, що home, opt та var - це підгрупи __active. Якщо я зроблю знімок __active таким, що це моя нова верстка:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

Якщо я хочу повернутись до знімка __active, чи є спосіб повторного приєднання додому, opt та var до нового __active?

Відповіді:


3

Якщо ви маєте на увазі повторне з'єднання, яке btrfs subvolume listбуло б показано:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

то немає , зараз немає способу зробити це з btrfs-progs.

Видалити підтоми можна лише в тому випадку, якщо всі дочірні підпункти (створені за допомогою btrfs subvolume create ...) порожні, однак це не вірно для знімків (які створюються за допомогою btrfs subvolume snapshot .... Знімки завжди можна видалити, і якщо ви можете їх перемістити, то буде проблема з видаленням знімка.

Хоча і дочірні підпункти та знімки відображаються в одній і тій же структурі дерева і навіть діляться btrfs subvolume delete ..командою, вони не діють однаково.


1

Перш за все, під час виготовлення __snapshot/__activeпідпункти (home, opt, var) не розриваються. Натомість створюються порожні каталоги. Таким чином __snapshot/__activeможна легко видалити, тоді як __activeне можна.

Але головним моментом було відновлення __activeс __snapshot/__active. Наскільки мені відомо, це не можна зробити атомним шляхом. Але ви можете із задоволенням робити mvзнімки та інші підпункти навколо (поки вони підлягають запису). Так роблять, наприклад

mv __active __snapshot/__active.old
mv __snapshot/__active __active

відновлює __activeз огляду, але переміщуючи підпункти на __snapshot/__active.old/{home,opt,var}. Тепер ви можете їх повторно приєднати

mv __snapshot/__active.old/{home,opt,var} __active/

і ти отримаєш

ID 257 gen 59804 top level 258 path __snapshot/__active.old
ID 258 gen 59786 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 5 path __active

Якщо ваш знімок зроблений лише для читання, ви можете зробити це, наприклад

mv __active __snapshot/__active.old
btrfs subvolume snapshot __snapshot/__active __active
mv __snapshot/__active.old/{home,opt,var} __active/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.