1、破坏主superblock能否挂载成功
备份:
dd if=/dev/loop0 of=super2.img
卸载
umount
破坏superblock:
dd if=/dev/zero of=/dev/loop0 bs=1k seek=1 count=1
记录了1+0 的读入
记录了1+0 的写出
1024字节(1.0 kB)已复制,0.000368422 秒,2.8 MB/秒
dd if=/dev/loop0 of=super3.img
对比发现地址0x400+1024已经被清空
挂载测试:
[yubo.wang@localhost ext4]$ sudo mount /dev/loop0 dir/
mount: /dev/loop0 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
【没有挂载成功】
尝试修复挂载:
[yubo.wang@localhost ext4]$ sudo mount -t ext4 /dev/loop0 dir/
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
[ 2414.999260] loop: module loaded
[ 2443.998646] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
[ 4127.239364] EXT4-fs (loop0): VFS: Can't find ext4 filesystem
[10113.343438] EXT4-fs (loop0): VFS: Can't find ext4 filesystem
超级块坏掉,
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/loop0 时
找不到有效的文件系统超级块.
恢复:
[yubo.wang@localhost e2fsprogs]$ sudo fsck.ext4 /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext4: 超级块无效, trying backup blocks...
/dev/loop0 was not cleanly unmounted, 强制检查.
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
Free 块s count wrong for 簇 #0 (4683, counted=4680).
处理
Free 块s count wrong (93504, counted=93501).
处理
Free inodes count wrong for 簇 #0 (1965, counted=1962).
处理
Free inodes count wrong for 簇 #1 (1976, counted=1974).
处理
Directories count wrong for 簇 #1 (0, counted=2).
处理
Free inodes count wrong (25677, counted=25672).
处理
/dev/loop0: ***** 文件系统已修改 *****
/dev/loop0: 16/25688 files (6.3% non-contiguous), 8899/102400 blocks
恢复成功,从Group 1恢复数据
【重新挂载成功OK】
2、破坏前2个备份superblock能否恢复和挂载成功
破坏base superblock:
dd if=/dev/zero of=/dev/loop0 bs=1k seek=1 count=1
dd if=/dev/zero of=/dev/loop0 bs=1k seek=8193 count=1
dd if=/dev/zero of=/dev/loop0 bs=1k seek=24577 count=1
dd if=/dev/loop0 of=super5-bad-back2.img
对比super4-fsck.img发现已经破坏前2个备份superblock
挂载
[yubo.wang@localhost ext4]$ sudo mount /dev/loop0 dir/
mount: /dev/loop0 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
[yubo.wang@localhost ext4]$ sudo mount -t ext4 /dev/loop0 dir/
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
修复:
[yubo.wang@localhost ext4]$ sudo fsck.ext4 /dev/loop0
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext4: 超级块无效, trying backup blocks...
fsck.ext4: Bad magic number in super-block 当尝试打开 /dev/loop0 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
手动指定superblock位置:8193
[yubo.wang@localhost ext4]$ sudo e2fsck -b 8193 /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
e2fsck: 无效的参数 当尝试打开 /dev/loop0 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
手动指定superblock位置:24577
[yubo.wang@localhost ext4]$ sudo e2fsck -b 24577 /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
e2fsck: 无效的参数 当尝试打开 /dev/loop0 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
[yubo.wang@localhost ext4]$
[yubo.wang@localhost ext4]$ sudo e2fsck -b 40961 /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
/dev/loop0 was not cleanly unmounted, 强制检查.
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
Free 块s count wrong for 簇 #0 (4683, counted=4680).
处理
Free 块s count wrong (93504, counted=93501).
处理
Free inodes count wrong for 簇 #0 (1965, counted=1962).
处理
Free inodes count wrong for 簇 #1 (1976, counted=1974).
处理
Directories count wrong for 簇 #1 (0, counted=2).
处理
Free inodes count wrong (25677, counted=25672).
处理
/dev/loop0: ***** 文件系统已修改 *****
/dev/loop0: 16/25688 files (6.3% non-contiguous), 8899/102400 blocks
【手动指定40961位置修复成功,把40961位置的超级块恢复到base位置,2个备份位置没有被恢复】
挂载卸载成功后2个备份位置没有被恢复,什么时候会被恢复呢?
破坏后不指定位置能否恢复?【-B 1024不能扫描到有效超级块】
sudo fsck.ext4 -b 40961 -y /dev/loop0 恢复成功
3、破坏group 0 Inode table能否恢复和挂载成功
查看信息可知Inode位置在block 291
破坏:
dd if=/dev/zero of=/dev/loop0 bs=1k seek=291 count=1
挂载失败:
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
[13463.104648] EXT4-fs (loop0): VFS: Can't find ext4 filesystem
[14198.614623] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
[14743.159634] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
[14941.666977] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
[15591.673632] EXT4-fs (loop0): no journal found
[15625.955327] EXT4-fs (loop0): no journal found
dumpe2fs打印报Journal错误:
Inode size: 128
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 26df2aa0-cc39-46d8-98b0-0a48a6421867
Journal backup: inode blocks
Journal superblock magic number invalid! 后面没有信息了
[yubo.wang@localhost ext4]$
修复:
[yubo.wang@localhost ext4]$ sudo fsck.ext4 /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
超级块包含无效的 ext3 日志(inode 8).
清除
*** ext3 journal has been deleted - filesystem is now ext2 only ***
/dev/loop0 was not cleanly unmounted, 强制检查.
Resize inode not valid. 重建
第一步: 检查inode,块,和大小
根inode不是一个目录. 清除
第二步: 检查目录结构
在 <2>/<11> (11) 中的入口 '..' has 删除/unused inode 2. 清除
在 <2>/<1977> (1977) 中的入口 '..' has 删除/unused inode 2. 清除
在 <2>/<1978> (1978) 中的入口 '..' has 删除/unused inode 2. 清除
第3步: 检查目录连接性
根inode not allocated. 分配
Unconnected 目录 inode 11 (...)
连接到 /lost+found
/lost+found未找到.创建
Unconnected 目录 inode 1977 (...)
连接到 /lost+found
Unconnected 目录 inode 1978 (...)
连接到 /lost+found
Pass 3A: Optimizing directories
Pass 4: Checking reference counts
Inode 11 ref count is 3, 应为 2. 处理
Unattached inode 12
连接到 /lost+found
Inode 12 ref count is 2, 应为 1. 处理
Unattached inode 13
连接到 /lost+found
Inode 13 ref count is 2, 应为 1. 处理
Unattached inode 14
连接到 /lost+found
Inode 14 ref count is 2, 应为 1. 处理
Inode 1977 ref count is 3, 应为 2. 处理
Inode 1978 ref count is 3, 应为 2. 处理
第5步: 检查簇概要信息
块位图差异: -(49153--53248)
处理
Free 块s count wrong for 簇 #0 (4689, counted=4690).
处理
Free 块s count wrong for 簇 #6 (4096, counted=8192).
处理
Free 块s count wrong (93510, counted=97607).
处理
重建日志
Creating journal (4096 blocks): 完成.
*** journal has been re-created - filesystem is now ext3 again ***
/dev/loop0: ***** 文件系统已修改 *****
/dev/loop0: 17/25688 files (5.9% non-contiguous), 8889/102400 blocks
结果:
dumpe2fs打印没有问题了,挂载也没有问题,但group 0里面存的文件和目录没有了,重新创建了lost+found目录且下面没有恢复文件,说明inode损坏后文件会被清除掉;