为什么 usr 被称为“文件系统”,而根文件系统应该很小?

为什么 usr 被称为“文件系统”,而根文件系统应该很小?

我正在尝试了解 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可以保证单独的文件系统

就是这样。

相关内容