qua*_*ote 62 livecd chroot system-recovery community-faq-proposed
这个问题与经常被问到的问题有关。该程序经常被提及或链接到异地,但通常没有清楚和正确地说明。为了将有用的信息集中在一个地方,这个问题旨在为这个程序提供一个清晰、正确的参考。
为恢复过程准备chroot环境的正确步骤是什么?
在许多 情况下,最好在安装中修复损坏的 Linux 安装。但是如果系统无法启动,您如何从内部修复它?
让我们假设您设法引导到备用系统。到达那里后,您需要访问损坏的安装以修复它。许多恢复 入门指南推荐使用的chroot才能,如果你是真正引导到碎安装运行程序。
由于这是社区 Wiki,请随时编辑此问题以对其进行改进。
dub*_*jim 84
以下是一些资源:
“更改根目录”或“chrooting”是一种放大文件系统的一部分的方法,例如,这样/path
将引用以前在/mnt/path
. 表达式“chroot”中的“root”指的是根文件系统/
,而不是根用户。(尽管通常您需要 root 用户权限才能 chroot。)
本指南中的所有步骤都必须以 root 用户身份执行。
我们假设您的硬盘位于 /dev/sda1 且其文件类型为 ext3。如果您不知道磁盘的位置和文件类型,请阅读fdisk -l
.
确保您启动的系统(例如它是 32 位 LiveCD)和您希望进入的系统(例如它是硬盘驱动器上的 32 位安装)的体系结构相匹配。您可以使用uname -m
.
确保您需要的任何内核模块都已加载。
如果需要,请设置您的网络(例如,安装更新的软件包)。
如有必要,初始化您的交换分区(例如,swapon /dev/sda3
)。
cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
Run Code Online (Sandbox Code Playgroud)
如果您的/boot
目录/
与 . 如果它在 /dev/sda2 并且它的文件类型是 ext2,那么执行:
mount -t ext2 /dev/sda2 /mnt/boot
Run Code Online (Sandbox Code Playgroud)
同样,对于文件系统 ( /var
, /usr
) 的任何其他部分,它们驻留在单独的分区上但您需要访问。通常,当您使用 chroot 来修复某些内容时,您将不需要访问 /home,因此您无需为此烦恼。
(也可以在 chroot 之后挂载文件系统,但事先这样做更聪明。原因是当你之后这样做时,外部/内核环境不会知道已挂载的文件系统,所以如果你忘记了在退出 chroot 之前卸载它们,系统在关闭时也不知道要卸载它们。这可能会损坏这些文件系统。)
如果您已经设置了网络并希望在 chroot 系统中使用它,请复制过来/etc/resolv.conf
以便您能够解析域名:
cp -L /etc/resolv.conf /mnt/etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
现在您已准备好进入已挂载的文件系统:
chroot /mnt /bin/bash
Run Code Online (Sandbox Code Playgroud)
(如果返回错误chroot: cannot run command '/bin/bash': Exec format error
,这通常表明您使用一种架构(例如 x86_32)启动并尝试 chroot 到另一种架构(例如 x86_64)。解决方案是使用与您要使用的系统具有相同架构的 LiveCD chroot 进入。)
此时,您仍在运行引导时使用的内核,但所有路径/path
都将引用以前的/mnt/path
.
如果您要使用 GRUB 执行任何操作,则需要确保您的/etc/mtab
文件是最新的:
grep -v rootfs /proc/mounts > /etc/mtab
Run Code Online (Sandbox Code Playgroud)
此时执行以下操作也可能会有所帮助:
source /etc/profile
export PS1="(chroot) $PS1" # add a reminder to your prompt
Run Code Online (Sandbox Code Playgroud)
此时,您可以执行您需要执行的任何故障排除:
完成后,确保所有正在运行的程序都已停止。然后退出chroot:
exit
Run Code Online (Sandbox Code Playgroud)
现在卸载您安装的所有分区:
umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}
Run Code Online (Sandbox Code Playgroud)
最后尝试卸载您的硬盘:
umount /mnt
Run Code Online (Sandbox Code Playgroud)
如果您收到一条错误消息,指出 /mnt(或任何其他分区)正忙,这可能意味着以下两种情况之一:
一个程序在 chroot 内部运行。
或者更频繁地:这个挂载上仍然存在挂载点。例如,尝试卸载 /mnt 时,/mnt/usr 仍处于挂载状态。
在后一种情况下,只需先卸载有问题的挂载点。要获得所有当前挂载点的提醒,请mount
不带参数运行。
最后:
reboot
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
125547 次 |
最近记录: |