Linux

為什麼 linux 發行版不預設安裝具有無限 inode 的 tmpfs?

  • March 26, 2020

根據這個答案,至少可以安裝帶有“無限”inode 的 tmpfs。

考慮這種特定的(出於範例目的而選擇的數字,我知道它們不現實)情況:

  • tmpfs 分區被捲使用了 50%
  • 90% 的數據是 inode(即 45% 的磁碟由 inode 使用,5% 由“真實”數據使用)
  • tmpfs 已安裝nr_inodes=1000
  • 所有 1000 個 inode 都被目前寫入的 inode 佔用

這意味著 tmpfs 已滿 50%,而且任何寫入它的嘗試都將導致空間不足錯誤。

在我看來,設置nr_inodes=0(又名無限 inode)會使這種情況消失。

  • 無限inode不是預設值有什麼原因嗎?
  • 有什麼理由限製文件系統上的 inode 數量?

通常(例如:ext2、、、、)ext3,文件系統可以容納的 inode 數量是在創建時設置的,因此沒有掛載選項可以解決它。ext4``ufs

一些文件系統像xfsinode 使用的空間比例是可調的,因此可以隨時增加。

現代文件系統與文件系統可以儲存的文件數量類似ZFSbtrfs沒有硬編碼限制,inode(或它們的等價物)是按需創建的。


編輯:縮小更新問題的答案。

使用tmpfs,預設的 inode 數量被計算為對於大多數實際案例來說足夠大。此設置不是最佳的唯一情況是,如果在tmpfs. 如果您在這種情況下,最佳做法是將nr_inodes參數調整為一個足夠大的值,以使所有文件都適合但不使用0(=無限)。tmpfs 文件指出這不應該是預設設置,因為非 root 使用者存在記憶體耗盡的風險:

if nr_inodes=0, inodes will not be limited.  It is generally unwise to
mount with such options, since it allows any user with write access to
use up all the memory on the machine; but enhances the scalability of
that instance in a system with many cpus making intensive use of it.

但是,鑑於tmpfs預設情況下 RAM 使用限制為 RAM 的 50%,因此尚不清楚這是如何發生的:

size:      The limit of allocated bytes for this tmpfs instance. The 
          default is half of your physical RAM without swap. If you
          oversize your tmpfs instances the machine will deadlock
          since the OOM handler will not be able to free that memory.

許多人會更關心預設記憶體量是否與他們的應用程序需求相匹配。

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