Linux
在 XFS 和 ext4 中使用 xattr 儲存許多小文件
我在 XFS 驅動器上有許多帶有 xattr 的小文件(2000 萬)。文件的平均大小約為 20KB,xattr 的平均大小約為 512 字節。
因為我想將它們移動到 ext4,所以我測試了將這些文件的一部分複製到 ext4(inode 大小為 512 和 1024)和 XFS 驅動器中。
我分別使用以下選項格式化了 3 個驅動器:
# mkfs.ext4 -i 8192 -I 512 /dev/sde1 # mkfs.ext4 -i 8192 -I 1024 /dev/sdf1 # mkfs.xfs -f -i size=1024 /dev/sdg1
並通過 cp -r –preserve=mode,ownership,timestamps,xattr 複製了大約 30GB 的小文件
結果如下:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/sde1 133654640 37164884 89360916 30% /srv/node/sde1 # ext4 -I 512 /dev/sdf1 124741744 36645652 80967252 32% /srv/node/sdf1 # ext4 -I 1024 /dev/sdg1 142507224 31020968 111486256 22% /srv/node/sdg1 # XFS
在這兩種情況下,ext4 使用的塊都比 XFS 多得多。是什麼讓這些不同?如何使用 ext4 不浪費磁碟空間?
一件事是 XFS 在數百萬個小尺寸上表現不佳。XFS 不是基於 inode 的 FS。由於您有很多小文件,因此您的塊大小會有所不同,ext4 包含在數據塊組中,還有間接塊映射、擴展樹塊和擴展屬性、inode 列表等,它們會增加相同數量文件的總塊大小。日記也需要一些時間。對於 ext4,您可以根據需要刪除日誌,但 fs 時間的恢復會顯著增加,您也可以使用 -m 選項(預設為 5%)為超級使用者分配更少的百分比(預設為 5%),您可以設置 1%。