【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
所有选项的介绍。