Откат 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, есть ли способ присоединить home, opt и var к новому __active?

Falmarri
источник

Ответы:

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/
Дэвид
источник