为什么 fsck 的工作如此不一致?

为什么 fsck 的工作如此不一致?

好的,这很难描述,所以我将逐点进行说明。

我有一台 Linux 服务器,它运行的是最新版本的 Ubuntu。我运行了 fsck read only 来检查硬盘。输出如下:

blackwidower@Twilight:~$ sudo fsck -fn /dev/sda1
fsck from util-linux 2.26.2
e2fsck 1.42.12 (29-Aug-2014)
Warning!  /dev/sda1 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
Pass 1: Checking inodes, blocks, and sizes
Deleted inode 11667059 has zero dtime.  Fix? no

Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (98319973, counted=98319938).
Fix? no

Inode bitmap differences:  -11667059
Fix? no


/dev/sda1: ********** WARNING: Filesystem still has errors **********

/dev/sda1: 216607/60932096 files (0.2% non-contiguous), 145383835/243703808 blocks

所以我决定从 Live USB 启动,然后从那里运行检查。结果是……嗯,它说一切都很干净,没有错误。然后我怀疑是 Live USB 出了问题,所以我在恢复模式下重新启动了服务器,结果是一样的,很干净。

在有人问之前,是的,我确实强制检查了。它执行了所有五个步骤,没有发现任何错误。但是当我在内部运行时,它确实发现了错误。

我知道这里有错误,但为什么没有发现?到底发生了什么?有人能帮我解决这个问题吗?

答案1

fsck 应该在文件系统离线时运行。

如果文件系统在线,数据就会在磁盘和内存之间不断交换。

一些数据在缓冲区(内存)中,而其他数据在磁盘上,这导致不一致。

在您的情况下,/dev/sda1 必须保存 /(根)文件系统,因此一些数据被缓冲(/var/log/messages、last logs、cron log...),因此出现不一致。

如果在干净关机后从 USB 运行系统进行 fsck 时没有发现任何内容,则您不必担心,您的数据是安全的!

相关内容