我正在尝试找出为什么写入我的服务器上的 ext4 分区如此慢。当我将异地备份驱动器从 ExFAT 重新格式化为 ext4 时,我注意到了这个问题。当这些驱动器格式化为 ExFAT 时,我看到写入速度约为 140-150MB/s。现在,使用 ext4 格式化的相同驱动器,我发现写入速度约为 40MB/s。
这两个驱动器是 4TB Western Digital Elements Portable (25A1) 驱动器,通过 USB 3 连接。
在运行任何基准测试之前,我已确保 ext4 惰性初始化已完成。
findmnt --target
以下是其中一个驱动器的输出:
TARGET SOURCE FSTYPE OPTIONS
/mnt/off-site_2 /dev/sdd1 ext4 rw,nosuid,nodev,noexec,noatime
其他信息(为了方便起见,从评论中复制了一些信息):
- 我正在将许多家庭大型(1GB-5GB)文件同步到这些驱动器。
- 所有文件都小于可用内存量。
- 该系统安装了 8GB RAM,通常使用的内存少于 512mb;其余的由缓存使用。
- 将数据写入驱动器时,无论 FS 是 ExFAT 还是 ext4,该
Dirty
值都会浮动到 1.3GB 左右。/proc/meminfo
- 内核是
4.19.0-11-amd64
我目前在 Debian 10 上可用的最新版本。 - 驱动器型号为WDC WD40NMZW-11GX6S1。根据这,这是一个SMR驱动器。
- 输出
dumpe2fs -h /dev/sdd1
root@Server:~# dumpe2fs -h /dev/sdd1
dumpe2fs 1.44.5 (15-Dec-2018)
Filesystem volume name: Off-site 2
Last mounted on: /mnt/off-site_2
Filesystem UUID: d5f29945-6e3c-45d1-98bb-ac2dd404975a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 244187136
Block count: 976745979
Reserved block count: 48837298
Free blocks: 83988236
Free inodes: 244182173
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Oct 5 15:47:31 2020
Last mount time: Wed Oct 7 20:09:00 2020
Last write time: Wed Oct 7 20:32:22 2020
Mount count: 6
Maximum mount count: -1
Last checked: Mon Oct 5 15:47:31 2020
Check interval: 0 (<none>)
Lifetime writes: 3433 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 777766d4-df04-4c2c-b503-f7244bf87810
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0xbf1db7ae
Journal features: journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size: 1024M
Journal length: 262144
Journal sequence: 0x00003fdd
Journal start: 0
Journal checksum type: crc32c
Journal checksum: 0x2a21e235
我试图在这里演示这个问题:
# ExFAT drive
root@Server:/mnt/off-site_1/test# dd if=/dev/zero of=test.bin bs=1M count=5000 status=progress
5131730944 bytes (5.1 GB, 4.8 GiB) copied, 23 s, 223 MB/s
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 23.6661 s, 222 MB/s
# ext4 drive
root@Server:/mnt/off-site_2/test# dd if=/dev/zero of=test.bin bs=1M count=5000 status=progress
5173673984 bytes (5.2 GB, 4.8 GiB) copied, 44 s, 118 MB/s
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 58.9746 s, 88.9 MB/s