好的,这很难描述,所以我将逐点进行说明。
我有一台 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 时没有发现任何内容,则您不必担心,您的数据是安全的!