`e2fsck` 的 `offset` 选项的语法

`e2fsck` 的 `offset` 选项的语法

这个答案用户 @psusi 显示了e2fsck我在文档中找不到的用法:e2fsck /dev/sdc1?offset=2048

我正在尝试使用它来检查 raid 阵列中的设备(手动失败并删除)。长话短说:我知道从 /dev/sdb2 的偏移 67108864 开始有一个 ext4 文件系统,但未正确卸载。我尝试了以下方法(/dev/sdb2在不同的测试之间始终恢复到相同的内容)。

  1. 运行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)
    
  2. 相似地,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
    
  3. 我认为这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会抛出错误并且不会恢复日志。

如果这有用的话,这是两个磁盘映像之间的区别

相关内容