FAT 文件系统分为 5 个部分:
MBR(Main Boot Record 主引导记录区) 位于整个硬盘的 0磁道 0柱面 1扇区,占用 512 字节。
DBR(Dos Boot Record 操作系统引导记录区)通常位于硬盘的 0磁道 1柱面 1扇区,是操作系统可以直接访问的第一个扇区。
它包括一个引导程序和一个被称为 BPB(BIOS parameter) 的本分区参数记录表。
FAT(File Allocation Table 文件分配表)。同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,往往会分成若干段,像一条链子一样存放,这种存储方式称为文件的链式存储。
硬盘上的文件常常要进行创建、删除、增长和缩短等操作,这样的操作做的越多,硬盘上的文件就可能被分得越零碎。但是硬盘上会保存着 段与段之间的连接信息(即 FAT),故操作系统可以准确的找到各段的位置并正确读出。
这种以簇为单位的存储方式有一定的缺陷:每个文件的最后一簇都有可能有未被完全利用的空间(Slack 空间)。
为了实现文件的链式存储,硬盘上记录着 哪些簇已经被文件占用,且必须为每个已经占用的簇致命存储后继内容的下一个簇的簇号,对于一个文件的最后一簇,则要指明本簇无后继簇。这些信息都由 FAT 来记录,表中的每个项 记录 1 个簇的信息。由于 FAT 很重要,所以在原 FAT 的后面会再建一个同样的 FAT 做备份。
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
DATA(数据)区,是真正意义上数据存储的地方。位于DIR区之后,占据硬盘上的大部分数据空间。
Windows 文件删除分为逻辑删除和物理删除。
当文件被物理删除时,会将该文件的目录条目中的文件名的第一个字符替换成删除标记:E5;其后面的簇都会被标记成未被分配,从而使操作系统无法识别该文件,但是磁盘中的文件数据依然还在。
当执行“删除文件”操作时,系统做了两件事:
系统在文件分配表(FAT)中相应位置检测到 0 就认为该文件簇处于空闲状态,可以写入其他文件,而实际上硬盘的数据并没有被删除,除非新的数据被写进那些扇区,才会把原来的数据覆盖,从而真正删除。
所以在 Windows 中,删除文件可以说仅仅只改变了某些状态。
如果文件删除后,某些存放文件内容的簇被重新分配使用,这将可能导致无法使用文件的目录信息来恢复数据。但是存放文件内容的簇不一定完全被分配到,所以 某些残余的碎片数据 可能该存在。虽然文件的目录数据被破坏后,无法确定哪个数据簇原本属于哪个文件,但是各种类型的文件都有一定的特征,所以可以依据不同文件类型的数据特征来从数据区直接恢复文件数据。
数据恢复 还包括分区表和 BPB 的恢复 等内容。
文件管理是通过目录来完成的,而目录是建立在分区基础上的,一个物理磁盘通过分区表划分成为若干个逻辑分区,分区表损坏就不能定位逻辑盘。但是每个分区的开头都有其特征,根据这些特征可以恢复分区表,重新分区后也能找到先前的分区。
组成 Linux 文件系统的数据通常分为两大部分:文件的信息和文件的数据。
文件的数据存储在磁盘上的数据块中;
数据块的状态(空闲/已分配)信息存储在数据块位图中;
通过索引文件、目录文件等元数据,文件系统才能将一个或多个数据块中的数据组合成抽象的文件。
① 首先将索引节点和文件所占用的数据块的状态信息标记为空闲
② 然后增大目录文件中相应目录项的前一项中记录项长度的值
③ Linux 文件的删除过程中 知识释放了索引节点表和所占用的数据块,只要该数据块没有被覆盖,其数据还是存在于磁盘中的
若不小心删除了某个文件,并且知道该文件的部分内容,首先要停止该文件所在分区上的所有 I/O 操作:可以卸载该分区、或者是系统处于单用户状态。
可以将该文件所在分区以只读方式重新挂载:
mount -o ro -n /dev/hda /mnt
下面假设是 /etc/passwd 被删除了,演示恢复步骤:
① 查看挂载情况
df
② 使用 dd 命令将 /etc/passwd 所在分区进行拷贝到一个文件中
dd if=/dev/xxx of of=/home/test.dsk
③ 使用 cat 命令和 grep 命令来查找 /etc/passwd 文件中所知道的文件内容
cat -n test.dsk | grep "root:x:0:1"
④ 使用 grep -A
命令来查找 “root❌0:1” 该行和后面 10 行的内容,并重定向输出
grep -A 10 "root:x:0:1" test.dsk > passwd
⑤ 这样数据就恢复到了 passwd 文件中
文件被删除后,文件内容一直保留在磁盘上知道文件被覆盖为止。一旦文件被删除,被删除文件所在的数据块成为未分配空间的一部分。可以通过在未分配空间中寻找文件头的方法来手工恢复文件。
用这种方法必须满足以下 3 个条件:
假设有一个含有被删除的 .jpg 文件的磁盘映像,演示恢复步骤
① 首先通过查找字符 “JFIF” 来确定每个 .jpg 文件的第一个扇区
(JFIF 是 JPG 文件的标注信息,且 JPG 文件的前三个开始字符是 ffd8ff)
② 假设得出被删除文件的起始扇区地址是 0x5e400;将其转换成 10 进制数为 386048;再除以每个扇区的字节数(假设为 512B),即 386048 / 512 = 754.
则 754 就是该文件的起始扇区号
③ 在大多数情况下不知道被删除文件的确切长度,所以只能猜测。
如果猜少了,则只能恢复部分文件,图像就不完整;
如果猜多了,则依旧可以显示完整的图像。
④ 利用 dd
命令来恢复被删除的文件
dd 命令的输入 if 是我们准备好的 磁盘映像文件输出文件则是要恢复出的图像文件。
指定开始扇区号为 754,文件大小猜测为 15KB(30个扇区)
dd if=image.dd of=recover.jpg skip=754 count=30