![为什么 usr 被称为“文件系统”,而根文件系统应该很小?](https://linux22.com/image/182829/%E4%B8%BA%E4%BB%80%E4%B9%88%20usr%20%E8%A2%AB%E7%A7%B0%E4%B8%BA%E2%80%9C%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E2%80%9D%EF%BC%8C%E8%80%8C%E6%A0%B9%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%BA%94%E8%AF%A5%E5%BE%88%E5%B0%8F%EF%BC%9F.png)
我正在尝试了解 Linux 中的文件系统,但仍然有一些我不明白的地方。到目前为止,我的正确认识是文件系统是用于从卷的分区检索文件的一组方法和数据结构。文件系统可以通过 Linux 命令列出df
到目前为止,一切顺利。
此外,Linux 创建合成文件系统作为 proc,对于非文件对象来说,它似乎是常规文件系统。一个例子是 proc 文件系统。如果我们添加 flag ,则可以使用 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
看来根文件系统实际上包括一切在我的电脑上,那么为什么它应该很小呢?
答案1
基本原理在背景部分。它在 2000 年代中后期还具有相关性,但如今已不再相关。
制作单独的文件系统的原因/usr
是为了保持根文件系统较小。目录/usr
树用于安装软件。
安装的软件不会经常更改,因此您可以
/usr
只读方式安装。根文件系统通常不能以只读方式安装,因为/etc
通常需要经常修改。保持/usr
只读的主要优点是,如果系统在以读写方式挂载时崩溃,则可以避免长时间的文件系统检查。这与具有以下功能的现代文件系统不再相关杂志或其他让它们直接从崩溃中恢复的机制。在同一台机器上安装的软件可以是相同的,因此
/usr
可以是只读的,如果您有本地网络,则可以将其存储在单个服务器上并让其他机器安装它。从网络上的根文件系统启动更加复杂(依赖更多的引导加载程序和内核支持,如果网络关闭,则机器完全无法使用)。这在当时可能需要花费 200 美元的磁盘空间的情况下很常见/usr
,但现在已经不再重要了,因为它只花费几美分。
所以现在/usr
很少有一个单独的文件系统,甚至只是建立/usr
一个符号链接到/
.
至少在 Linux 上,现在情况不再像以前那样了:罪魁祸首是/etc/mtab
,它曾经是一个常规文件,但现在/proc/mounts
已经足够好了,因此/etc/mtab
通常/etc/mtab
是一个到它的符号链接)。然而,新的罪魁祸首已经出现,例如 Cups 和 NetworkManager 喜欢更新包含上次看到打印机/网络时间的时间戳的文件。
答案2
您正在阅读一本非常旧的手册,它在某些方面已被弃用。
过去对于一些 Unix's 来说习惯于是一个单独的/usr
安装点,其余文件 ( /bin /etc /root /usr /sbin
) - 仅在成功启动时才需要。
如今,Linux 发行版正在摆脱/bin /sbin
和/lib
并将其中的所有内容移动到/usr/{bin,sbin,lib}
这意味着/usr
(与 和/etc /root
一起/var
)非常适合属于根文件系统。
2020 年的现代 Linux 具有以下层次结构:
/bin -> /usr/bin
/boot : a separate FS for storing kernel images and initial ram disks
/boot/efi : an EFI system partition - not specific to Linux
/dev : tmpfs
/etc
/home
/lib -> /usr/lib
/lib64 -> /usr/lib64
/media
/mnt
/opt
/proc : virtual fs
/run : tmpfs
/sbin -> /usr/sbin
/sys : virtual fs
/tmp : tmpfs
/usr
/var
所以至少你必须有一个用于/
和 的文件系统/boot
。然而,没有人阻止您将任何其他前缀放入自己单独的文件系统中。
然而,这是一个很好的做法:
- 作为
/home
一个单独的文件系统,因为它可以让你轻松切换发行版 - 可能有
/var/lib/{mysql|postgres|something else}
一个单独的 FS 以提高速度并减少碎片 - 有些人选择安装专有的大型应用程序,
/opt
或者/usr/local
可以保证单独的文件系统
就是这样。