我正在为运行 CentOS 6.2 的无头嵌入式设备开发。用户可以连接键盘,但不能连接显示器,串行控制台需要打开外壳,这是我们不希望用户必须做的事情。这几乎消除了使用恢复 USB 驱动器启动的可能性,除非它所做的只是盲目地重新映像硬盘驱动器。我想提供一些恢复工具,并且我已经编写了一个工具,它出现在 /dev/tty1 上来代替 getty 来提供这些功能。
其中一种功能是 fsck。我已经找到了如何以只读方式重新挂载根文件系统和其他文件系统。现在它们是只读的,fsck 它们然后重新启动应该是安全的。不幸的是,fsck 向我抱怨文件系统已挂载并且拒绝做任何事情。
如何强制 fsck 在只读挂载分区上运行?
根据我的研究,这将是一些晦涩难懂的东西。“-f”仅表示强制修复干净(但未安装)的分区。我需要修复干净或不干净的挂载分区。从我读到的内容来看,这是“只有专家”才应该做的事情,但没有人费心解释专家是如何做到的。我希望有人可以向我透露这一点。
顺便说一句,我注意到 Gentoo 上的 e2fsck 1.42.4 会让你 fsck 一个挂载的分区,甚至挂载读写,但似乎只有在 fsck 从终端运行时才会这样做,所以它可以询问用户是否肯定他们想做一些如此危险的事情。我不确定 CentOS 版本是否也做同样的事情,但 fsck 似乎可以修复已安装的分区,但它在不从终端运行时断然拒绝。
对我来说,最后的一个选择是编译我自己的被黑的 fsck。但恐怕我会以某种意想不到的方式把它搞砸。
谢谢!
注意:最初发布在这里。
更新:在我写这篇文章的时候,我认为这无关紧要,但是为了重新挂载 fs 只读,我必须这样做:
echo s > /proc/sysrq-trigger
echo s > /proc/sysrq-trigger
echo u > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)
这是我能找到的唯一方法。其他一切都抱怨文件系统很忙。据我所知,这是“安全的”,但它的重新安装可能与通常的方法略有不同。这可能是 fsck 不想修复它的原因。它仍然认为它以读写方式挂载。
您可以 fsck使用只读文件系统,因为以只读方式挂载不会像读写挂载那样将其标记为“脏”。写入缓存中没有任何更改可能只是部分刷新到磁盘,因此所有磁盘上的结构都是一致且安全的,fsck可以进行修改。
但是,如果fsck进行任何更改,内核的文件系统驱动程序可能会变得混乱,因为它期望保持不变的东西已经从它下面改变了。这不会影响文件系统本身的完整性(因为驱动程序没有写入文件系统),但它可能会使正在运行的系统不稳定。为避免这种情况,如果fsck对文件系统进行了任何更改,您应该重新启动。
| 归档时间: |
|
| 查看次数: |
29429 次 |
| 最近记录: |