前置必读 操作前务必给虚拟机打快照!一旦误删分区或 shadow 文件,快照能救命。
两种方案对比
| 项目 | Grub 单用户模式 | LiveCD 挂载模式 |
|---|---|---|
| 适用系统 | CentOS、Ubuntu、Debian 等有Grub的常规系统 | Grub 损坏、Alpine、openwrt、极简系统 |
| 操作难度 | ★☆☆ | ★★☆ |
| 是否需要额外镜像 | 否 | 是(推荐Ubuntu Live ISO) |
| 优先级 | 首选!能用Grub就用这个 | 备选,Grub完全进不去时再用 |
方案一:Grub 单用户模式
-
重启虚拟机,开机连按 Shift 或 Esc 进入Grub菜单
-
选中要修改的内核,按 e 进入编辑模式
-
找到以
linux开头的行(CentOS是linux16,Ubuntu是linux)按发行版做以下一种修改(任选其一均可):
# 方法① 最暴力直接(所有发行版通用) # 把 ro quiet... 全部删掉,改成: rw init=/bin/bash # 方法② 传统单用户模式(部分老系统需要) # 在行尾添加: single # 或 systemd.unit=rescue.target -
按 Ctrl + X 或 F10 启动
-
进入特权 shell 后执行:
# 确保根分区可写 mount -o remount,rw / # 改密码 passwd root # 输入两遍新密码 # 同步数据(保险) sync # 重启(两种方式任选) exec /sbin/init # 或 reboot -f
搞定!重启后新密码立即生效。
如果是修改网卡(以debian为例):
vim /etc/network/interfaces
allow-hotplug ens33
iface ens33 inet dhcp
ip link set ens33 up
dhclient ens33
reboot -f
常见失败处理:
- 进不去Grub → 连按Shift/Esc,或者虚拟机设置里强制显示Grub菜单
- 提示 Read-only file system → 忘了执行
mount -o remount,rw /
方案二:LiveCD 挂载方式
准备:
- 去 https://alpinelinux.org/downloads/ 下载一个 ISO(最通用)
- 虚拟机存储器挂载该ISO,同时勾选光驱选项中的Live CD/DVD
步骤:
-
在启动画面出现时按 F12,手动选 CD/DVD Drive 启动 ISO → Live 环境 → 打开终端
-
识别原系统根分区
lsblk -f # 最推荐,直观 # 或 fdisk -l blkid -
挂载原系统根分区(假设是 /dev/sda2,替换成你的)
mkdir /mnt/root mount /dev/sda2 /mnt/root # 如果是LVM先激活 vgchange -ay -
挂载必须的虚拟文件系统(chroot用)
mount -t proc proc /mnt/root/proc mount -t sysfs sys /mnt/root/sys mount -o bind /dev /mnt/root/dev mount -o bind /run /mnt/root/run -
改密码 方式A(兼容性最好)
chroot /mnt/root # Alpine用 ash # chroot /mnt/root /bin/ash mount -o remount,rw / # 确保可写 passwd root # 改密码 exit方式B(极简系统无passwd命令时使用)
vi /mnt/root/etc/shadow # 找到 root 那行,把第二个字段($6$...那串)删空,变成: root::18993:0:99999:7::: :wq 保存退出 -
卸载并重启
umount /mnt/root/{proc,sys,dev,run} umount /mnt/root reboot重启前记得把光驱ISO移除或改回硬盘启动。
Alpine Linux 特别提醒
- 必须用LiveCD方案(没Grub)
- chroot 要用
/bin/ash - 根分区常为只读,chroot后一定要
mount -o remount,rw / - 很多小镜像没passwd命令 → 直接改shadow删密码字段
原文 https://blog.csdn.net/2301_79518550/article/details/146218717