![为什么从实时 USB 启动时需要挂载和 chroot?](https://linux22.com/image/188961/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BB%8E%E5%AE%9E%E6%97%B6%20USB%20%E5%90%AF%E5%8A%A8%E6%97%B6%E9%9C%80%E8%A6%81%E6%8C%82%E8%BD%BD%E5%92%8C%20chroot%EF%BC%9F.png)
今天我必须从实时 USB 启动来修复一些破坏我系统的文件。我几乎遵循了每个指南的说法,所以:
mount /dev/sd3 /mnt
mount /dev/sd1 /mnt/boot
chroot /mnt
(不知道我是否也应该挂载 SWAP,即 sda2,但我从未见过这个,所以我跳过了它)
我的问题是:我为什么要这样做?您可以使用 访问实时 USB 中的文件cd
,我过去曾错误地这样做过。这有什么问题吗?
答案1
通过更改根目录,您实际上是切换到死系统。有点类似于用一辆能正常工作的汽车来启动一辆抛锚的汽车。
现在/
指的是死亡系统,每个命令都能很好地配合。我喜欢我的 shell 历史记录现在包含我对死系统而不是我启动的活动系统所做的内容。另外,我可以使用apt
许多其他工具,这些工具隐含地依赖于/
要工作的系统而不是/mnt
.许多工具(例如journalctl
,grub-install
)都有自己的选项来切换根目录,但输入它们会非常繁琐且容易出错。
答案2
并不是chroot
所有事情都严格必需的。如果您只想编辑文件,通常无需它即可进行编辑。
一些系统工具期望系统以特定的方式布局。像包管理器(rpm、yum、dpkg、apt、apk...)之类的东西。无法告诉这些命令您的系统以不同的方式布局。
让我们举一个像 Debian 那样的真实例子dpkg
。它跟踪已安装的软件包/var/lib/dpkg
。当您启动到 Live USB 并将损坏的系统安装到/mnt
dpkg 的库时,现在将位于错误的位置...它将位于/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 之后。