当“fallocate --dig-holes”运行时中断是否安全?

当“fallocate --dig-holes”运行时中断是否安全?

fallocate --dig-holes在非常大的磁盘映像上使用它来使其就地稀疏。我担心这个操作可能不是原子的。我的问题是,

  1. 如果我按 Ctrl+C 中途停止,是否可以保证我的数据是安全的(要么打洞,要么不打洞,但不会处于不一致的状态)?

  2. 断电怎么办?这些文件位于日志文件系统 (ext4) 上。

答案1

是的,如果操作被中断(Ctrl-C 或电源故障),您的数据将是安全的。fallocate --dig 所做的是在文件中搜索为零的块,然后使用 PUNCH HOLE 标志调用 fallocate(2) 系统调用。这将释放全部为零的块。如果此操作被中断,则文件将仅被部分处理,但数据将保持一致状态,因为它不会更改任何非零块。

如果启用了 ext4 日志,那么元数据操作(包括 PUNCH HOLE)要么被提交 --- 要么不提交 --- 但无论哪种方式,文件系统在断电后都将保持一致状态(假设设备是经过断电认证的;一些没有经过断电认证的 SSD,它们的闪存转换层 -- FTL --- 元数据在断电后会损坏,在这种情况下,存储在 SSD 上的数据可能会损坏)。

相关内容