为什么从实时 USB 启动时需要挂载和 chroot?

为什么从实时 USB 启动时需要挂载和 chroot?

今天我必须从实时 USB 启动来修复一些破坏我系统的文件。我几乎遵循了每个指南的说法,所以:

mount /dev/sd3 /mnt

mount /dev/sd1 /mnt/boot

chroot /mnt

(不知道我是否也应该挂载 SWAP,即 sda2,但我从未见过这个,所以我跳过了它)

我的问题是:我为什么要这样做?您可以使用 访问实时 USB 中的文件cd,我过去曾错误地这样做过。这有什么问题吗?

答案1

通过更改根目录,您实际上是切换到死系统。有点类似于用一辆能正常工作的汽车来启动一辆抛锚的汽车。

现在/指的是死亡系统,每个命令都能很好地配合。我喜欢我的 shell 历史记录现在包含我对死系统而不是我启动的活动系统所做的内容。另外,我可以使用apt许多其他工具,这些工具隐含地依赖于/要工作的系统而不是/mnt.许多工具(例如journalctlgrub-install)都有自己的选项来切换根目录,但输入它们会非常繁琐且容易出错。

答案2

并不是chroot所有事情都严格必需的。如果您只想编辑文件,通常无需它即可进行编辑。

一些系统工具期望系统以特定的方式布局。像包管理器(rpm、yum、dpkg、apt、apk...)之类的东西。无法告诉这些命令您的系统以不同的方式布局。

让我们举一个像 Debian 那样的真实例子dpkg。它跟踪已安装的软件包/var/lib/dpkg。当您启动到 Live USB 并将损坏的系统安装到/mntdpkg 的库时,现在将位于错误的位置...它将位于/mnt/var/lib/dpkg.你不能告诉 dpkg 使用这个,所以你不能使用 dpkg 来修复你损坏的系统,除非......

如果你chroot /mnt把一切都转移到原来的地方。所以/mnt/var/lib/dpkg回到/var/lib/dpkg它应该在的地方,这样 dpkg 将再次正确运行。


不,您通常不需要添加交换。外行人对交换的描述是它使用一些硬盘空间来扩展 RAM。对于此类活动,您通常只需要现有 RAM 的一小部分。如果您即将耗尽 RAM,您可以随时添加它...因此,如果从文件安装 SWAP,/var/swap您可以

swapon /mnt/var/swap

在你之前chroot

swapon /var/swap

chroot 之后。

相关内容