如果我杀死一个正在奔跑的人e4defrag
,是否存在数据丢失/损坏的风险?有没有安全的方法来中断它?
例如:跑步e4defrag
在大分区(例如根目录)或大文件(例如squashfs系统映像文件)上速度非常慢,因此有时,停止/终止e4defrag
在完成之前是需要的,但我不确定是否杀死它(通过向其发送SIGINT
、SIGTERM
、SIGKILL
等之一)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的情况下也是安全的。
在后一种情况下,仅应在下次重新启动时重播日志。希望这可以帮助。