EXT4文件系统学习(四)手动破坏文件系统信息并恢复

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).
    处理<y>? 是
    Free 块s count wrong (93504, counted=93501).
    处理<y>? 是
    Free inodes count wrong for 簇 #0 (1965, counted=1962).
    处理<y>? 是
    Free inodes count wrong for 簇 #1 (1976, counted=1974).
    处理<y>? 是
    Directories count wrong for 簇 #1 (0, counted=2).
    处理<y>? 是
    Free inodes count wrong (25677, counted=25672).
    处理<y>? 是

    /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).
    处理<y>? 是
    Free 块s count wrong (93504, counted=93501).
    处理<y>? 是
    Free inodes count wrong for 簇 #0 (1965, counted=1962).
    处理<y>? 是
    Free inodes count wrong for 簇 #1 (1976, counted=1974).
    处理<y>? 是
    Directories count wrong for 簇 #1 (0, counted=2).
    处理<y>? 是
    Free inodes count wrong (25677, counted=25672).
    处理<y>? 是

    /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).
    清除<y>? 是
    *** ext3 journal has been deleted - filesystem is now ext2 only ***

    /dev/loop0 was not cleanly unmounted, 强制检查.
    Resize inode not valid.  重建<y>? 是
    第一步: 检查inode,块,和大小
    根inode不是一个目录.  清除<y>? 是
    第二步: 检查目录结构
    在 <2>/<11> (11) 中的入口 '..' has 删除/unused inode 2.  清除<y>? 是
    在 <2>/<1977> (1977) 中的入口 '..' has 删除/unused inode 2.  清除<y>? 是
    在 <2>/<1978> (1978) 中的入口 '..' has 删除/unused inode 2.  清除<y>? 是
    第3步: 检查目录连接性
    根inode not allocated.  分配<y>? 是
    Unconnected 目录 inode 11 (...)
    连接到 /lost+found<y>? 是
    /lost+found未找到.创建<y>? 是
    Unconnected 目录 inode 1977 (...)
    连接到 /lost+found<y>? 是
    Unconnected 目录 inode 1978 (...)
    连接到 /lost+found<y>? 是
    Pass 3A: Optimizing directories
    Pass 4: Checking reference counts
    Inode 11 ref count is 3, 应为 2.  处理<y>? 是
    Unattached inode 12
    连接到 /lost+found<y>? 是
    Inode 12 ref count is 2, 应为 1.  处理<y>? 是
    Unattached inode 13
    连接到 /lost+found<y>? 是
    Inode 13 ref count is 2, 应为 1.  处理<y>? 是
    Unattached inode 14
    连接到 /lost+found<y>? 是
    Inode 14 ref count is 2, 应为 1.  处理<y>? 是
    Inode 1977 ref count is 3, 应为 2.  处理<y>? 是
    Inode 1978 ref count is 3, 应为 2.  处理<y>? 是
    第5步: 检查簇概要信息
    块位图差异:  -(49153--53248)
    处理<y>? 是
    Free 块s count wrong for 簇 #0 (4689, counted=4690).
    处理<y>? 是
    Free 块s count wrong for 簇 #6 (4096, counted=8192).
    处理<y>? 是
    Free 块s count wrong (93510, counted=97607).
    处理<y>? 是
    重建日志<y>? 是
    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损坏后文件会被清除掉;

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值