在生成一致的磁盘数据方面,sync 和 fsfreeze 有何不同?

在生成一致的磁盘数据方面,sync 和 fsfreeze 有何不同?

在运行的 Linux 机器上,文件系统中的缓存内容应该写入磁盘。

  • “sync”:与命令行同步同步相关系统调用,可以将数据持久化/写出到存储设备
  • “fsfreeze”:命令冻结,另一方面似乎:

    fsfreeze 停止对文件系统的新访问并在磁盘上创建稳定的映像。

因此,似乎使用任一命令都可以在发出命令时实现数据的“磁盘上稳定”表示。

显然fsfreeze,被描述为“另外”暂停进一步的“新访问”。

现在这个问题寻求信息,如果为了获得一致的磁盘映像(即用于备份复制磁盘文件系统数据),使用sync和fsfreeze之间是否有任何区别。

我认为要回答这个问题,可能有必要考虑所使用的文件系统,因为不同的文件系统有不同的方式来确保(或不)将中间状态原子提交到磁盘。

个人测试表明,文件fsfreeze系统btrfs确实总是以无响应的控制台结束,需要硬重置。另一方面,同步并没有(无意讽刺)冻结系统。

答案1

因此,似乎使用任一命令都可以在发出命令时实现数据的“磁盘上稳定”表示。

是的,但就sync的情况而言,“磁盘上稳定”状态可能非常短暂 -sync发出后所做的任何更改都可能使文件系统再次不一致。

fsfreeze用途FIFREEZE没有超时。正如您所发现的,这可能会导致系统冻结,因为受影响的文件系统上无法进行写入操作,并且写入操作会在多种情况下发出(例如写你的 shell 的历史)。有紧急解冻组合键, SysRqj, 您可以使用(除非它已被禁用)。

要点FIFREEZE是,当它生效时,您可以读取冻结文件系统底层的存储并构建一致的存储映像 -IE其中数据和元数据完全同步。

只有sync,并且在完成时进行的更改sync将在磁盘上,但复制底层存储不一定会产生一致的图像,因为后续写入可能已经开始命中存储。复制这样的映像应该允许您检索您关心的所有数据,并且在许多情况下,任何部分写入的更改都不会阻止文件系统恢复;但您不能保证映像无需修复即可按原样使用,即使在已记录、日记或写时复制文件系统上也是如此。

相关内容