如何在不损坏我的数据的情况下终止/终止正在运行的 e4defrag?

如何在不损坏我的数据的情况下终止/终止正在运行的 e4defrag?

如果我杀死一个正在奔跑的人e4defrag,是否存在数据丢失/损坏的风险?有没有安全的方法来中断它?

例如:跑步e4defrag在大分区(例如根目录)或大文件(例如squashfs系统映像文件)上速度非常慢,因此有时,停止/终止e4defrag在完成之前是需要的,但我不确定是否杀死它(通过向其发送SIGINTSIGTERMSIGKILL等之一)e4defrag是安全的?

我正在运行 Debian Stretch,文件系统是 ext4。
我的内核版本:4.14.13
我的e2fsprogs版本:1.43.4-2

答案1

我没有检查代码本身,但由于 e4defrag 每次只能处理一个文件,所以它肯定不会破坏整个文件系统。

无论如何,实际的数据移动是在日志事务的上下文中在内核中完成的,因此它应该不受您在用户空间中所做的任何操作的影响。如果您中途重新启动,它甚至不会造成问题。

答案2

由于e4defrag在已安装的文件系统上工作,使用标准文件系统调用, kill因此它与任何写入文件的程序具有相同的危险kill......这取决于kill发送到哪个信号e4defrag

  • 信号情报应该可以

  • 信号术语应该可以

  • 信号杀死似乎有潜在危险,并且可能会损坏文件——也许是重要的文件。因此避免使用信号杀死e4defrag

答案3

显然,碎片整理的魔力都在一次 ioctl() 调用中(每个范围):

/* EXT4_IOC_MOVE_EXT */
defraged_ret =
    ioctl(fd, EXT4_IOC_MOVE_EXT, &move_data);

所以,看起来整个碎片整理过程都是在内核中完成的。它应该受到日志保护,并且即使在电网断电和kill -9的情况下也是安全的。

在后一种情况下,仅应在下次重新启动时重播日志。希望这可以帮助。

相关内容