/ 启动时只读,但不明白为什么。如何排查并修复?

/ 启动时只读,但不明白为什么。如何排查并修复?

根文件系统在挤压下安装得很好,在我升级到喘息后。我已经忍受了一段时间了,所以我不太确定,但我认为它是在对 wheezy 进行 dist 升级之后开始的,但这可能是巧合。该机器是联想 T400 FWIW。

开机画面照片1显示有关只读文件系统的第一个警告;显然没有记录任何内容

fsck 没有发现问题2

mount -o remount,rw /

以上工作正常

(但我必须重新启动网络管理器和 gdm3 才能获得可用的系统;我不确定它是否相关,但我似乎无法连接到本地主机上运行的服务,例如 python -m SimpleHTTPServer 8080 和另一个终端 w3m 向本地主机端口 8080 发送请求超时)

我没有注意到 fstab 有什么问题

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/sda1 during installation
UUID=2934c627-6f1a-438b-a877-1544108c7418 /               ext3 errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=39b1f59e-6193-4c46-8b4d-80b183f0b19c none            swap    sw           0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/sdb1       /media/usb0     auto    rw,user,noauto  0       0

任何指示将不胜感激。希望我正在做一些明显错误且可以修复的事情,但如果没有任何关于如何调试的提示?

...

tune2fs -l /dev/sda1

输出

tune2fs 1.42.2 (27-Mar-2012)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          2934c627-6f1a-438b-a877-1544108c7418
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              14893056
Block count:              59547904
Reserved block count:     2977395
Free blocks:              50391869
Free inodes:              14576981
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1009
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Tue May  3 01:44:56 2011
Last mount time:          Wed Apr 18 13:11:25 2012
Last write time:          Tue Apr 17 23:51:46 2012
Mount count:              5
Maximum mount count:      25
Last checked:             Tue Apr 17 23:51:46 2012
Check interval:           15552000 (6 months)
Next check after:         Sun Oct 14 23:51:46 2012
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       9145036
Default directory hash:   half_md4
Directory Hash Seed:      af8ca7f0-bcad-49f3-98c0-9b19a531a885
Journal backup:           inode blocks

...

看来 /etc/init.d/checkroot.sh 并未在启动时运行,而该脚本最终将 root 重新安装为 rw(如果我在启动后运行它,它就会执行此操作)。我正在使用 Debian 测试/喘息。 /etc/init.d 文件中有依赖项注释,但除此之外,我不确定如何告诉有关 init 系统的更多信息。

...

已修复,但不知道它是如何发生的,也不知道修复是否正是系统应有的样子。我注意到 /etc/rcS.d 中有 checkfs 和 mtab,但没有 checkroot,所以我添加了它:

cd /etc/rcS.d
ln -s ../init.d/checkroot.sh S06checkroot.sh

重新启动两次后(第一次可能是我的困惑,但我在它们之间向 checkroot.sh 添加了一些进一步的工具),我在启动时使用 rw 进行备份(并且从本地主机监听/请求的问题消失了,所以我猜测是相关的)。

(我在挤压系统上看到我可以访问它的 S07checkroot.sh;我可能已经很接近了。)

答案1

您的 /root 文件系统上存在错误,并且 fstab 将 /root 重新挂载为只读。

fstab 中的行

UUID=2934c627-6f1a-438b-a877-1544108c7418 / ext3 errors=remount-ro 0 1

是什么导致 /root 以只读方式挂载。

mount (8)手册页

errors={continue|remount-ro|panic}
Define the behaviour when an error is encountered.  (Either ignore errors
and just  mark  the  filesystem  erroneous and continue, or remount the
filesystem read-only, or panic and halt the system.)  The default is set in
the  filesystem superblock, and can be changed using tune2fs(8).

您最终应该找出 /root 文件系统出了什么问题。您可以轻松地从救援磁盘启动并在 /root 上运行 fsck。如果您选择忽略潜在的错误,只需将 fstab 中的行更改为errors=continue.

答案2

我遇到了这个问题,这是由于 /etc/fstab 中设置的根 FS 的 UUID 错误引起的。我猜某些升级会自动检测到它并出错。

重新挂载 / 分区 rw,使用blkid获取正确的 UUID 并替换 /etc/fstab 为我修复它。

答案3

你的根文件系统没有被挂载为读/写,因为你没有告诉它。

UUID=2934c627-6f1a-438b-a877-1544108c7418 /               ext3 errors=remount-ro 0       1

您的安装选项只有errors=remount-ro,其中没有关于读/写的内容。标准做法是defaults在您的安装选项中包含此内容。defaults提供了其他几个安装选项,其中之一是rw,从而提供读/写。

因此,您需要将defaults或添加rw到 fstab 的选项字段中。

编辑:
如果再多思考一下(以及下面评论中的讨论),defaultsrw选项可能无法修复它。原因是重新安装行为完全取决于发行版的初始化脚本。我见过发行版在启动时从 fstab 中提取挂载设置,但也有可能 init 脚本在重新挂载 root 时完全忽略 fstab 选项(并在脚本中使用一些硬编码设置)。

相关内容