回滚带有子子卷的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?

Answers:


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/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.