花费了大量时间之后,我仍无法充分理解 btrfs 并按照我想要的方式使用它。
最终我的目标很简单:为操作系统升级提供干净的防故障解决方案。所以我需要做的只有三件事:创建快照、回滚到快照和丢弃快照(因为升级成功了)。
创建系统快照:
btrfs subvolume snapshot @ /btrfs/@-before-upgrade
首先,此命令应创建一个名为“@-before-upgrade”的快照,即我当前的“/”。之后写入磁盘的所有内容都不会位于该快照内。这给我带来了第一个问题:如果正在运行的进程正在写入文件或服务在内存中有需要存储的数据,该怎么办?有没有办法创建一个在重启后用作“@”-“/”的快照?
丢弃快照:
如果升级成功,则可以安全删除快照。如果我没记错的话,正确的命令应该是这样的:
btrfs subvolume delete /btrfs/@-before-upgrade
回滚到快照:
如果升级失败,我需要恢复到创建快照时的状态。所以在管理完第一部分后,它就像是重启而不是断电一样。所以我需要交换快照名称,然后重启,然后删除损坏的快照。关于这个问题:交换快照名称后,更改是否仍会写入现在称为“@-broken”的快照中?还是所有内容都会突然写入新的/旧的“@”中?如果是这样,是否有任何方法像上面的问题一样在重启后应用它?
mv /btrfs/@ /btrfs/@-broken
mv /btrfs/@-before-upgrade /btrfs/@
reboot
btrfs subvolume delete /btrfs/@-broken
提前感谢您的所有帮助和反馈。
答案1
制作快照后,任何正在写入的文件仍将写入快照的一半,而新写入将写入原始卷。这可能会导致文件损坏,就像崩溃或断电一样。如果您正在运行无法应对突然断电的应用程序,请在制作快照时关闭它们(可能启动到救援模式)。移动快照时,更改直到您重新启动才会生效,因此移动后写入的任何内容仍保留在快照中,您稍后将丢弃它们。
仅供参考,该apt-btrfs-snapshot
软件包提供了用于管理所有这些的脚本,并且在您运行 apt 安装/删除/升级软件包时自动为您创建快照。