根文件系统在 Gentoo Linux 上启动时以只读方式挂载

cda*_*uth 5 linux boot mount gentoo filesystems

我正在使用 Gentoo Linux,一段时间以来,根文件系统在启动时以只读方式挂载。出于显而易见的原因,这很烦人,因为大多数服务无法正确启动(我没有为 /var 使用单独的文件系统)。系统启动后,我必须登录,重新挂载根文件系统读写,修复 /etc/mtab,从 /etc/fstab 挂载所有其他文件系统,然后启动所有丢失的守护进程。我知道有一些方法可以使系统在只读文件系统下正常运行,但我更愿意恢复可写根文件系统的旧行为。

奇怪的是,运行后mount / -o remount,rw,文件系统以可写方式挂载,没有任何错误。我怀疑 fsck 有问题,但现在我已禁用对分区 ( tune2fs -c0 -i0) 的自动文件系统检查。

当我运行 dmesg 时,只有这些行提到了分区,尽管我不确定是否因为 /var/log 不可写而丢失了某些东西:

EXT3-fs (sda5): mounted filesystem with writeback data mode</code>  
EXT3-fs (sda5): using internal journal
Run Code Online (Sandbox Code Playgroud)

/etc/fstab 中的行如下所示:

/dev/sda5 / ext3 noatime 0 1
Run Code Online (Sandbox Code Playgroud)

我正在使用内核 2.6.34-gentoo-r6(以前的 2.6.31 内核存在同样的问题)。我使用 genkernel 3.4.10.906 创建了它。我的 grub 配置如下所示:

title=Gentoo Linux (2.6.34-gentoo-r6)
root (hd0,0)
kernel /kernel-genkernel-x86_64-2.6.34-gentoo-r6 root=/dev/ram0 real_root=/dev/sda5 vga=792 CONSOLE=/dev/tty1 resume=/dev/sda6
initrd /initramfs-genkernel-x86_64-2.6.34-gentoo-r6
Run Code Online (Sandbox Code Playgroud)

除此之外,我使用 openrc 0.6.3 运行 baselayout 2.0.0,如果这很重要的话。sysvinit 2.87-r3也装了,不知道有没有实际用过。

这是 dumpe2fs 的输出:

Filesystem volume name:   hd-root
Last mounted on:          <not available>
Filesystem UUID:          387432ca-2464-4c61-ba15-11c4af1c0418
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:              1528912
Block count:              6104692
Reserved block count:     0
Free blocks:              413799
Free inodes:              674036
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1022
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8176
Inode blocks per group:   511
Filesystem created:       Tue Dec  9 14:48:56 2008
Last mount time:          Mon Sep 27 00:00:15 2010
Last write time:          Sun Sep 26 23:55:12 2010
Mount count:              39
Maximum mount count:      -1
Last checked:             Sun Sep 26 23:51:51 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Journal inode:            8
First orphan inode:       698281
Default directory hash:   tea
Directory Hash Seed:      4229715b-4ad1-4285-940b-9960db1cb4e1
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             128M
Journal length:           32768
Journal sequence:         0x003d9991
Journal start:            1
Run Code Online (Sandbox Code Playgroud)

我不知道是什么导致了这个问题。我找不到任何错误信息,并在互联网上搜索,我只找到了如何故意挂载根文件系统的手册阅读-

cda*_*uth 4

问题的解决比想象的要容易。显然,在基本布局 2 中,有一个名为的服务root,它只是重新挂载根文件系统进行读写。

\n\n

我的引导运行级别中\xe2\x80\x99t 没有此服务的原因可能是我很早就更新到了baselayout 2,并且可能此服务(以及其他几个服务)是后来引入的。以下服务现在位于我的启动运行级别中,并且一切正常:

\n\n
bootmisc\nconsolefont\ndevice-mapper\ndmcrypt\nfsck\nhostname\nhwclock\nkeymaps\nlocalmount\nmodules\nnet.lo\nnetmount\nnetwork\nprocfs\nroot\nsvscan\nswap\nsysctl\nsysfs\ntermencoding\nurandom\n
Run Code Online (Sandbox Code Playgroud)\n