数据恢复(四)-debugfs命令使用详解
haoteby 2024-12-07 12:32 13 浏览
在不依赖第三方数据恢复软件的情况下,linux自带适用于常规数据恢复的程序当属debugfs。该命令功能强大,在我数据恢复系列的前几篇文章中频繁提到。但是国内对debugfs详细使用介绍较少且不全面。故专门用一篇文章来介绍debugfs使用,可以对数据恢复有更深刻的理解。
实验环境
- 腾讯云CVM
- 系统环境 Ubuntu 18.04.4 LTS
- debugfs 1.44.1 (24-Mar-2018)
- /debugfsTest 为单独挂载的云硬盘 /dev/vdb
root@VM-8-15-ubuntu:/# cd /debugfsTest/
root@VM-8-15-ubuntu:/debugfsTest# touch {1..10}.txt
root@VM-8-15-ubuntu:/debugfsTest# ls
1.txt 10.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
debugfs 常用选项
-V
查看当前debugfs版本
root@VM-8-15-ubuntu:/debugfsTest# debugfs -V
debugfs 1.44.1 (24-Mar-2018)
Using EXT2FS Library version 1.44.1
-w
指定文件系统应该以写模式打开。没有这个选项,文件系统是以只读模式打开,在执行部分写的子命令时会报错。
root@VM-8-15-ubuntu:/debugfsTest# debugfs /dev/vda1
debugfs 1.44.1 (24-Mar-2018)
debugfs: rm /debugfsTest/1.txt
rm: Filesystem opened read/only #没有加-w参数,提示文件系统只有只读权限
root@VM-8-15-ubuntu:/debugfsTest# debugfs -w /dev/vda1
debugfs 1.44.1 (24-Mar-2018)
debugfs: rm /debugfsTest/1.txt #执行成功
-f cmd_file
debugfs从cmd_file文件读取命令,并执行它们。当debugfs完成执行命令完成后退出。
root@VM-8-15-ubuntu:/debugfsTest# echo pwd > testDebugfs.sh
root@VM-8-15-ubuntu:/debugfsTest# debugfs /dev/vda1 -f testDebugfs.sh
debugfs 1.44.1 (24-Mar-2018)
debugfs: pwd
[pwd] INODE: 2 PATH: /
[root] INODE: 2 PATH: /
-R request
使用debugfs执行单个命令request后退出。
root@VM-8-15-ubuntu:/debugfsTest# debugfs /dev/vdb -R "pwd"
debugfs 1.44.1 (24-Mar-2018)
[pwd] INODE: 2 PATH: /
[root] INODE: 2 PATH: /
-z undo_file
在覆盖文件系统块之前,将块的旧内容写入撤消文件。此撤消文件可以与 e2undo一起使用,以在出现问题时恢复文件系统的旧内容。
root@VM-8-15-ubuntu:/debugfsTest# debugfs -w /dev/vdb -z /tmp/undo
debugfs 1.44.1 (24-Mar-2018)
Overwriting existing filesystem; this can be undone using the command:
e2undo /tmp/undo /dev/vdb
debugfs 指定文件
许多 debugfs 命令以 filespec 作为参数来指定 debugfs 当前打开的文件系统中的 inode(而不是路径名)。filespec 参数可以以两种形式指定。
- 第一种形式是 inode 编号,由尖括号,例如 <2>。
- 第二种形式是路径名;如果路径名以正斜杠 (‘/’) 为前缀,则相对于 debugfs 当前打开的文件系统的根进行解释。
debugfs 常用子命令
help
打印所有子命令的帮助信息。
debugfs: help
show_debugfs_params, params 显示 debugfs 参数
open_filesys, open 打开一个文件系统
close_filesys, close 关闭文件系统
freefrag, e2freefrag 报告可用空间碎片
feature, features 设置/打印超级块功能
dirty_filesys, dirty 将文件系统标记为脏
init_filesys 初始化文件系统(DESTROYS DATA)
show_super_stats, stats 显示超级块统计信息
ncheck 做 inode->name 翻译
icheck 做 block->inode 翻译
change_root_directory,chroot 更改根目录
change_working_directory, cd 更改工作目录
list_directory, ls 列出目录
show_inode_info, stat 显示inode信息
dump_extents, extents, ex 转储范围信息
blocks 打印 inode 使用的块
filefrag 报告一个 inode 的碎片信息
link, ln 创建目录链接
unlink 删除目录链接
mkdir 创建目录
rmdir 删除目录
rm 删除文件(如果合适,取消链接和 kill_file)
kill_file 释放一个 inode 和它的block
copy_inode 复制inode结构
clri 清除一个 inode 的内容
freei 清除一个 inode 的 in-use 标志
seti 设置一个 inode 的 in-use 标志
testi 测试一个 inode 的 in-use 标志
freeb 清除块的使用中标志
setb 设置块的使用中标志
testb 测试一个块的使用中标志
modify_inode,mi 按结构修改一个inode
find_free_block,ffb 查找空闲块
find_free_inode,ffi 查找空闲 inode
print_working_directory, pwd 打印当前工作目录
expand_dir,展开展开目录
mknod 创建一个特殊文件
list_deleted_inodes, lsdel 列出已删除的 inode
undelete, undel 取消删除文件
write 从你的本地文件系统复制一个文件
dump_inode,dump 将一个 inode 转储到一个文件中
cat 将一个 inode 内容输出到 stdout
lcd 更改本机文件系统上的当前目录
rdump 递归地将目录转储到本机文件系统
set_super_value, ssv 设置超级块值
set_inode_field, sif 设置 inode 字段
set_block_group, set_bg 设置块组描述符字段
logdump 转储日志的内容
htree_dump, htree 转储一个哈希索引目录
dx_hash, hash 计算一个文件名的目录哈希
dirsearch 在目录中搜索特定文件名
bmap 计算一个 inode 的逻辑->物理块映射
fallocate 将未初始化的块分配给一个 inode
punch, truncate 通过解除分配从一个 inode 中打孔(或截断)块
symlink 创建符号链接
imap 计算一个inode的位置
dump_unused 转储未使用的块
set_current_time 设置文件系统字段时使用的当前时间
supported_features 此版本的 e2fsprogs 支持的打印功能
dump_mmp 转储 MMP 信息
set_mmp_value, smmp 设置 MMP 值
extent_open, eo 打开用于范围操作的 inode
zap_block、zap Zap 块:填充 0、模式、翻转位等。
block_dump,bdump, bd 转储块的内容
ea_list 列出一个 inode 的扩展属性
ea_get 获取一个inode的扩展属性
ea_set 设置一个inode的扩展属性
ea_rm 移除一个inode的扩展属性
list_quota, lq 列出配额
get_quota, gq 获取配额
inode_dump,idump, id 以十六进制转储 inode 结构
journal_open, jo 打开日志
journal_close, jc 关闭日志
journal_write, jw 将事务写入日志
journal_run, jr 恢复日志
help 显示有关命令或主题的信息。
list_requests, lr, ? 列出可用的命令。
quit, q 离开子系统。
params
显示 debugfs 参数
root@VM-8-15-ubuntu:~# debugfs /dev/vdb -w
debugfs 1.44.1 (24-Mar-2018)
debugfs: params
Open mode: read-write
Filesystem in use: /dev/vdb
blocks filespec
输出 inode 文件指向的block块。
root@VM-8-15-ubuntu:~# ls -i /etc/passwd
270146 /etc/passwd
root@VM-8-15-ubuntu:~# debugfs /dev/vda1 -R "blocks <270146>"
debugfs 1.44.1 (24-Mar-2018)
1124527
这里获取的blocks的值,就是文件在磁盘上的真实位置。
open , close
打开/关闭文件系统。通常使用debugfs时,都是在后面直接跟文件系统。也可以进入到debugfs后再打开/关闭指定文件系统。
root@VM-8-15-ubuntu:~# debugfs
debugfs 1.44.1 (24-Mar-2018)
debugfs: ls
ls: Filesystem not open
debugfs: open /dev/vdb
debugfs: ls
debugfs: close
debugfs: ls
ls: Filesystem not open
freefrag
报告可用空间碎片。
debugfs: freefrag
Device: /dev/vdb
Blocksize: 4096 bytes
Total blocks: 10485760
Free blocks: 10243382 (97.7%)
Min. free extent: 16 KB
Max. free extent: 2064256 KB
Avg. free extent: 1241620 KB
Num. free extent: 33
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Blocks Percent
16K... 32K- : 1 4 0.00%
64M... 128M- : 4 97140 0.95%
128M... 256M- : 5 322529 3.15%
256M... 512M- : 2 187354 1.83%
512M... 1024M- : 2 391156 3.82%
1G... 2G- : 19 9245198 90.26%
dirty
将文件系统状态设置为dirty,mount时候会深入检查每个文件的完整性。执行后没有任何返回。
debugfs: dirty
init_filesys
初始化文件系统,删除数据。
root@VM-8-15-ubuntu:~# debugfs /dev/vdb -w
debugfs 1.44.1 (24-Mar-2018)
debugfs: init_filesys
init_filesys: Usage: initialize <device> <blocks>
debugfs: init_filesys /dev/vdb 33798
init_filesys: Filesystem /dev/vdb is still open. Close it first.
root@VM-8-15-ubuntu:~# umount /dev/vdb
root@VM-8-15-ubuntu:~# debugfs
debugfs 1.44.1 (24-Mar-2018)
debugfs: blocks /passwd
blocks: Filesystem not open
debugfs: init_filesys /dev/vdb 33798
root@VM-8-15-ubuntu:~# mount /dev/vdb /debugfsTest/
mount: /debugfsTest: mount(2) system call failed: Structure needs cleaning.
初始化文件系统后,再次挂载报错。mount挂载失败出现Structure needs cleaning,使用命令 fsck.ext4 /dev/vdb 进行修复。
root@VM-8-15-ubuntu:~# fsck.ext4 /dev/vdb
e2fsck 1.44.1 (24-Mar-2018)
ext2fs_check_desc: Corrupt group descriptor: bad block for block bitmap
fsck.ext4: Group descriptors look bad... trying backup blocks...
Block bitmap for group 0 is not in group. (block 0)
Relocate<y>? yes
Inode bitmap for group 0 is not in group. (block 0)
......
Free inodes count wrong (8479, counted=8469).
Fix<y>? yes
/dev/vdb: ***** FILE SYSTEM WAS MODIFIED *****
/dev/vdb: 11/8480 files (0.0% non-contiguous), 1083/33798 blocks
root@VM-8-15-ubuntu:~# mount /dev/vdb /debugfsTest/
root@VM-8-15-ubuntu:~# cd /debugfsTest/
root@VM-8-15-ubuntu:/debugfsTest# ls
lost+found
文件系统修复后数据丢失,这个操作非常危险。
stats
显示超级快统计信息
root@VM-8-15-ubuntu:~# debugfs /dev/vdb -R "stats" |more
debugfs 1.44.1 (24-Mar-2018)
Filesystem volume name: <none>
Last mounted on: /debugfsTest
Filesystem UUID: 5841c171-06b9-4ea4-9030-597236944d37
Filesystem magic number: 0xEF53
Filesystem revision #: 0 (original)
Filesystem features: (none)
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
这个和执行 dumpe2fs /dev/vdb 看到的信息是差不多的。
ncheck, icheck
ncheck inode号翻译成文件名
icheck 块号翻译成inode号
root@VM-8-15-ubuntu:~# ls -i /etc/passwd
270146 /etc/passwd
root@VM-8-15-ubuntu:~# debugfs /dev/vda1 -R "ncheck 270146"
debugfs 1.44.1 (24-Mar-2018)
Inode Pathname
270146 /etc/passwd
root@VM-8-15-ubuntu:~# debugfs /dev/vda1 -R "blocks /etc/passwd"
debugfs 1.44.1 (24-Mar-2018)
1124527
root@VM-8-15-ubuntu:~# debugfs /dev/vda1 -R "icheck 1124527"
debugfs 1.44.1 (24-Mar-2018)
Block Inode number
1124527 270146
stat
打印inode信息,原理是从磁盘上读取inode的表结构。记录了文件的几个时间戳,比shell命令中的stat命令看到的信息更加详细。其中EXTENTS记录的是该inode对应的block的值。
Inode: 270146 Type: regular Mode: 0644 Flags: 0x80000
Generation: 1919007159 Version: 0x00000000:00000001
User: 0 Group: 0 Project: 0 Size: 1954
File ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x623033ec:cfb832f4 -- Tue Mar 15 14:36:28 2022
atime: 0x6243fa8d:997af09c -- Wed Mar 30 14:37:01 2022
mtime: 0x623033ec:cfb832f4 -- Tue Mar 15 14:36:28 2022
crtime: 0x623033ec:cfb832f4 -- Tue Mar 15 14:36:28 2022
Size of extra inode fields: 32
Inode checksum: 0xcde2ce28
EXTENTS:
(0):1124527
相关推荐
- Chrome OS 41 用 Freon 取代 X11_chrome os atom
-
在刚发布的ChromeOS41里,除了常规的Wi-Fi稳定性提升(几乎所有系统的changelog里都会包含这一项)、访客模式壁纸等之外,还存在底层改变。这一更新中Google移除...
- 苹果iPad Pro再曝光 有望今年六月发布
-
自进入2015年以后,有关大屏iPad的消息便一直不绝于耳,之前就有不少媒体猜想这款全新的平板电脑将会在三月发布,不过可惜的是我么只在那次发布会上看到了MacBookPro。近日@Ubuntu团队便...
- 雷卯针对香橙派Orange Pi 5 Max开发板防雷防静电方案
-
一、应用场景高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux桌面计算机、Linux网络服务器、Android平板、Android游戏机...
- Ubuntu Server无法更新问题解决_ubuntu server not found
-
上周老家的一台运行UbuntuServer的盒子无法连接上了,中秋这两天回来打开,顺手更新一下发现更新报错。提示`E:Releasefileforhttps://mirrors.aliyun...
- 虚幻引擎5正式版发布:古墓丽影&巫师新作采用、新一代实时渲染
-
机器之心报道编辑:杜伟、陈萍虚幻引擎5的目标是「助力各种规模的团队在视觉领域和互动领域挑战极限,施展无限潜能」。...
- AMD Milan-X双路霄龙7773X平台基准测试曝光 CPU缓存总量超1.5GB
-
OpenBenchmarking基准测试数据库刚刚曝光了AMDMilan-X双路霄龙7773X平台的跑分成绩,虽然很快就被撤下,但我们还是知晓了高达1.6GB的总CPU缓存。早些时...
- 全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)
-
Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...
- 在ubuntu下新建asp.net core项目_创建ubuntu
-
本文一步步讲述在ubuntu下用visualstudiocode创建asp.netcore项目的过程。step1:环境操作系统:virtualbox下安装的lubuntu。请不要开启“硬件...
-
- 在晶晨A311D2处理器上进行Linux硬件视频编码
-
在KhadasVIM4AmogicA311D2SBC上,我更多的时间是在使用Ubuntu22.04。它的总体性能还不错,只不过缺少3D图形加速和硬件视...
-
2025-08-26 17:22 haoteby
- Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!
-
之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...
- 电影质量级渲染来了!虚幻引擎5.3正式发布:已开放下载
-
快科技9月8日消息,日前,Unrealengine正式发布了虚幻引擎5.3,带来了大量全方位的改进。...
- 2025如何选购办公电脑?极摩客mini主机英特尔系列选购指南
-
当下,迷你主机的性能越来越强,品类也越来越多。但是CPU是不变的,基本都是AMD和英特尔的。有一个小伙伴在评论区提问,我应该如何在众多机器中选购一台符合自己的迷你主机呢?那今天我们优先把我们的系列,分...
- ubuntu 20.04+RTX4060 Ti+CUDA 11.7+cudnn
-
ububtu添加国内源sudocp/etc/apt/sources.list/etc/apt/sources.list.backupsudovim/etc/apt/sources.lis...
- Linux Mint 18将重新基于Ubuntu 16.04 带来更好硬件支持
-
项目负责人ClementLefebvre在本月6日披露了关于LinuxMint18“Sarah”操作系统的大量信息,包括带来全新扁平化体验的Mint-Y主题。而现在,这款将于年底之前上线的操作...