我读一篇文章它指出“bin”“dev”“etc”“lib”“root”“sbin”目录应该与根目录位于同一文件系统中,也就是说,它们不应该作为单独的文件系统安装。
我有点困惑,例如,在许多发行版中,现在“sbin”、“bin”和“lib”目录都符号链接到“usr”目录。
lrwxrwxrwx 1 root root 7 Apr 30 18:19 bin -> usr/bin
...
lrwxrwxrwx 1 root root 7 Apr 30 18:19 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 30 18:19 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Apr 30 18:19 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Apr 30 18:19 libx32 -> usr/libx32
...
lrwxrwxrwx 1 root root 8 Apr 30 18:19 sbin -> usr/sbin
不过,文章并没有规定“/”目录和usr目录必须在同一个文件系统上。我也看了之前的问题,但还是很困惑。哪些目录必须位于同一文件系统中,哪些目录应该保留在单独的文件系统中?
答案1
当前的思路是/usr
应该集成到/
,并且一些发行版只是将/bin
, /sbin
,符号链接/lib
到/usr
您所看到的等效项。例如/usr
Debian,从下一个版本开始仅支持合并(书呆子), 和Fedora 似乎已经在 2012 年的 Fedora 17 中完成了合并。
基本上,对此的争论似乎可以归结为
- 不管怎样,这就是让系统进入可用状态的工作
initramfs
,所以不需要其他做到这一点的“最小”系统 - 无论如何,分割并没有真正起作用,因为安装的程序
/usr/bin
可能依赖于库/lib
,所以它们无论如何都不是完全独立的 - 整个分裂的想法是一个历史性的偶然事件,在最初的原因变得无关紧要之后,它仍然继续存在。
无论如何,文件系统/
并不是那么小,例如,在一个过时的预合并系统上,我在/bin
、/sbin
和中拥有/lib
略小于 600 MB 的文件,在/usr
. (不过,那里没有 X 或 GUI 的东西。)在另一个系统上,/usr
它要大一些,大约 2 GB,但即便如此,对于当前的存储大小来说,这也不是一个问题。同时,initramfs 文件大约有 15 MB,这个值足够小,因此可能很重要,并且 initramfs 没有类似/etc
需要修改的内容,因此可以半静态安装。
/bin
看看同一个系统,和之间的实用程序划分/usr/bin
也似乎有点随意,例如sh
和bash
are 在/bin
(显然),所以也是grep
,但例如awk
、head
和wc
arezsh
在/usr/bin
。并不是说现代系统如此依赖 shell 脚本来启动,而且只是挂载剩余文件系统所需的东西,需要使用更有限的工具集,但无论如何。如果文件系统出现问题时无法登录,喜欢 zsh 的管理员可能会不高兴......
关于分裂的起源的故事似乎是这样的:
当[最初的 Unix 系统,在 1970 年代初]变得太大而无法容纳第一个 RK05 磁盘包(他们的根文件系统)时,他们让它泄漏到第二个磁盘包中,这是所有用户主目录所在的位置(这就是为什么挂载称为 /usr)。他们复制了该目录下的所有操作系统目录(/bin、/sbin、/lib、/tmp...)并将文件写入这些新目录,因为原始磁盘空间不足。
(来自 Busybox 邮件列表中的 Rob Landley,了解 bin、sbin、usr/bin 、usr/sbin 拆分,稍作编辑。同一条消息更详细地讨论了这个问题。)
systemd 人员也对此写了一些想法:
答案2
/bin 与 /usr/bin 问题是一个老问题。这个想法是让操作系统的一个真正的子集能够安装 /usr 分区(如果您碰巧将它们分开)。这可以帮助旧的 PC BIOS 有扇区数限制,这使您选择一个非常小的 / 分区。
如今,这种区别不再具有相关性。 Linux 将加载操作系统所需的所有内容放在 initramfs 小档案中,如果需要,可以通过 Grub 及其许多精美模块来加载该档案(您也可以有一个简单的普通分隔的 /boot 分区)。