gpt4 book ai didi

hard-drive - 查找硬盘驱动器扇区占用文件

转载 作者:行者123 更新时间:2023-12-04 13:44:44 27 4
gpt4 key购买 nike

我正在寻找一种很好的简单方法来查找哪些扇区占用给定文件。我的语言偏好是 C#。

从我的 A-Level Computing 类(class)中,我了解到硬盘驱动器在磁盘的前几 KB 上有一个查找表。在此表中,每个文件都有一个链接列表,详细说明了该文件占用的扇区。所以我希望有一种方便的方法可以在此表中查找某个文件并查看它占用的扇区。

我试过谷歌,但我没有发现任何有用的东西。也许我没有在寻找正确的东西,但我根本找不到任何东西。

任何帮助表示赞赏,谢谢。

最佳答案

关于驱动器

操作系统不再直接访问现代硬盘驱动器的物理几何结构。早期的硬盘驱动器非常简单,可以根据它们的物理结构、圆柱头扇区来寻址它们。现代驱动器要复杂得多,并且使用像 zone bit recording 这样的系统。 ,其中并非所有磁道都具有相同数量的扇区。根据它们的物理几何形状来解决它们不再实用。

从 fdisk 手册页:

If possible, fdisk will obtain the disk geometry automatically. This is not necessarily the physical disk geometry (indeed, modern disks do not really have anything like a physical geometry, certainly not something that can be described in simplistic Cylinders/Heads/Sectors form)



为了解决这个问题,现代驱动器使用逻辑块寻址来解决,这是操作系统所知道的。 LBA 是一种寻址方案,其中整个磁盘表示为一组线性块,每个块都是统一的字节数(通常为 512 或更大)。

关于文件

为了了解"file"在磁盘上的位置(在 LBA 级别),您需要了解文件是什么。这将取决于您使用的文件系统。在 Unix 风格的文件系统中,有一个称为 inode 的结构,它描述了一个文件。 inode 存储文件具有的所有属性并指向实际数据的 LBA 位置。

Ubuntu 示例

这是查找文件数据的 LBA 位置的示例。

首先获取文件的 inode 编号
$ ls -i  
659908 test.txt

运行文件系统调试器。 “yourPartition”类似于 sda1,它是您的文件系统所在的分区。
$sudo debugfs /dev/yourPartition 
debugfs: stat <659908>

Inode: 659908 Type: regular Mode: 0644 Flags: 0x80000
Generation: 3039230668 Version: 0x00000000:00000001
...
...
Size of extra inode fields: 28
EXTENTS:
(0): 266301

“EXTENTS”下的数字 266301 是文件所在文件系统中的逻辑块。如果您的文件很大,则会列出多个块。可能有一种更简单的方法来获得那个号码,我找不到。

为了验证我们有正确的块,使用 dd 从磁盘读取该块。要找出您的文件系统块大小,请使用 dumpe2fs。
dumpe2fs -h /dev/yourPartition | grep "Block size"

然后将您的块大小放在 ibs= 参数中,并将范围逻辑块放在 skip= 参数中,然后像这样运行 dd:
sudo dd if=/dev/yourPartition of=success.txt ibs=4096 count=1 skip=266301

success.txt 现在应该包含原始文件的内容。

关于hard-drive - 查找硬盘驱动器扇区占用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com