Linux

在 XFS 和 ext4 中使用 xattr 儲存許多小文件

  • May 8, 2013

我在 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%。

引用自:https://serverfault.com/questions/505851