如果我杀死了 running e4defrag
,是否存在数据丢失/损坏的风险?有没有安全的方法来中断它?
例如:e4defrag
在大分区(如根目录)或大文件(如 squashfs 系统映像文件)上运行非常慢,所以有时e4defrag
需要在完成之前停止/杀死,但我不确定是否杀死它(通过发送SIGINT
, SIGTERM
,SIGKILL
等)e4defrag
是安全的吗?
我正在运行 Debian Stretch,文件系统是 ext4。
我的内核版本:4.14.13
我的e2fsprogs 版本:1.43.4-2
我没有检查代码本身,但由于 e4defrag 一次只处理一个文件,它绝对不会破坏整个文件系统。
无论如何,实际的数据移动是在日志事务的上下文中在内核中完成的,因此它应该不受您在用户空间中所做的任何事情的影响。如果您在中间重新启动,它甚至应该不会引起问题。
由于
e4defrag
在已挂载的文件系统上工作,使用标准文件系统调用,kill
它将与任何写入文件的程序具有相同的危险kill
......这取决于kill
发送到的信号e4defrag
。SIGINT应该没问题
SIGTERM应该没问题
SIGKILL似乎有潜在危险,可能会损坏文件——也许是一个重要文件。因此避免将SIGKILL与
e4defrag
.显然,碎片整理魔术都在一个 ioctl() 调用中(每个范围):
因此,似乎整个碎片整理过程都是在内核中完成的。即使在电网断电和杀死-9的情况下,它也应该受到日志保护和安全。
在后一种情况下,仅应在下次重新启动时进行日志重播。希望这可以帮助。