SDB:应急模式
本文章教您如何在应急模式下修复系统。
目录
情景
当您的硬盘分区发生了错误,尤其是 /boot 和 /root 发生错误时,openSUSE 将启动到应急模式。
规程
确定无错
使用 Ctrl + D 正常启动,或使用 root 登录后输入:
shutdown -r now
重启。
有时 shutdown 无法工作,可使用电源按钮
硬盘分区出错
在应急模式的命令行提示语中,会告诉您是哪个分区出现了错误,比如 /dev/sda2
若该分区为 ext4 格式
使用:
fsck.ext4 /dev/sda2
修复分区,然后重启进入正常模式
若该分区为 btrfs 格式
使用:
fsck.btrfs /dev/sda2
修复分区,然后重启进入正常模式。
另外如下两种方式也可以有所帮助:
修复死的超锁定
如果超锁定损坏(通过 fsck.btrfs 检测),请先询问 btrfsck 是否允许使用超锁定的其它副本而不是默认的超锁定 #0。可以使用:
# ./btrfsck -s 2 /dev/sd2
来做。
要是 btrfsck 同意,接下来使用 btrfs-super-select 来恢复默认超锁定 (副本 #0)
# ./btrfs-super-select -s 2 /dev/sda2
注意: 这会覆盖磁盘分区中所有的超锁定,您只有一次机会。要是您在找出哪个副本是好的之前就用掉了机会,那您就失去了找到好的副本的机会,即使有好的副本也用不了了,因此请一定先运行 btrfs -s 测试。
清空 BTRFS 日志
这只在一种情况下有效!
3.4.4 上测试通过
如果您在强行关机、系统崩溃或断电后,无法挂载 btrfs 分区,可能是由于 3.2 版本以前内核的错误日志导致的。首先应该尝试升级或重装内核软件包,然后挂载,这是对新手来说最简单的办法。如果这么做不行,一种替代办法是清理 btrfs 日志,但只有您在 oops 调用堆栈中看到 "replay_one_*" 函数时才能这么做。
要清理 btrfs 分区日志 (因此也会丢失所有只存在于日志中的更改), 请使用:
# ./btrfs-zero-log /dev/sda2
这不是一个通用技术,工作时会永久性抛弃一部分可能好的数据。