标签: debugfs

如何在 debugfs 中的 ext4 文件系统上删除名为“filen/ame”(带斜杠)的文件?

玩 e2fsprogs debugfs,由于更改/意外,filen/ame创建了一个名为的文件。显然,正斜杠字符/用作路径名中的特殊分隔符。

仍在使用debugfs我想删除名为 的文件filen/ame,但我没有成功,因为该/字符没有被解释为文件名的一部分?

debugfs 是否提供删除包含斜杠的文件的方法?如果是这样怎么办?

我用了:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs
Run Code Online (Sandbox Code Playgroud)

输出:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来删除filen/ame文件:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

但这不起作用,只会产生:

debugfs …
Run Code Online (Sandbox Code Playgroud)

slash ext4 debugfs

26
推荐指数
1
解决办法
2244
查看次数

rmdir 删除空目录失败

我在删除空目录时遇到问题,strace 显示错误:

rmdir("empty_dir") = -1 ENOTEMPTY (Directory not empty)
Run Code Online (Sandbox Code Playgroud)

并且ls -la empty_dir什么都不显示。所以我用 debugfs 连接到 fs (ext4) 并看到这个目录中的隐藏文件:

# ls -lia empty_dir/
total 8
44574010 drwxr-xr-x 2 2686 2681 4096 Jan 13 17:59 .
44573990 drwxr-xr-x 3 2686 2681 4096 Jan 13 18:36 ..

debugfs:  ls empty_dir
 44574010  (12) .    44573990  (316) ..  
 26808797  (3768) _-----------------------------------------------------------.jpg  
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?有没有机会在不卸载和全面检查 fs 的情况下解决这个问题?

附加信息:

“隐藏”文件只是一个普通的 jpg 文件,可以通过图像查看器打开:

debugfs:  dump empty_dir/_-----------------------------------------------------------.jpg /root/hidden_file

# file /root/hidden_file 
/root/hidden_file: JPEG image data, JFIF standard 1.02
Run Code Online (Sandbox Code Playgroud)

rm -rf …

ext4 malware debugfs

7
推荐指数
1
解决办法
1850
查看次数

为什么目录的 inode 将文件名存储在 ext4 文件系统中?

目录 inode 与常规文件的 inode 没有本质区别,我从Ext4 磁盘布局中理解的是:

目录条目:因此,更准确地说,目录是一系列数据块,每个数据块包含目录条目的线性数组。

目录条目将文件名与指向其 inode 的指针一起存储。因此,如果文档说每个块都包含目录条目,为什么debugfs报告存储在目录 inode 中的文件名不同呢?这是 ext4 格式的闪存驱动器上的调试会话:

debugfs:  cat /sub
?
 .
  ..?
     spam?spam2?spam3??spam4
Run Code Online (Sandbox Code Playgroud)

我不认为inode_i_block可以存储这些文件名,我创建了文件名非常长的文件,大小超过 60 个字节。cat在 inode 上运行也debugfs显示了文件名,因此长文件名再次出现在 inode 中!

内容inode.i_block

根据 inode 描述的文件类型,inode.i_block可以以不同方式使用60 字节的存储空间。一般而言,普通文件和目录会将其用于文件块索引信息,而特殊文件则会将其用于特殊用途。

此外,没有对在哈希树目录 部分中存储文件名的 inode 的引用, 这是较新的实现。我觉得我错过了该文件中的某些内容。

主要问题是如果目录的 inode 包含文件名,那么它的数据块存储什么?

filesystems directory ext4 inode debugfs

5
推荐指数
3
解决办法
3900
查看次数

为什么 debugfs 中的 lsdel 不起作用?

我的/dev/sdb1文件系统分区ext3安装在 /mnt/folder.

我触摸一个文件/mnt/folder并删除该文件。然后我使用debugfs /dev/sdb1然后输入lsdel,但它说“找到 0 个已删除的 inode”。

什么是问题?我如何使用debugfs恢复我的文件?

data-recovery debugfs

4
推荐指数
1
解决办法
1万
查看次数

复制或恢复 ext4fs 文件系统上文件/目录的 crtime

我想知道 2020 年是否有方法复制或恢复 Linux 中 inode/文件/目录的 crtime(创建时间)。我不小心删除了一个文件夹,而我仍然有完整的磁盘备份,但 cp -a 和 rsync 都没有可以恢复/复制文件/目录crtimes。

我找到了一种使用 debugfs 来实现它的方法,但它非常复杂,我需要自动化它(我有数百个已删除的文件/目录)。

对于源磁盘,您可以执行以下操作:

# debugfs /dev/sdXX
# stat /path
Inode: 432772   Type: directory    Mode:  0700   Flags: 0x80000
Generation: 3810862225    Version: 0x00000000:00000006
User:  1000   Group:  1000   Project:     0   Size: 4096
File ACL: 0
Links: 5   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5db96479:184bb16c -- Wed Oct 30 15:22:49 2019
 atime: 0x5b687c70:ee4dff18 -- Mon Aug  6 21:50:56 2018
 mtime: 0x5db96479:184bb16c -- Wed Oct 30 15:22:49 2019 …
Run Code Online (Sandbox Code Playgroud)

backup ext4 restore debugfs

2
推荐指数
1
解决办法
2113
查看次数