手册上说debugfs可以用于检查和更改ext2、ext3或ext4文件系统的状态。似乎很牛的样子,但是我并没有试验出来它多么强大的功能,无非就是在某些文件损坏导致无法删除的时候,我用debugfs来删除这些文件而已,如果有人知道它其他的妙用,可以留言,感谢。
1. 打开debugfs
首先使用debugfs访问损坏文件所在的分区(例如/dev/nvme1n1p1),-w选项代表debugfs可对分区进行读写操作。
sun@sun-pc:~$ sudo debugfs -w /dev/nvme1n1p1
[sudo] sun 的密码:
debugfs 1.44.1 (24-Mar-2018)
debugfs:
2. 查看当前路径
刚打开debugfs的时候,当前路径为该分区(/dev/nvme1n1p1)的根目录下。
debugfs: pwd
[pwd] INODE: 2 PATH: /
[root] INODE: 2 PATH: /
debugfs:
3. 查看路径下有哪些文件
支持 ls,ls -l 查看某个路径下的文件,用法和 linux shell 终端下一样,但是显示是在一个新的界面中,按"q"可以退出显示。
debugfs: ls AOSP_A10/frameworks
4. 切换路径
由于现在是处于debugfs子系统中,也就是此时的终端里包含了两个文件系统。一个是原生文件系统(即登录debugfs之前的文件系统),另一个是登录debugfs子系统后的文件系统,所以涉及两个路径。
比如说我在/home/sun/
路径下执行了sudo debugfs -w /dev/nvme1n1p1
来登录debugfs子系统,那么登录后对应的原生文件系统路径则为/home/sun/
,而debugfs当前对应的文件系统的当前路径则为根目录(注意这个根目录是指debugfs操作分区的根目录)。
4.1 切换debugfs子系统路径
也是 cd 命令,和 linux 中不同的是,没有home目录的概念,不要单独使用 cd 或 cd ~
debugfs: cd AOSP_A10/frameworks
4.2 切换native文件系统的路径
注:虽然在debugfs里可以切换native filesystem的路径,但是在退出debugfs后,当前路径还是登录debugfs之前的路径。
debugfs: lcd /home/sun/temp
切换完后,可以键入任意字符 + 空格 + 两次tab键
来查看native filesystem的路径是否变更。如下所示,可以看得出来刚登录debugfs后,对应的原生文件系统路径为/home/sun,在经过lcd命令切换路径后,变为了/home/sun/temp3
5. 删除文件
也是 rm 命令,但是不支持参数指定(如 rm -rf )
debugfs: rm 1.txt
6. 复制 linux 系统中某文件的内容到 debugfs 加载分区中的某文件中
用法:write <native file> <new file>
<native file>:linux系统中的文件
<new file>:指的是在debugfs操作分区中未存在的文件
debugfs: write ../temp/1.txt 3.txt
7. 文件block,inode,name相互转换
# name -> block
debugfs: blocks 1.txt
9270 # block -> inode number
debugfs: icheck 9270
Block Inode number
9270 324# inode number -> name
debugfs: ncheck 324
Inode Pathname
324 //1.txt
8. 退出debugfs
Ctrl+D,或者在debugfs命令行中输入quit / q 后回车也可退出。
debugfs: quit
或
debugfs: q
注:debugfs内的所有写操作(如 write 和 rm )只有在debugfs退出时,才会在linux终端中看到变化。