在这个答案用户 @psusi 显示了e2fsck
我在文档中找不到的用法:e2fsck /dev/sdc1?offset=2048
。
我正在尝试使用它来检查 raid 阵列中的设备(手动失败并删除)。长话短说:我知道从 /dev/sdb2 的偏移 67108864 开始有一个 ext4 文件系统,但未正确卸载。我尝试了以下方法(/dev/sdb2
在不同的测试之间始终恢复到相同的内容)。
运行
mount /dev/sdb2 -o loop,offset=67108864 /tmp/mnt
工作正常,我可以看到使用dmesg | tail
它删除了 5 个孤立的索引节点,完全恢复了文件系统,并安装了它:EXT4-fs: 5 orphan inodes deleted EXT4-fs: recovery complete EXT4-fs: mounted filesystem with ordered data mode. Opts: (null)
相似地,
losetup /dev/loop0 --offset 67108864 /dev/sdb2 && e2fsck -n /dev/loop0
:root: recovering journal root: Clearing orphaned inode 1179687 (uid=1000, gid=1000, mode=0100600, size=16384) root: Clearing orphaned inode 1179686 (uid=1000, gid=1000, mode=0100600, size=16384) root: Clearing orphaned inode 1179685 (uid=1000, gid=1000, mode=0100600, size=32768) root: Clearing orphaned inode 1179684 (uid=1000, gid=1000, mode=0100600, size=32768) root: Clearing orphaned inode 1179683 (uid=1000, gid=1000, mode=0100600, size=65536) root: clean, 225936/4882432 files, 2664100/19514624 blocks
我认为这
e2fsck -p /dev/sdb2?offset=67108864
相当于上面的方法(使用losetup
),但我得到:root: recovering journal e2fsck: Bad magic number in super-block while trying to re-open root root: ********** WARNING: Filesystem still has errors **********
我确信
e2fsck
找到了分区,因为如果我在偏移量中输入了错误的值(例如,0),我会收到无法找到文件系统的错误。另外,如果我e2fsck -p /dev/sdb2?offset=67108864
在方法 1 或 2 中的任何一个之后使用,它会打印root: clean, ...
.
offset
我想知道是否有人可以向我指出该选项的文档e2fsck
,或者帮助我了解它的确切作用以及这与使用给定偏移安装环回设备有何不同。
谢谢。
编辑:附加信息。我可以按如下方式重现此行为:
dd if=/dev/zero of=/tmp/disk bs=1M count=100
mkfs -t ext4 -E offset=70000000 /tmp/disk
sudo mount -o loop,offset=70000000 /tmp/disk /mnt/
ps > /mnt/test
cp /tmp/disk /tmp/disk2
cp /tmp/disk2 /tmp/disk2.copy
sudo umount /mnt
e2fsck -p /tmp/disk2?offset=70000000
# /tmp/disk2: recovering journal
# e2fsck: Bad magic number in super-block while trying to re-open /tmp/disk2
# /tmp/disk2: ********** WARNING: Filesystem still has errors **********
sudo mount -o loop,offset=70000000 /tmp/disk2.copy /mnt/
dmesg | tail
# [240760.866274] EXT4-fs (loop3): mounted filesystem with ordered data mode. Opts: (null)
# [240770.516865] EXT4-fs (loop3): recovery complete
# [240770.516869] EXT4-fs (loop3): mounted filesystem with ordered data mode. Opts: (null)
sudo umount /mnt
e2fsck -n /tmp/disk2?offset=70000000
# e2fsck 1.42.13 (17-May-2015)
# Warning: skipping journal recovery because doing a read-only filesystem check.
# /tmp/disk2: clean, 11/25688 files, 8896/102400 blocks
e2fsck -n /tmp/disk2.copy?offset=70000000
# e2fsck 1.42.13 (17-May-2015)
# /tmp/disk2.copy: clean, 11/25688 files, 8896/102400 blocks
正如我们所看到的,挂载文件会恢复日志(然后 e2fsck 将文件系统报告为干净),同时e2fsck -p
会抛出错误并且不会恢复日志。