[自用] 进入initramfs shell的方法,以及从initramfs shell引导到系统的方法
如何进入initramfs shell
- 在GRUB引导菜单上按e,进入编辑模式(银河麒麟要在“Advanced”启动项的“Recovery Mode”上按e,普通启动项用不了下面的方法,UOS无限制)。
- 跳转到linux开头的行,把UUID=后面的任一字母数字改错。
- 按F10启动,等一段时间,initramfs就会找不到根文件系统,于是就会陷入initramfs shell。该shell具有root权限。
- 如果显示了发行版Logo,通常只要按esc就能取消Logo显示日志。
有什么用
可以获得root shell,不需要密码和sudo。
在该shell内手动挂载根文件系统就可以对系统进行修改。
如何挂载根文件系统
# 查看分区的设备名称
blkid
# 创建挂载文件夹
mkdir /mnt
# 挂载分区
mount /dev/设备名称 /mnt
# 跳转到挂载的文件夹
cd /mnt
# 查看是否是想要的文件夹
ls
然后就可自由操作。
从挂载好的根文件夹进入系统命令行
上面的步骤执行后,继续执行以下命令即可进入系统命令行:
# 跳转到挂载的根文件系统
cd /mnt
# 挂载必要的系统文件夹
mount --rbind /dev dev
mount --rbind /proc proc
mount --rbind /sys sys
mount --rbind /tmp tmp
mount --rbind /run run
# 进入系统命令行
chroot . /bin/bash
# 挂载其他分区
mount -a
此时你就可以执行系统内的命令了,比如apt等,还可以运行passwd修改root密码,运行passwd 用户名修改指定用户的密码。不过这时是没有网的,想联网得用命令行进行配置。
完成启动过程,进入图形界面
执行上面的命令后,再执行以下命令就可以完成启动过程并进入图形界面:
# 启动系统引导程序
unshare -fp --mount-proc /sbin/init
unshare命令的作用是创建新的进程命名空间,让/sbin/init(实际是systemd)以 pid 1 启动。如果不进行unshare,systemd会因为自己不是 pid 1 而拒绝启动。
