我有一个运行 Debian Buster 的小型家庭服务器,其中有一个ZFS: Loaded module v0.7.12-2+deb10u2, ZFS pool version 5000, ZFS filesystem version 5
带 RAID 的 ZFS 文件系统()。
由于服务器有时几天都不用,我配置了一个自动关闭脚本,如果我的 2 个大 WD 红色硬盘(不是系统硬盘)待机超过 45 分钟,该脚本就会关闭服务器。现在我发现服务器不再关闭了,因为两个驱动器都只待机几分钟,然后再次激活。我测试了一下,iotop
发现 ZFS 的命令txg_sync
正在唤醒它们。即使没有其他进程在驱动器上写入或读取任何内容。
通过使用iosnoop
(https://github.com/brendangregg/perf-tools)我能够识别出 dmcrypt 正在定期写入我的磁盘。请注意,我的底层磁盘使用 LUKS 加密。
./iosnoop -d 8,16
Tracing block I/O. Ctrl-C to end.
COMM PID TYPE DEV BLOCK BYTES LATms
dmcrypt_writ 1895 W 8,16 2080476248 4096 6516.10
dmcrypt_writ 1895 W 8,16 3334728264 4096 6516.14
dmcrypt_writ 1895 W 8,16 2080429048 16384 0.16
dmcrypt_writ 1895 W 8,16 3334728272 20480 0.21
dmcrypt_writ 1895 W 8,16 2080476256 20480 0.16
dmcrypt_writ 1895 W 8,16 3328225336 16384 0.20
这是什么原因造成的?我该如何防止这种情况发生?
答案1
使用 ZFS 和 LUKS 加密设备时,识别磁盘上的 I/O 活动并不容易。一种方法是使用和终止进程的组合iotop
来iosnoop
识别 I/O 活动何时停止。
我能够识别正在访问我的驱动器的进程
cut -d" " -f 1,2,42 /proc/*/stat | sort -n -k +3