«

【Ubuntu】ntfscluster的所有选项

azurekiln 发布于 阅读:25 Linux操作系统基础


好的,那么现在要和大家讲的是ntfscluster这个程序,它的核心功能用于检查 NTFS 文件系统的内部结构。它不是一个日常文件管理工具,而是用于数据恢复、数字取证和学习 NTFS 文件系统工作原理的诊断工具。它直接读取设备(或磁盘镜像)的原始数据,绕过了常规的文件系统挂载点。

那么首先我们需要先了解两个概念,第一个是扇区 (Sector),就是硬盘物理存储的最小单位,通常是 512 字节或 4096 字节。第二个是簇 (Cluster),这是 NTFS 文件系统分配磁盘空间的最小单位,由一个或多个连续的扇区组成。例如,一个 4KB 的簇可能由 8 个 512 字节的扇区组成。文件数据就存放在这些簇里。

现在我们通过help选项 (1/10) 来列出ntfscluster的帮助文档,我们输入

ntfscluster --help

按回车。我们可以看到options这里除了最后两个有8个选项。

我们先来看选项中的倒数第二个选项,这是一个打印当前ntfscluster程序版本号信息的选项。

(2/10) 我们输入

ntfscluster --version

然后回车运行,可以看到当前ntfscluster的版本号为2013.1.13AR.1。

接下来我们先来看第一个选项,Print information about the volume (default),意思为打印有关卷的信息(默认)。这是最基本的功能,也是默认操作。如果你不加任何其他查找选项,ntfscluster 就会执行这个操作。它会显示卷的总大小、簇(Cluster)大小、扇区(Sector)大小、MFT(Master File Table, 主文件表) 的位置等核心信息。

第二个选项,Look for objects in this range of clusters,意思为查找指定簇范围内的文件/目录对象

第三个选项,Look for objects in this range of sectors,意思为查找指定扇区范围内的文件/目录对象

第四个选项,Show information about this inode,意思为显示这个索引节点的信息。在 NTFS 中,"inode" 指的是 MFT (Master File Table, 主文件表) 中的一个条目。MFT 是 NTFS 的核心,它包含了卷上每一个文件和目录的元数据(如文件名、大小、创建时间、以及数据在哪些簇上等)。每个文件/目录都有一个唯一的 MFT 条目编号。这个选项可以让你直接查询某个文件的元数据。

第五个选项,Show information about this file,意思为显示关于这个文件的信息。这是最常用的查找功能,它会先在文件系统中找到这个文件,然后显示它的 MFT 条目(inode)信息和它所占用的簇。

第六个选项,Use less caution,意思为使用更少的警告,也叫强制执行模式。添加该选项后,在有轻微错误的卷上继续尝试操作。

第七个选项,Less output,意思为更少的输出,也叫安静模式。用于控制输出信息的详细程度。

第八个选项,More output,意思为更多的输出,也叫详细或调试模式。和上个选项一样,控制输出信息的详细程度,使用它会显示更多关于 MFT 属性的底层细节。

那么以上涉及到对操作系统的操作,我们的命令都需要在管理员权限一下,所以我们在执行之前我们需要在命令最前面添加sudo以提升到管理员权限。

首先,我们先来创建一个100MB的空文件,我们输入

dd if=/dev/zero of=ntfs_test.img bs=1M count=100

然后回车,创建完成后我们将其格式化为NTFS格式,我们输入

sudo mkfs.ntfs -F ntfs_test.img

接下来我们先来创建一个虚拟挂载点目录,我们输入

sudo mkdir /mnt/ntfs_demo

然后回车,创建完抽我们使用loop设备挂载我们的虚拟磁盘镜像。我们输入

sudo mount -o loop ntfs_test.img /mnt/ntfs_demo

接着我们在挂载点里面创建文本文件和目录,我们输入

sudo mkdir /mnt/ntfs_demo/my_folder
sudo touch /mnt/ntfs_demo/empty_file.txt
echo "test" > /mnt/ntfs_demo/my_folder/test.txt

然后我们使用ls遍历列出文件,确保文件已经被创建。

ls -lR /mnt/ntfs_demo/

接着我们使用umount将虚拟磁盘取消挂载。

sudo umount /mnt/ntfs_demo

(3/10) 然后我们输入

sudo ntfscluster -i ntfs_test.img

回车后,我们可以看到镜像的基本信息。

接着我们使用-F选项 (4/10) ,来查询我们刚刚创建的test.txt文本文件。我们输入:

sudo ntfscluster -F my_folder/test.txt ntfs_test.img

我们可以看到ntfscluster成功找到了文件,我们可以看到数据属性(Attribute 0x80)是 Resident(驻留),意味着文件内容很小,被直接存储在MFT记录里了,没有单独占用簇。

接下来我们再来创建一个大一点的文件,看看非驻留数据是怎么样的。
我们重新挂载镜像文件到挂载点。

sudo mount -o loop ntfs_test.img /mnt/ntfs_demo

然后我们来创建一个大文件,我们输入

sudo dd if=/dev/urandom of=/mnt/ntfs_demo/large_file.bin bs=1K count=50

创建完成后,我们取消挂载虚拟磁盘。

sudo umount /mnt/ntfs_demo

我们再次用-F这个选项来查询一下刚创建的文件,我们输入

sudo ntfscluster -F large_file.bin ntfs_test.img

我们可以看到数据属性(Attribute 0x80)编程了Non-resident(非驻留),其中VCN(全称:Virtual Cluster Number),虚拟簇号,是文件逻辑上的簇编号,从文件开始算起。LCN(全称:Logical Cluster Number),逻辑簇号,是文件在磁盘上的物理位置(绝对簇号)。我们从图中就可以知道,刚创建的这个文件是从磁盘的第 13312 个簇开始,连续使用了 13 个簇。

接下来我们使用-c选项 (5/10) ,通过簇号来查找文件。

sudo ntfscluster -c 13313 ntfs_test.img


我们可以看到它也能够正确查找到文件,并且告诉了我们inode为67。接下来我们将13313改为13312,再次执行。

然后我们再来添加-v选项 (6/10) ,回车运行。

sudo ntfscluster -v -c 13312 ntfs_test.img

我们就能把整个扫描过程以消息的形式列出来。
然后我们将-v选项替换为-q选项 (7/10),再次回车运行。

sudo ntfscluster -q -c 13312 ntfs_test.img

可以看到相比较上面没有带-v-q选项的,少了一行搜索消息。

上面我们知道了inode是67,我们再来使用-I这个选项 (8/10),我们输入

sudo ntfscluster -I 67 ntfs_test.img

我们可以看到,同样可以查询到该大文件的信息。

接下来我们可以尝试使用-s指定扇区范围进行查询 (9/10),我们指定十万-二十万的区间,我们输入

sudo ntfscluster -s 100000-200000 ntfs_test.img

然后回车,我们可以看到列出了该区间有数据的 inode。

接下来,我们使用ntfsfix对镜像进行修复操作。

sudo ntfsfix ntfs_disk.img

我们再来运行

sudo ntfscluster ntfs_test.img

可以看到此时报错无法正常获取信息。

(10/10) 这个时候我们只需要添加-f选项。

sudo ntfscluster -f ntfs_test.img

再次回车运行,即可再次成功获取镜像信息。

以上就是关于ntfscluster所有选项的介绍。


扫描二维码,在手机上阅读
收藏
请先 登录 再评论