我想为完整系统(root-on-ZFS)备份创建一个方便的解决方案。这个想法是在启动时(在任何写入 FS 之前)或作为关机过程的最后一步创建整个系统的快照。这样我想保证 FS 在逻辑上是一致的,即快照代表冷 FS 的状态(没有任何未完成的进程)。zfs send
稍后,如有必要,可以将此快照备份到另一个位置。
同样,这个想法是要保证,不仅仅是所有 I/O 操作都已完成且一致,而是所有进程都已完成,因此 FS 状态是全局且逻辑一致的。例如,不可能某个程序已经写入文件a
并进入快照,但在b
微秒后完成写入文件,因此文件b
不存在于快照中,而对于程序操作,文件在同步。
编辑:我的发行版是 Arch Linux
我将满足您的要求的方法是在任何可能写入文件系统的进程启动之前从 initrd(又名 initramfs)引导期间创建快照。(假设这是使用 initrd 的“正常”Linux 安装。)不幸的是,您没有提及您使用的是哪个 Linux 发行版,因此我无法为您提供有关如何将您自己的步骤添加到 initrd 的更具体建议,因为不同发行版的做法不同。例如,在 Arch Linux 和衍生产品上,您可以在 /etc/initcpio/hooks 中创建一个自定义 mkinitcpio 挂钩,并将其添加到 /etc/mkinitcpio.conf 文件中的“hooks”行(参见https://wiki.archlinux.组织/标题/mkinitcpio)。您的自定义挂钩将在导入 ZFS 池之后简单地创建快照,以便在 initrd 将控制权传递给常规系统启动进程之前创建它。其他发行版还有其他向 initrd 添加步骤的方法。
一些建议:当问 Linux 问题时,提供比您在此处提供的更多细节是一个非常好的主意。最重要的是,您应该提及您正在使用的 Linux 发行版。尽可能多地添加有关您的系统的一般信息也是一个好主意,以防万一它可能对试图回答您的问题的人有所帮助。有关文件系统的问题,例如您的磁盘分区表类型(DOS 或 GPT)、可能相关的磁盘分区、是否使用任何形式的 RAID 或镜像、是否使用任何类型的加密、是否使用 LVM 等。可能会有所帮助。对于您的特定问题,附加信息,例如您的池中是否有多个文件系统和多个挂载点以及您是否使用 ZFS' s 自动挂载或传统挂载也会有所帮助。希望这可以帮助!