Filesystems

為什麼 usr 被稱為“文件系統”並且根文件系統應該很小?

  • November 4, 2020

我正試圖圍繞 Linux 中的文件系統展開研究,但仍有一些我不明白的地方。到目前為止,我認為文件系統是一組用於從卷的分區中檢索文件的方法和資料結構。文件系統可以通過 Linux 命令列出df 到目前為止,一切都很好。

此外,Linux 將合成文件系統創建為 proc,對於非文件對象來說似乎是正常文件系統。一個例子是 proc 文件系統。如果我們添加標誌,則可以使用 df 命令列出合成的 filsystem -a

現在的問題是:為什麼 /usr/ 文件夾稱為文件系統(https://tldp.org/LDP/sag/html/usr-fs.html)?對我來說,它似乎只是一個屬於根文件系統的文件夾。那麼為什麼人們稱它為文件系統呢?

另外,為什麼人們說根文件系統應該很小(https://tldp.org/LDP/sag/html/root-fs.html)?

確實,如果我呼叫df命令:

Filesystem     1K-blocks      Used Available Use% Mounted on
udev            32866696         0  32866696   0% /dev
tmpfs            6578976      2484   6576492   1% /run
/dev/nvme0n1p5 959862832 101610168 809424504  12% /
tmpfs           32894876    109020  32785856   1% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
tmpfs           32894876         0  32894876   0% /sys/fs/cgroup
/dev/loop1         56704     56704         0 100% /snap/core18/1885
/dev/loop2        261760    261760         0 100% /snap/gnome-3-34-1804/36
/dev/nvme0n1p1    523248         4    523244   1% /boot/efi
/dev/loop3         63616     63616         0 100% /snap/gtk-common-themes/1506
/dev/loop4         51968     51968         0 100% /snap/snap-store/481
/dev/loop5         31744     31744         0 100% /snap/snapd/9721
/dev/loop6         30720     30720         0 100% /snap/snapd/8542
/dev/loop7        223232    223232         0 100% /snap/gnome-3-34-1804/60
/dev/loop8         51072     51072         0 100% /snap/snap-store/467
tmpfs            6578972        20   6578952   1% /run/user/125
tmpfs            6578972        40   6578932   1% /run/user/1000
/dev/sda1       30702592   2498400  28204192   9% /media/tommaso/USB
/dev/loop9         56704     56704         0 100% /snap/core18/1932

似乎根文件系統實際上包含了我電腦上的所有內容,那麼它為什麼要小呢?

基本原理在背景部分給出。直到 2000 年代中後期才有意義,但如今已不再適用。

製作/usr一個單獨的文件系統的原因是為了保持根文件系統的小。/usr目錄樹用於安裝的軟體。

  • 安裝的軟體不會經常更改,因此您可以/usr只讀方式安裝。根文件系統通常不能以只讀方式掛載,因為/etc通常需要經常修改¹。/usr保持只讀的主要優點是避免長時間的文件系統檢查,如果系統在以讀寫方式掛載時崩潰。這不再與具有日誌或其他機制的現代文件系統相關,這些機制可以讓它們直接從崩潰中恢復。
  • 安裝的軟體可以在相同機器的公園上完全相同,因此/usr可以是只讀的,如果您有本地網路,則可以將其儲存在單個伺服器上並讓其他機器安裝它。從網路上的根文件系統引導更加複雜(依賴於更多的引導載入程序和核心支持,如果網路中斷,機器會完全無法使用)。這在過去可能要花費 200 美元的磁碟空間時很常見/usr,而如今它只花費幾美分就無關緊要了。

所以現在/usr很少有一個單獨的文件系統,甚至只是/usr建立一個符號連結到/.

¹在 Linux 上,至少現在這不像過去那樣真實:主要罪魁禍首是/etc/mtab,它曾經是一個正常文件,但現在/proc/mounts已經足夠用作它了/etc/mtab,因此/etc/mtab通常是指向它的符號連結)。然而,新的罪魁禍首出現了,例如 Cups 和 NetworkManager 喜歡更新包含他們最後一次看到列印機/網路的時間戳的文件。

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