我的 ext4 文件系统出现了一些问题,似乎是由于jbd2日记。我发表了一篇相关文章这里并重新表述它,希望有人能够提供帮助。
举个简单的例子,我从一个空的 8gb USB 驱动器开始,然后使用分区创建一个 ext4 分区。gparted 在创建 ext4 文件系统时使用的命令是:
mkfs.ext4 -j -O extent -L DataTraveler8gb /dev/sde1
我使用 gparted 检查文件系统:
e2fsck -f -y -v /dev/sde1
然后我把它装上去:
sudo mount /dev/sde1 /media/test
磁盘是空的,但此磁盘 (/dev/sde1) 上的日志记录非常活跃。其他磁盘是类似格式的 ext4 SSD。iotop 的快照:
% sudo iotop -oPa
Total DISK READ: 0.00 B/s | Total DISK WRITE: 2027.21 K/s
PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
262 be/3 root 0.00 B 56.00 K 0.00 % 0.18 % [jbd2/sda1-8]
29069 be/3 root 0.00 B 0.00 B 0.00 % 0.16 % [jbd2/sde1-8]
891 be/3 root 0.00 B 4.00 K 0.00 % 0.03 % [jbd2/sdc1-8]
jbd2 对 /dev/sde1 做了什么?
如果我对更大的 2Tb 磁盘执行相同的步骤,iotop 指示这个空磁盘在我挂载后会不断被 jbd2 以 Mb/s 的速率写入。
在其他磁盘上(这些磁盘有操作系统和 /home),我尝试查找是否有任何文件被进程修改,从而导致此行为,但找不到任何文件。我还将许多磁盘密集型进程移至使用 tmpfs。并使用 noatime。
这台机器上还有另一块非 SSD 硬盘 /dev/sdb,也是 ext4 格式,但不是使用 gparted 格式化的(同事给我的)。它没有出现在 iotop 中。所以我假设 gparted 有问题。
任何建议都值得赞赏。此外,任何关于如何修改现有分区以解决问题而无需从头开始的提示都很好。
有一些与 jbd2 相关的帖子,但它们没有帮助(例如这里)。
答案1
看起来 ext4 通过在挂载之前进行大量初始化来实现“快速格式化”(可能是 uninit_bg 选项?),我怀疑 jbd2 是在你第一次格式化驱动器后执行此操作的。其中一条评论这里建议 jbd2 在创建分区后写入分区的时间与分区大小成正比,建议每 200 GB 写入 10 分钟,即每 TB 写入 50 分钟。我昨天格式化了一个 3TB 的 ext4 驱动器,jbd2 写入了很长时间,但现在已停止。
顺便说一句,btrfs 不会这样做,但我还不相信它适用于外部驱动器 - 例如,您需要一个较新的内核(我认为是 3.4+),否则如果您在未先卸载驱动器的情况下移除驱动器(当然,如果断电就会发生这种情况),内核就会出错(并且可能会丢失数据)。