进入 SystemRescue 环境后,由于你的硬盘使用了 LUKS 加密,你不能直接修改密码,必须先手动解密并挂载分区。
以下是完整且标准的步骤:
第一步:解锁 LUKS 加密分区
启动进入 SystemRescue 的命令行后,先找到你的加密分区(通常是 /dev/vda3 或 /dev/sda3):
# 查看分区布局
lsblk假设你的加密分区是 /dev/vda3,使用以下命令解锁它:
cryptsetup luksOpen /dev/vda3 my_temp_root此时系统会提示你输入 LUKS 磁盘密码。
第二步:挂载根文件系统
解密后,如果你的系统使用了 LVM(Proxmox 或 Debian 默认通常使用),你需要挂载逻辑卷。
确认设备名称:
ls /dev/mapper/你会看到类似
pve-root或debian--vg-root的名称。挂载到 /mnt:
mount /dev/mapper/pve-root /mnt(请将
pve-root替换为你实际看到的根分区名称)
第三步:进入 Chroot 环境
为了让 passwd 命令修改的是硬盘里的系统而非救援系统的内存,你需要进入 Chroot。在此之前需要挂载必要的虚拟内核文件系统:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run
# 进入原系统
chroot /mnt /bin/bash第四步:修改密码
现在你已经在“硬盘里的系统”中了,可以直接修改密码:
# 修改 root 密码
passwd root
# (可选) 如果你刚才问的 abc 用户存在,也可以顺便改了
# passwd abc第五步:清理并重启
修改完成后,必须正确退出并写入缓存,否则修改可能不会生效:
退出 chroot:
exit强制写入缓存并解挂:
sync cd / umount -R /mnt关闭加密映射(可选但推荐):
cryptsetup luksClose my_temp_root重启:
reboot
关键点提醒
- 输入法:SystemRescue 默认是美式键盘布局。如果你设置过特殊的 LUKS 密码,注意字符输入是否正确。
- 只读报错:如果在
passwd时报错Authentication token manipulation error,说明根分区是以只读方式挂载的。请执行mount -o remount,rw /后重试。
cryptsetup luksClose tmp_root可能出现 device is still in use 报错,通常是因为有进程正在占用该解密后的设备,或者文件系统、卷组(LVM)还没有完全卸载。
在 SystemRescue 这种救援环境下,按以下顺序排查并强制释放:
1. 确保已退出 Chroot
如果你还在之前的 chroot 环境中,你是无法卸载分区的。
- 输入
exit退出 chroot。 - 输入
pwd确保你当前不在/mnt及其子目录下(建议切换到/根目录)。
2. 彻底卸载文件系统
有时候 umount /mnt 会因为子挂载点(如 /mnt/dev)未清理而失败。请使用递归强制卸载:
# 递归卸载所有挂载在 /mnt 下的东西
umount -R /mnt如果提示 target is busy,可以尝试“懒卸载”(通常有效):
umount -l /mnt3. 停用 LVM 卷组(最关键的一步)
这是 LUKS 设备被占用最常见的原因。即使你卸载了 /mnt,解密后的设备里如果跑着 LVM,逻辑卷依然是激活状态。
# 停用所有逻辑卷组
vgchange -an这一步会释放对 tmp_root 的占用。
4. 再次尝试关闭 LUKS
现在尝试关闭:
cryptsetup luksClose tmp_root如果还是关不掉怎么办?
如果执行了上述操作依然报错,通常是某些系统进程(如 udev 或特定的救援工具)锁定了设备。
这种情况下,你其实可以“耍赖”:
只要你之前已经执行过 sync 命令,你的密码修改就已经安全写入磁盘了。
- 最后确认: 执行一次
sync。 - 直接重启: 输入
reboot。 - 系统会自动处理: 重启过程中,内核会发送
SIGTERM给所有进程并强制卸载所有设备,最后自动关闭 LUKS。
放心: 只要密码改完了且 sync 过,直接重启不会损坏数据,也不会导致密码修改丢失。
后续步骤建议:
重启进入系统后,记得在原来的系统里执行 update-initramfs -u(Debian/Proxmox)或者 mkinitcpio -P(Manjaro),以确保所有引导相关的配置都是最新的。