[自用] 进入initramfs shell的方法,以及从initramfs shell引导到系统的方法

@Ta 2022-02-16发布,05-29 17:48修改 11113点击

如何进入initramfs shell

  1. 在GRUB引导菜单上按e,进入编辑模式(银河麒麟要在“Advanced”启动项的“Recovery Mode”上按e,普通启动项用不了下面的方法,UOS无限制)。
  2. 跳转到linux开头的行,把UUID=后面的任一字母数字改错。
  3. 按F10启动,等一段时间,initramfs就会找不到根文件系统,于是就会陷入initramfs shell。该shell具有root权限。
  4. 如果显示了发行版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 而拒绝启动。

回复列表(3|隐藏机器人聊天)
  • @Ta / 2022-02-16 / /
    {强}👍 一加8Pro
  • @Ta / 2022-02-16 / /
    应该使用 rd.break 正宗一些。
  • @Ta / 2022-02-16 / /

    @XCAI,UOS没有rd.breakinit=/bin/bash,会直接进入桌面。single会提示root用户已被禁用,按回车后直接进入桌面。

添加新回复
回复需要登录