/deb/sdc
我们想要检查每台/dev/sdg
Red Hat Linux 机器上的磁盘文件系统。
目标是找到需要的磁盘是什么e2fsck
(等等e2fsck -y /dev/sdb
)
根据手册页
-n
以只读方式打开文件系统,并假设所有问题的答案均为“否”。允许以非交互方式使用。此选项不能与或选项e2fsck
同时指定。-p
-y
当我们运行命令时(示例)
e2fsck -n /dev/sdXX
我们得到
e2fsck 1.42.9 (28-Dec-2013) Warning! /dev/sdc is mounted. Warning: skipping journal recovery because doing a read-only filesystem check. /dev/sdc: clean, 94/1310720 files, 156685/5242880 blocks
那么我们需要从e2fsck -n
输出中捕获什么,这需要我们运行e2fsck
(无需-n
)?
e2fsck 进程
init 1
umount /dev/sdXX
e2fsck -y /dev/sdXX # (or e2fsck -C /dev/sdXX for full details)
init 3
答案1
你使用e2fsck
,所以我假设我们在谈论ext?
文件系统。命令
tune2fs -l /dev/sdXX
将告诉您文件系统的明显状态(可以挂载,这是安全的)。您将获得(除其他信息外)
Filesystem state: clean
或者其他的clean
。因为grep
如果匹配失败则返回 false,所以你的基本尝试可以是这样的:
tune2fs -l /dev/sdXX | grep "^Filesystem state:[ ]*clean$" || { commands; to; fix; the; filesystem; }
上述操作仅在文件系统事先检测到其不干净状态时才有效。有时您无论如何都想检查问题(这就是为什么期望的行为是每 N 次挂载一次或当经过多少天时)。如果我理解正确,您正试图通过分析 的输出fsck
来了解是否应该。e2fsck -y /dev/sdXX
e2fsck -n /dev/sdXX
我说不要分析输出。检查退出状态。参见man 8 e2fsck
学习:
返回的退出代码
e2fsck
是以下条件的总和:
0
- 无错误
1
- 文件系统错误已更正
2
- 文件系统错误已更正,应重新启动系统
4
- 文件系统错误未更正
8
- 操作错误
16
- 使用或语法错误
32
-e2fsck
根据用户请求取消
128
- 共享库错误
e2fsck -n /dev/sdXX
如果文件系统似乎清楚;所以这是检测电流的另一种方法明显的状态,就像我们对 所做的那样tune2fs
。无论如何,要检查,您需要-f
选项。然后你想知道退出状态是否包括4
.bash
可以使用以下方法完成:
e2fsck -nf /dev/sdXX # this is safe even if the filesystem is mounted
status=$?
[ $(( $status & 4 )) -eq 4 ] && { commands; to; fix; the; filesystem; }
快速解释:
$?
是最后一个命令的退出状态(e2fsck
在本例中)。我将其保存到单独的变量中,以便可以对其进行多次测试。在这个只有一个测试的简单示例中,这不是必需的,但总体而言是一种很好的做法。根本原因是:这些行之后$status
仍包含的退出状态e2fsck
并且可以重复使用,而(新的)$?
与无关e2fsck
。$(( ... ))
进行 shell 算术运算- 其中
&
按位与, - then
[ ... -eq 4 ]
实际上就是test
检查结果是否正确的命令4
。 - 如果测试成功,
{ ... }
则将执行该块。
错误可能不在文件系统本身,而是在更深层次的设备中。我认为这超出了这个问题的范围,但只是为了在你需要的时候为你指明正确的方向,这些是有用的命令(注意sdX
,不是sdXX
):
smartctl -t long /dev/sdX
badblocks -n -b 512 /dev/sdX
在使用它们之前请先阅读它们的手册页。
答案2
首先检查它是否是日志文件系统。
“日志文件系统是一种文件系统,它通过在称为“日志”的数据结构(通常是循环日志)中记录此类更改的意图来跟踪尚未提交到文件系统主要部分的更改。如果发生系统崩溃或电源故障,此类文件系统可以更快地恢复在线状态,并且损坏的可能性较低。”
然后您可以尝试 Gparted 来检查一致性并看看该工具能为您做什么。