Filesystems

許多小文件的最佳文件系統是什麼?

  • September 16, 2021

我有一個帶有 2TB 驅動器的 Debian 10 伺服器,我想在其中儲存超過 1.2 億個小文件。如果我使用 ext4,我會用完 inode。

我應該使用什麼文件系統?

我一直在閱讀有關 reiserfs 和 reiser4 的資訊,但我不確定它們中的任何一個是否仍受支持。

有沒有我可以使用的帶有內置 Debian 軟體包的文件系統?

主要案例是為使用 Apache 的使用者提供 256x256 柵格地圖圖塊。我猜速度並不那麼重要,因為限制因素將是 ping 時間。盡可能多地使用字節有點重要,但我也有很多可用磁碟空間。

編輯:文件通常為 1kb 到 3kb。

假設您要優化磁碟空間的使用(不僅是 inode 計數,還可能是訪問時間):

您可能需要一個具有塊子分配/尾部合併的文件系統,以便將小數據合併到物理磁碟上的一個分配單元(“集群”)中。

此外,根據您的情況,控製文件系統的集群大小可能是明智之舉,同樣可以節省空間。最佳值可以通過測試確定。

Linux 的穩定候選者是btrfs.

當然,如果您喜歡使用ext4(並且可能不是空間最佳),您可以重新創建您的文件系統(將數據複製到其他地方以首先備份它!)並選擇非常多的 inode。

來自mke2fs(8)

  -N number-of-inodes
         Overrides the default calculation of the number of inodes that
         should be reserved for the filesystem (which is based on the number
         of blocks and the  bytes-per-inode ratio).  This allows the user to
         specify the number of desired inodes directly.

您沒有規定“小”有多小,但如果文件既足夠小又足夠可壓縮,embedded_data啟用該功能的 ZFS 池可以將“小”文件儲存在塊指針本身中,從而無需分配塊(或更多)文件的儲存空間,並且還消除了讀取或寫入文件的 I/O 呼叫,因為文件數據與文件元數據一起寫入塊指針本身。

另外,請注意 ZFS 永遠不會用完 inode。

 embedded_data

           This feature improves the performance and compression ratio of
           highly-compressible blocks.  Blocks whose contents can compress
           to 112 bytes or smaller can take advantage of this feature.

           When this feature is enabled, the contents of highly-
           compressible blocks are stored in the block "pointer" itself (a
           misnomer in this case, as it contains the compressed data,
           rather than a pointer to its location on disk).  Thus the space
           of the block (one sector, typically 512 bytes or 4KB) is saved,
           and no additional i/o is needed to read and write the data
           block.

引用自:https://unix.stackexchange.com/questions/669201