Linux文件系统分析之一(工具与方法)

时间:2022-08-15 20:10:12

这里的分析有别于一般书上讲的Linux文件系统分析,主要区别是:这里的分析与其说是文件系统分析倒不如说是Linux磁盘映象的分析,

首先从获取磁盘映象开始,然后分析磁盘映象的结构,内核文件系统部分的代码无非就是对磁盘映象的管理罢了。
    依据读源代码的体会,Linux文件系统实现可以看作三个部分:用户眼中的文件系统,内存中的文件系统,磁盘上的文件系统。用户眼中

的文件系统是指open,read等系统调用的实现以及目录树状结构的实现,内存中的文件系统是指缓冲管理,VFS等开机mount后在内存中出现的

文件系统,而磁盘上的文件系统就是指磁盘映象。这里的分析主要着重在第三部分,即磁盘映象。
    首先就是磁盘映象的获取,最简单的方法就是使用dd命令:dd if=/dev/hda of=/home/lw/hda.dd bs=2k。这个命令把hda上的文件系统磁

盘映象全部复制到hda.dd文件中,这个命令执行需要的时间主要取决于hda磁盘的大小,bs参数表示每次读些的单元大小,一般设为2k,8k都

行,效率上会有些细微的区别。接下来就对hda.dd文件进行分析就可以了。由于这个文件一般都很大,二进制阅读工具运行起来会很慢,所以

最好还是建立一个软盘ext2文件系统,然后进行分析。当然还有其他的方法:直接拷贝虚拟机磁盘映象来分析。
    下面的分析是使用软盘上建立的文件系统,然后dd倒出来的rootimage文件来分析磁盘映象。让我们先来看看第一个扇区的内容
00000000h: EB 3C 90 4D 53 44 4F 53 35 2E 30 00 02 01 01 00 ; ?怣SDOS5.0.....
00000010h: 02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00 ; .?@.?.........
00000020h: 00 00 00 00 00 00 29 57 23 8D 0E 20 20 20 20 20 ; ......)W#?     
00000030h: 20 20 20 20 20 20 46 41 54 31 32 20 20 20 FA 33 ;       FAT12   ?
00000040h: C0 8E D0 BC 00 7C 16 07 BB 78 00 36 C5 37 1E 56 ; 缼屑.|..粁.6?.V
00000050h: 16 53 BF 3E 7C B9 0B 00 FC F3 A4 06 1F C6 45 FE ; .S?|?.?.艵?

00000060h: 0F 8B 0E 18 7C 88 4D F9 89 47 02 C7 07 3E 7C FB ; .?.|圡鶋G.?>|?

00000070h: CD 13 72 79 33 C0 39 06 13 7C 74 08 8B 0E 13 7C ; ?ry3?..|t.?.|
00000080h: 89 0E 20 7C A0 10 7C F7 26 16 7C 03 06 1C 7C 13 ; ? |?|?.|...|.
00000090h: 16 1E 7C 03 06 0E 7C 83 D2 00 A3 50 7C 89 16 52 ; ..|...|円.|?R
000000a0h: 7C A3 49 7C 89 16 4B 7C B8 20 00 F7 26 11 7C 8B ; ||?K|?.?.|?

000000b0h: 1E 0B 7C 03 C3 48 F7 F3 01 06 49 7C 83 16 4B 7C ; ..|.肏黧..I|?K|
000000c0h: 00 BB 00 05 8B 16 52 7C A1 50 7C E8 92 00 72 1D ; .?.?R||钂.r.
000000d0h: B0 01 E8 AC 00 72 16 8B FB B9 0B 00 BE E6 7D F3 ; ?璎.r.孄?.炬}?

000000e0h: A6 75 0A 8D 7F 20 B9 0B 00 F3 A6 74 18 BE 9E 7D ; .? ?.螃t.緸}
000000f0h: E8 5F 00 33 C0 CD 16 5E 1F 8F 04 8F 44 02 CD 19 ; 鑏.3劳.^.?廌.?
00000100h: 58 58 58 EB E8 8B 47 1A 48 48 8A 1E 0D 7C 32 FF ; XXX腓婫.HH?.|2?BR>00000110h: F7 E3 03 06 49 7C 13 16 4B 7C BB 00 07 B9 03 00 ; 縻..I|..K|?.?.
00000120h: 50 52 51 E8 3A 00 72 D8 B0 01 E8 54 00 59 5A 58 ; PRQ?.r匕.鑄.YZX
00000130h: 72 BB 05 01 00 83 D2 00 03 1E 0B 7C E2 E2 8A 2E ; r?..円....|忖?
00000140h: 15 7C 8A 16 24 7C 8B 1E 49 7C A1 4B 7C EA 00 00 ; .|?$|?I||?.
00000150h: 70 00 AC 0A C0 74 29 B4 0E BB 07 00 CD 10 EB F2 ; p.?纓)??.?腧
00000160h: 3B 16 18 7C 73 19 F7 36 18 7C FE C2 88 16 4F 7C ; ;..|s.?.|?O|
00000170h: 33 D2 F7 36 1A 7C 88 16 25 7C A3 4D 7C F8 C3 F9 ; 3吟6.|?%||?

00000180h: C3 B4 02 8B 16 4D 7C B1 06 D2 E6 0A 36 4F 7C 8B ; 么.?M|?益.6O|?

00000190h: CA 86 E9 8A 16 24 7C 8A 36 25 7C CD 13 C3 0D 0A ; 蕟閵.$|?%|??.
000001a0h: 4E 6F 6E 2D 53 79 73 74 65 6D 20 64 69 73 6B 20 ; Non-System disk 
000001b0h: 6F 72 20 64 69 73 6B 20 65 72 72 6F 72 0D 0A 52 ; or disk error..R
000001c0h: 65 70 6C 61 63 65 20 61 6E 64 20 70 72 65 73 73 ; eplace and press
000001d0h: 20 61 6E 79 20 6B 65 79 20 77 68 65 6E 20 72 65 ;  any key when re
000001e0h: 61 64 79 0D 0A 00 49 4F 20 20 20 20 20 20 53 59 ; ady...IO      SY
000001f0h: 53 4D 53 44 4F 53 20 20 20 53 59 53 00 00 55 AA ; SMSDOS   SYS..U
这个块称为引导块,注意最后的55AA就是许多书上讲Linux启动时所谓的引导标志了,没有其它的内容可以分析的了。
接下来,我将对这个磁盘映象一个扇区一个扇区地分析了。