Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
利用chroot修复Linux系统问题
Experiences and Insight
1040
views ·
2
replies ·
To
floor
Go
MattD
deepin
2014-05-12 08:31
Author
在某些情况下,我们可能操作上稍有不慎而导致系统整个挂掉,例如,不小心删除了内核而导致系统无法启动。
这个时候,可以利用chroot来修复这些小问题。当然,chroot的作用远不止于此,我只是以这一典型案例来说明chroot的作用。
前提条件:需要有一张LiveCD,理论上任何发行版的都可以,除非LiveCD的某些环境变量(如全局$PATH)和目标系统有太大差距。我在这里使用的是Deepin 2014 alpha的LiveCD。
直接进入手头的LiveCD环境,分别将目标系统的/分区(如果/usr、/boot、/var等挂载点单独进行了分区,也请按照系统结构相应挂载,不需要挂载/home)和几个虚拟文件系统挂载到/mnt。以我的为例,目标系统的/为/dev/sdc4,/boot为/dev/sdc2。注意,因为我用btrfs+subvolume将多个发行版安装到了同一分区,因此我需要用-o subvol=deepin来指定要挂载的subvolume。否则,一般情况下直接mount即可。
为了方便起见,我直接切换到root进行操作:
deepin@deepin:~$ sudo -i
root@deepin:~# mount -o subvol=deepin /dev/sdc4 /mnt
root@deepin:~# mount --bind /dev /mnt/dev
root@deepin:~# mount --bind /dev/pts /mnt/dev/pts
root@deepin:~# mount --bind /proc /mnt/proc
root@deepin:~# mount --bind /sys /mnt/sys
root@deepin:~# mount /dev/sdc2 /mnt/boot
Copy the Code
确保LiveCD已联网,然后把LiveCD环境下的/etc/resolv.conf复制到目标系统中去:
cp /etc/resolv.conf /mnt/etc/
Copy the Code
如果你在LiveCD中的网络环境和你之前使用目标系统时的网络环境一致,那么应该会看到以下提示:
root@deepin:~# cp /etc/resolv.conf /mnt/etc/
cp: "/etc/resolv.conf" 与"/mnt/etc/resolv.conf" 为同一文件
Copy the Code
此时直接忽略即可。
做完这些步骤之后,就可以chroot过去了,然后像平常一样,直接操作安装缺少的内核即可:
apt-get install linux-image-3.13.0-24-generic linux-headers-3.13.0-24-generic
Copy the Code
内核安装完之后会自动触发update-grub,只要目标系统的/etc/mtab没问题,grub就可以根据这个文件正确探测到/文件系统并生成grub配置文件。
OK了,别忘了先卸载掉所有挂载的文件系统:
umount -l /mnt/{dev/pts,dev,sys,proc}
umount /mnt/boot
umount /mnt
Copy the Code
然后重新启动即可。
Reply
Like 0
Favorite
View the author
All Replies
Bluek404
deepin
2014-05-12 08:56
#1
这个说的就是我啊 :cry:
Reply
Like 0
View the author
electricface
deepin
2014-05-12 18:59
#2
我喜欢写成一行
for m in dev dev/pts proc sys ;do mount --bind /$m /mnt/$m ;done
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Ranking
Change
Wifi problem.
Bugs I found / Future request!
Popular Events
More
这个时候,可以利用chroot来修复这些小问题。当然,chroot的作用远不止于此,我只是以这一典型案例来说明chroot的作用。
前提条件:需要有一张LiveCD,理论上任何发行版的都可以,除非LiveCD的某些环境变量(如全局$PATH)和目标系统有太大差距。我在这里使用的是Deepin 2014 alpha的LiveCD。
直接进入手头的LiveCD环境,分别将目标系统的/分区(如果/usr、/boot、/var等挂载点单独进行了分区,也请按照系统结构相应挂载,不需要挂载/home)和几个虚拟文件系统挂载到/mnt。以我的为例,目标系统的/为/dev/sdc4,/boot为/dev/sdc2。注意,因为我用btrfs+subvolume将多个发行版安装到了同一分区,因此我需要用-o subvol=deepin来指定要挂载的subvolume。否则,一般情况下直接mount即可。
为了方便起见,我直接切换到root进行操作:
做完这些步骤之后,就可以chroot过去了,然后像平常一样,直接操作安装缺少的内核即可:
OK了,别忘了先卸载掉所有挂载的文件系统: