麒麟系统开机提示“锁定文件无法访问”需分三步修复:一是通过grub添加rw init=/bin/bash进入root shell,执行mount -o remount,rw /解除只读挂载;二是用lsattr检查并chattr -i清除/etc/fstab等关键文件的不可变属性;三是清理/var/lib/apt/、/var/run/postgresql/等处残留锁文件并重启systemd依赖。

麒麟系统开机时提示“锁定文件无法访问”,通常意味着关键启动文件或配置被进程异常占用、设置不可变属性(i属性)、挂载为只读,或存在残留锁文件,导致系统初始化阶段读取失败。这类提示多出现在登录界面之前或 Plymouth 启动画面中,需在进入桌面前通过恢复模式或 TTY 环境干预。
确认是否因文件系统只读导致
开机卡在锁定提示,大概率是根分区或 /boot 分区被内核以只读(ro)方式挂载——常见于上次异常关机后 ext4 日志未回写、磁盘 SMART 报错触发保护,或 fstab 配置错误。
重启进入 GRUB 菜单:开机时长按 Shift(BIOS)或按 Esc(UEFI),用方向键选中当前内核条目,按 e 编辑启动参数。
找到以 linux 开头的行,在末尾空格后添加 rw init=/bin/bash(强制以读写模式启动并直接进入 root shell)。
按 Ctrl+X 或 F10 启动。系统将跳过图形界面,停在命令行;此时执行 mount | grep " / ",若显示 type ext4 (ro,…) 说明仍为只读——立即运行 mount -o remount,rw / 强制重挂载为读写。
清除顽固的不可变属性(i属性)
某些安全策略或误操作会用 chattr +i 锁定 /etc/fstab、/boot/grub/grub.cfg 或 /usr/lib/systemd/system/ 下的关键文件,导致开机时 systemd 无法加载单元而报“无法访问”。该属性连 root 都无法绕过,必须显式解除。
方法一:在上述 bash 环境中逐个检查高危路径
执行 lsattr /etc/fstab /boot/grub/grub.cfg /usr/lib/systemd/system/multi-user.target.wants/ 2>/dev/null | grep 'i'
若输出含 i(如 ----i--------e-- /etc/fstab),立即执行 sudo chattr -i /etc/fstab ——【这一步漏掉,后续所有修复均无效】
方法二:批量扫描系统关键目录(谨慎使用)
运行 find /etc /boot /usr/lib/systemd -xdev -type f -exec lsattr {} \; 2>/dev/null | grep 'i' | cut -d' ' -f2-,对结果中每个路径重复 chattr -i 操作。
终止残留的锁进程并清理锁文件
开机提示常源于上一次关机时数据库服务(如 postgresql)、包管理器(apt/dnf)或 WPS/LibreOffice 未正常退出,遗留 .lock 文件或持有 flock 锁,而 systemd 在 early-boot 阶段尝试访问时被阻塞。
第一步:检查并杀死所有可能持锁的服务进程
执行 systemctl list-units --state=failed 查看启动失败的单元,重点关注 postgresql、cups、bluetooth、NetworkManager;对状态为 failed 的单元,运行 systemctl stop 单元名 并 systemctl reset-failed 单元名。
第二步:手动清理典型锁文件位置
rm -f /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock* /tmp/.X11-unix/.X0-lock /var/run/postgresql/.s.PGSQL.5432
第三步:验证锁是否释放
运行 lsof +D /var/lib/apt 2>/dev/null | grep lock,若无输出则清理完成。
修复被破坏的 systemd 依赖关系
当 /usr/lib/systemd/system 中的 .wants 或 .requires 符号链接指向已被删除或锁定的目标单元时,systemd 会反复尝试加载失败,最终触发“无法访问”提示并卡住。
① 进入 bash 环境后,先执行 systemctl daemon-reload 强制重新解析所有 unit 文件
② 运行 systemctl list-dependencies --reverse multi-user.target | grep failed,定位依赖链中断点
③ 对输出中显示 failed 的 unit(如 xxx.service),执行 systemctl disable xxx.service --now 彻底卸载其启动关联
④ 若怀疑 unit 文件本身损坏,可从 live USB 启动麒麟镜像,挂载原系统根分区,用 cp /run/live/*/usr/lib/systemd/system/xxx.service /mnt/usr/lib/systemd/system/ 恢复原始版本
执行 exec /sbin/init 启动完整系统。











