FAT32文件系统实践

  • Post author:
  • Post category:其他


== FAT32 ==

FAT32文件系统有自己的格式,其中比较重要的概念包括:

=== MBR ===

MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令(<font color=red>在我们的操作中BIOS负责LOAD内核,并且跳转到内核加载地址,并不涉及硬盘的MBR,MBR可能与GRUB有关</font>)。将系统的控制权交由mbr来执行。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字 节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。

在Linux下使用dd命令获得MBR

root@llc-loongson:~# fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes

255 heads, 63 sectors/track, 19457 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xe467e467

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        3901    31334751    c  W95 FAT32 (LBA)

/dev/sda2            3902        9125    41961780    7  HPFS/NTFS

/dev/sda3            9126       17001    63263970    7  HPFS/NTFS

/dev/sda4           17002       19458    19729409    5  Extended

/dev/sda5           17002       19215    17776640   83  Linux

/dev/sda6           19215       19458     1951744   82  Linux swap / Solaris

root@llc-loongson:~# dd if=/dev/sda of=./MBR count=1 bs=512

记录了1+0 的读入

记录了1+0 的写出

512字节(512 B)已复制,0.000296544 秒,1.7 MB/秒

然后使用vim查看MBR

root@llc-loongson:~# vim MBR

在vim中使用底行模式

:%!xxd查看二进制

由于前446字节为引导程序,从1BEH开始为DPT(分区表)

00001b0: cd10 ac3c 0075 f4c3 67e4 67e4 0000 8001  …<.u..g.g…..

00001c0: 0100 0cfe ffff 3f00 0000 be42 bc03 0000  ……?….B….

00001d0: c1ff 07fe ffff fd42 bc03 6892 0005 0000  …….B..h…..

00001e0: c1ff 07fe ffff 65d5 bc08 c4a9 8a07 00fe  ……e………

00001f0: ffff 05fe ffff fe7f 4710 0218 5a02 55aa  ……..G…Z.U.

字节位移


字段长度





字段名和定义

0x01BE


BYTE


0x80


引导指示符(Boot Indicator)   指明该分区是否是活动分区。(0x80表示活动,0x00表示非活动)

0x01BF


BYTE


0x01


开始磁头(Starting Head)

0x01C0


6位


0x01


开始扇区(Starting Sector) 只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用

0x01C1


10位


0x00


开始柱面(Starting Cylinder)   除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023

0x01C2


BYTE


0x0c


系统ID(System ID) 定义了分区的类型,详细定义,请参阅图4

0x01C3


BYTE


0xFE


结束磁头(Ending Head)

0x01C4


6位


0xFF


结束扇区(Ending Sector)     只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用

0x01C5


10位


0x1FF


结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023

0x01C6


DWORD


0x0000003F  相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算

0x01CA


DWORD


0x03BC42B



版权声明:本文为liulichao_no1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。