修改大量快照“指向”的文件

修改大量快照“指向”的文件

我正在使用 btrfs 和 snapper。因此,我有许多定期的 btrfs 快照,它们被标记为只读(当然可以通过 btrfs 将其更改为 r/w 并更改回来。)

假设在我的初始安装过程中我设置了一个 vimrc。而且,假设现在我想更改 vimrc,这样,如果我返回任何快照,我的 vimrc 就是新的。是的,这完全重写了历史,并且违背了历史备份的想法。但假设我经常更改活动快照以进行测试,并且不想继续像这样重新更改某些配置文件。我可以删除我的文件备份。

现在,应该只有一个正在使用/指向的 vimrc 文件内容的副本,因为自第一个快照以来它从未被修改过。

有没有办法可以修改 vimrc 文件,以便更新“所有内容”?

我是否可以在编辑过程中绕过写入时复制,仅针对一个文件这样做,以便后台中的任何系统文件仍然使用 COW?我发现我无法使用 chattr 的 NOCOW,因为该文件不是新的或空的。还有别的办法吗?

或者,我是否必须编辑实时文件,将所有快照转为读/写,对所有快照文件执行 cp -ax --reflink=always,然后将所有快照转为读/写?有很多快照可以做到这一点。 (当然有一个脚本可以减轻这痛苦。)

答案1

无法从 BTRFS 工具集中执行此操作。

然而:

从实时介质引导系统并在十六进制编辑器中打开原始分区(即/dev/sda1)。使用搜索功能扫描磁盘上的文件,并让你的更改这么短的文件应该全部在一个范围内,所以它会很容易。由于该文件从未被编辑过,因此应该只有一份副本可供修改。否则,请使用 fstrim 或类似工具将磁盘未使用的部分清零,以消除多余的副本。

注意:文件长度一定不能改变,否则你会把事情搞砸的。您可以将其缩短并用空值或其他内容填充它,但不能使其更长,否则会损坏文件系统。

注意:由于 BTRFS 校验和,如果您只是挂载文件系统并尝试使用它,则会检测到读取错误。您必须使用修复工具丢弃并重建整个校验和树。在尝试此操作之前,请确保您没有任何需要恢复的损坏数据。

注意:这是一个坏的这个想法几乎肯定不值得付出努力和冒险!只需保留您的快照不变,并记下更新此文件(如果您需要恢复)即可。会没事的!

相关内容