按照这文档/bin
,/sbin
包含系统启动和修复所需的最少文件,并且/usr
是单独的分区,因此可以轻松卸载以进行修复。
但根据这分区信息,启动所需的所有目录(除/boot
)必须位于与 相同的分区上/
。这些必需的目录是/etc
和/usr
我发现这两份文件相互矛盾。
- 根据第一个链接
/bin
,和/sbin
对于启动必不可少,那么为什么第二个链接只说/etc
和/usr
是必需的?系统是否只能使用/bin
和在单用户模式下启动/sbin
,但对于完整模式/usr
,和/etc
也是必需的? /usr
为什么和必须/etc
与根位于同一分区/boot
,而/bin
、 和则不必如此/sbin
- 怎么
/usr
才能设为只读?据我所知,/usr/bin
它用于由包管理器存储二进制文件。 - 另外,我在某处读到过
/bin
,其中/sbin
包含用于挂载其他文件系统的代码,如果是这样的话,谁会挂载它/
?这是由 grub 完成的吗?
答案1
您正在阅读 2006 年的文献,其中提到的实践似乎相互矛盾,这一想法并不奇怪。
然而,让我们根据 Linux 发行版的现状来回答这个问题。
- /sbin 是系统二进制文件
- /etc 是主机特定的系统范围的配置数据
- /usr 是共享的,只读数据
- /var 是主机特定的、持久的、可变的数据
- /run 是运行时(自上次启动以来)变量数据
鉴于让我们考虑您的每一个观点:
这是因为包括 init.d 在内的服务管理器需要主机配置和程序的共享(用户)/usr/bin。第二个链接表示正常启动,而第一个链接是指系统恢复等管理任务。考虑到上下文,两者都是正确的。
现代 Linux 实际上没有 /bin,而是在 /usr/bin 中,这在第二个文档中被视为必不可少。/boot 不必位于同一分区,因为它包含引导加载程序的数据,并且 Linux 在引导加载程序之后启动自身时不一定需要它。此外,/boot 通常是一个单独的分区,带有引导加载程序支持的文件系统。这只剩下 /sbin,Linux 内核将在某个时间点之后调用 init,但是文件系统作为 initram 的一部分安装。/etc/fstab 中包含的信息可能包含在调用 /sbin/init 之前要安装 /sbin/ 的位置,因此它可以是单独的。
第二个链接实际上并不是说 /usr 必须以只读方式挂载,而是从应用程序的角度来看,它应该是只读的。但是,文件仍然会作为安装和更新软件的管理任务的一部分进行更改。因此,某些工具(如包管理器)会在此处写入数据。
GRUB 知道文件系统,但考虑到您的措辞,值得注意的是,从 Linux 的角度来看这并不重要。例如,在 Android 上,内核(系统程序)和 initram 存储在没有文件系统的分区中。然后,引导加载程序会将 Linux 和 initram 加载到内存中并调用 Linux。然后,Linux 将从 initram 挂载根。initram 包含访问硬件和挂载根文件系统所需的内核模块和软件,它不需要任何配置来执行此操作,因为它是从引导加载程序传递过来的。但随后它将访问 /etc/fstab 之类的文件,并在调用 /sbin/init 之前挂载 /sbin(如果需要)。
答案2
根据 Ubuntu 文档
以下目录绝对不能放在它们自己独立的分区中:
- /bin——此目录存储大多数用户可访问的系统范围的可执行文件。
- /sbin——此目录包含用于核心系统功能的可执行文件,并由系统管理员用于维护系统。
- /proc——这是包含进程信息的系统使用目录。用户几乎从未访问过。
- /dev——此目录包含系统创建的到您安装的硬件的链接,并且与 /proc 一样几乎从未被直接访问。
任何其他目录都可以放在单独的分区上,只要其挂载在 /etc/fstab 中正确记录即可。但是,这样做可能会严重影响性能。
Grub 加载内核和 initramfs(初始 RAM 文件系统)。initramfs 检查并安装驱动器,然后启动引导过程。
笔记: /etc
包含系统配置文件;包括fstab
,指定挂载点。我不确定 initramfs 如何处理这个问题。但我认为/etc
应该将其添加到列表中,因为粗略的网络搜索表明需要修改引导文件或内核以适应移动/etc
到单独的分区。
参考
答案3
这是 systemd 引入的回归,它与桌面环境的集成更加紧密,因此在启动时需要库和守护进程,而在传统的 Unix 系统上,这些库和守护进程不会被视为最小核心系统的一部分。
对于现代硬件来说,单独的/usr
分区对于大多数用户来说通常是不值得的,因此这被认为是一种可以接受的权衡。