![Linux 命令获取文件的 FAT32 扇区](https://linux22.com/image/1356355/Linux%20%E5%91%BD%E4%BB%A4%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%9A%84%20FAT32%20%E6%89%87%E5%8C%BA.png)
我想找到一个与 debugfs 等效的命令,但适用于 Linux 中的 FAT32 分区。
我需要列出与特定文件相对应的所有扇区(我正在处理用 dd 映像的磁盘)。
如果没有,您是否知道任何 DOS/Windows 命令?
感谢帮助。
答案1
已经五年了,但我刚刚研究编写一个工具来备份我的旧软盘,该工具需要在磁盘映像和文件名之间的偏移量之间来回转换,所以这里有一个答案给你。
我正在使用 dd 制作磁盘映像
首先,为了让那些从谷歌上搜索到的人受益,我建议总是dd
使用 GNU ddrescue。我记得我听说过在检测和报告某些类型的错误时不可靠的讨论。
至于回答这个问题,我发现了两个选项:
filefrag -e /path/to/file
似乎可以在任何磁盘或-o loop
已安装的磁盘映像上运行,并且它是的一部分e2fsprogs
,因此它应该默认安装在绝大多数 Linux 机器上,但它必须以 root 身份运行,并且与我测试过的 FUSE 文件系统不兼容,例如 fuseiso。(这个答案建议这样做,但我必须添加一些
-e
内容才能使它对我所测试的图像可靠地工作。)侦探工具包它会按照您的要求执行操作,并且能够完美处理各种图像格式。(而且,由于它是一个取证工具包,因此这些工具不会引入意外修改您转储的磁盘映像的新方法,如果您阅读了手册页,您还可以使用它们来恢复删除的文件。)
以下是如何使用 Sleuth Kit 的示例:
#!/bin/bash
# For demonstration purposes, I'll start from a bad sector report culled
# from a ddrescue log file, so I can also demonstrate looking up a file
# from a byte offset within the image.
BAD_OFFSET=1234567890
IMG_PATH=/path/to/image/file
# Translate to the units TSK tools expect
BLOCK_SIZE="$(blkcat -s "$IMG_PATH" | cut -d: -f1)"
BLOCK_OFFSET="$(($BAD_OFFSET / $BLOCK_OFFSET))"
# Get the inode (or equivalent ID) for the file at that offset
FILE_INODE="$(ifind -d "$BAD_OFFSET" "$IMG_PATH")"
# Get the filename for the file at that offset (for the display/logging)
FILE_NAME="$(ffind -u "$IMG_PATH" "$FILE_INODE")"
# Get `stat` info for the file and a list of sectors it occupies
FILE_META="$(istat "$IMG_PATH" "$FILE_INODE")"
# Get the file's contents, just for the sake of completeness
FILE_DATA="$(icat "$IMG_PATH" "$FILE_INODE")"
此外,它可以用作库...但是,由于它是在通用公共许可证下授权的,而该许可证与 GPL 不兼容,因此您可能需要使用他们提供的工具之一将所有这些信息转储为机器可读的格式,这样您就可以像 Linux 档案管理器一样将其作为子进程调用unrar
。
它支持两种机器可读的输出格式:
- 数字取证 XML,通过
fiwalk
命令(提到这里和这里但不包含在*buntu 14.04sleuthkit
软件包中。) - SQLite 数据库,通过
tsk_loaddb /path/to/image
(它将通过粘贴.db
到输入路径的末尾来生成数据库文件名,但您可以使用来更改目标目录-d target_dir
。)
过去几年来,SQLite 架构已多次更改以适应新功能,因此只需检查Tsk_loaddb在他们的 wiki 页面上查看您正在使用的 TSK 版本的架构描述。
至于支持的图像格式,我从 *buntu 14.04 存储库复制的版本支持以下格式:
ssokolow@monolith ~ % lsb_release -i -r -c
Distributor ID: Ubuntu
Release: 14.04
Codename: trusty
ssokolow@monolith ~ % ifind -V
The Sleuth Kit ver 3.2.3
ssokolow@monolith ~ % ifind -i list
Supported image format types:
raw (Single raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness format (encase))
split (Split raw files)
ssokolow@monolith ~ % ifind -f list
Supported file system types:
ntfs (NTFS)
fat (FAT (Auto Detection))
ext (ExtX (Auto Detection))
iso9660 (ISO9660 CD)
hfs (HFS+)
ufs (UFS (Auto Detection))
raw (Raw Data)
swap (Swap Space)
fat12 (FAT12)
fat16 (FAT16)
fat32 (FAT32)
ext2 (Ext2)
ext3 (Ext3)
ufs1 (UFS1)
ufs2 (UFS2)
维基百科和 Sleuth Kit wiki 指出外置FAT从那时起,就添加了对 ext4 和 YAFFS2 的支持,但是UDF 仍然是一个开放的功能请求截至 2018-04-24。