debugfs 是一个针对ext2、ext3和ext4文件系统的交互式调试工具。它允许用户直接检查和修改文件系统的内部结构,主要用于:
debugfs [选项] [设备文件]
| 选项 | 说明 |
|---|---|
| -w | 以读写模式打开文件系统(危险!) |
| -c | 以只读模式打开文件系统(安全) |
| -f 脚本文件 | 从脚本文件读取命令(批处理模式) |
| -R 命令 | 执行单条命令后退出 |
| -i | 读取外部日志文件 |
| -s 超级块 | 使用指定的超级块 |
| -b 块大小 | 指定块大小 |
| -V | 显示版本信息 |
ls | 列出目录内容 |
cd | 切换目录 |
pwd | 显示当前目录 |
stat | 显示文件/目录信息 |
cat | 显示文件内容 |
dump | 导出文件到外部 |
undump | 从外部导入文件 |
show_super_stats | 显示超级块信息 |
stats | 显示文件系统统计信息 |
icheck | 根据inode号查找块 |
ncheck | 根据inode号查找文件名 |
testi | 测试inode是否被分配 |
freei | 释放inode |
seti | 分配inode |
# 首先卸载文件系统
sudo umount /dev/sdb1
# 以只读模式打开(安全)
sudo debugfs -c /dev/sdb1
说明:-c选项确保不会意外修改文件系统。
# 创建命令脚本
cat > commands.txt << EOF
stat /
ls -l /
show_super_stats
EOF
# 执行脚本中的命令
sudo debugfs -c -f commands.txt /dev/sdb1
# 显示根目录信息
sudo debugfs -c -R "stat /" /dev/sdb1
# 列出根目录内容
sudo debugfs -c -R "ls -l /" /dev/sdb1
# 显示超级块信息
sudo debugfs -c -R "show_super_stats" /dev/sdb1
步骤:
# 1. 首先使用只读模式打开文件系统
sudo debugfs -c /dev/sdb1
# 2. 在debugfs中查找已删除文件的inode
debugfs: lsdel
# 3. 显示找到的已删除inode信息
debugfs: stat
# 4. 如果inode看起来正常,可以尝试恢复
# 注意:需要以读写模式重新打开
sudo debugfs -w /dev/sdb1
debugfs: dump /tmp/recovered_file
# 1. 检查文件系统完整性
sudo debugfs -c /dev/sdb1
debugfs: icheck 0-1000 # 检查前1000个inode
debugfs: ncheck 0-1000 # 检查对应的文件名
# 2. 查看详细统计信息
debugfs: stats
# 3. 检查特定inode的状态
debugfs: testi 12345 # 检查inode 12345是否被分配
# 4. 查看文件系统布局
debugfs: show_super_stats
# 以读写模式打开(危险!请先备份)
sudo debugfs -w /dev/sdb1
# 1. 列出目录内容,注意损坏的条目
debugfs: ls -l /home/user
# 2. 如果发现损坏的目录项,可以尝试修复
# 删除损坏的目录项(谨慎!)
debugfs: clri /home/user/corrupted_entry
# 3. 或者修复目录结构
debugfs: rmdir /home/user/corrupted_dir
# 4. 强制检查文件系统
debugfs: check
-c选项(只读模式)A: fsck是自动修复工具,而debugfs是交互式调试工具。fsck自动检测和修复问题,debugfs允许手动检查和修改。
A: 可以创建一个虚拟磁盘进行练习:
# 创建虚拟磁盘文件
dd if=/dev/zero of=testdisk.img bs=1M count=100
# 格式化为ext4
mkfs.ext4 testdisk.img
# 挂载并添加测试数据
mkdir /mnt/test
mount -o loop testdisk.img /mnt/test
echo "测试数据" > /mnt/test/testfile.txt
umount /mnt/test
# 现在可以安全地练习debugfs
debugfs -c testdisk.img
A: 立即停止操作,从备份恢复数据。如果没有备份,可以尝试使用专业的数据恢复工具。