1.
sun@ubuntu:/tmp$ sudo dd if=/dev/sdb1 of=dbr bs=512 count=2
硬盘分区结构信息
偏移
|
长度(字节)
|
意义
|
00H
|
1
|
分区状态:00-->非活动分区;80--> 活动分区;
其它数值没有意义
|
01H
|
1
|
分区起始磁头号(HEAD),用到全部8位
|
02H
|
2
|
分区起始扇区号(SECTOR),占据02H的位0-5;
该分区的起始磁柱号(CYLINDER),占据
02H的位6-7和03H的全部8位
|
04H
|
1
|
文件系统标志位
|
05H
|
1
|
分区结束磁头号(HEAD),用到全部8位
|
06H
|
2
|
分区结束扇区号(SECTOR),占据06H的位0-5;
该分区的结束磁柱号(CYLINDER),占据
06H的位6-7和07H的全部8位
|
08H
|
4
|
分区起始相对扇区号
|
0CH
|
4
|
分区总的扇区数
|
-
第一个分区是VFAT
-
[00] --> 00
-
[01] --> 0x21起始磁头号
-
[02-03] --> 0x0003
-
[04] --> 0x83
-
[05] --> 0xcb
-
[06-07] --> 0x022a=554
-
[08] --> 0x0800=2048 --> 起始扇区号
-
[0C] --> 0xa000=40960 --> 分区总的扇区数 (40960*512/1024/1024=20M 正确)
-
-
第二个分区是EXT3
-
[00] --> 00
-
[01] --> 0x21起始磁头号
-
[02-03] --> 0x0
-
[04] --> 0x83
-
[05] --> 0xcb
-
[06-07] --> 0x022a=554
-
[08] --> 0x0800=2048 --> 起始扇区号
-
[0C] --> 0xa000=40960 --> 分区总的扇区数 (40960*512/1024/1024=20M 正确)
一、利用磁盘镜像测试fat32
1.1 步骤如下:
-
//创建一个1024M的文件
-
sun@ubuntu:/work/6410/test/fat32$ dd if=/dev/zero of=fatimg bs=1M count=1024
-
-
//分区
-
sun@ubuntu:/work/6410/test/fat32$ sudo fdisk ./fatimg
-
//查看分区
-
sun@ubuntu:/work/6410/test/fat32$ sudo fdisk -l ./fatimg
-
-
Disk ./fatimg: 1073 MB, 1073741824 bytes
-
139 heads, 8 sectors/track, 1885 cylinders, total 2097152 sectors
-
Units = sectors of 1 * 512 = 512 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
-
Disk identifier: 0xe79e9e10
-
-
Device Boot Start End Blocks Id System
-
./fatimg1 2048 2097151 1047552 83 Linux
-
-
//将镜像与loop设备关联
-
sun@ubuntu:/work/6410/test/fat32$ sudo losetup -o 1048576 /dev/loop0 fatimg
-
注意: losetup 中的-o是跳过多少个字节: 1048576=2048*512 (2048是从fdisk中看出)
-
-
//格式化
-
sun@ubuntu:/work/6410/test/fat32$ sudo mkfs.vfat /dev/loop0
-
-
//查看fat32分区表
-
sun@ubuntu:/work/6410/test/fat32$ sudo dd if=/dev/loop0 of=fat bs=512 count=5000
-
-
//挂载
-
sun@ubuntu:/work/6410/test/fat32$ sudo mount /dev/loop0 /mnt/test
1.2 查看DBR
-
【1】0x00~0x02:3B, 跳转指令
-
【2】0x03~0x0A:8B, 文件系统标志和版本号,这里为 mkdosfs
-
【3】0x0B~0x0C:2B, 每扇区字节数,(02 00)=512B
-
【4】0x0D~0x0D:1B, 每簇扇区数,8(08)
-
【5】0x0E~0x0F:2B, 保留扇区数,(2000)32个扇区=0x4000
-
【6】0x10~0x10:1B, FAT 表个数,2
-
【7】0x11~0x12:2B, 根目录最多可容纳的目录项数,FAT12/16(为512), FAT32不使用此处值,置 0
-
【8】0x13~0x14:2B, 扇区总数,小于32MB 时使用,超过 32MB 时使用0x20~0x23处的4字节
-
【9】0x15~0x15:1B, 介质描述符,0xF8 表示本地硬盘
-
【10】0x16~0x17:2B, 每个 FAT 表的大小扇区数(FAT12/16 使用,FAT32 不使用此处,置 0)
-
【11】0x18~0x19:2B, 每磁道扇区数,(2000)=32个
-
【12】0x1A~0x1B:2B, 磁头数, (4000)=64个
-
【13】0x1C~0x1F:4B, 分区前已使用扇区数, (00000 000)=0个
-
【14】0x20~0x23:4B, 文件系统大小扇区数, (00f8 1f00)=1ff800=1023M
-
【15】0x24~0x27:4B, 每个 FAT 表的大小扇区数, (0008 0000)=0800=2048*512=0x100000
-
【16】0x28~0x29:2B, 标记
-
【17】0x2A~0x2B:2B, 版本号
-
【18】0x2C~0x2F:4B, 根目录簇号,(0200 0000)=2
-
【19】0x30~0x31:2B, FSINFO(文件系统信息扇区)扇区号,1, 该扇区为操作系统提供关于空簇总数及下一可用簇的信息
-
【20】0x32~0x33:2B, 备份引导扇区的位置,6备份引导扇区总是位于文件系统的 6 号扇区
-
【21】0x34~0x3F:12B, 未使用
-
【22】0x40~0x40:1B, BIOS INT 13H 设备号,0x80
-
【23】0x41~0x41:1B, 未用
-
【24】0x42~0x42:1B, 扩展引导标志0x29
-
【25】0x43~0x46:1B, 卷序列号通常为一个随机值
-
【26】0x47~0x51:11B, 卷标(ASCII 码),如果建立文件系统的时候指定了卷标,会保存在此
-
【27】0x52~0x59:8B, 文件系统格式的 ASCII 码,FAT32
-
【28】0x5A~0x1FD:410B, 未使用该部分没有明确的用途
-
【29】0x1FE~0x1FF:签名标志“55 AA”
1.3 查看 FSINFO
-
【1】0x200~0x203: 4B, 扩展引导标志“52526141”
-
【2】0x204~0x3E3:480B, 未使用,全部置 0
-
【3】0x3E4~0x3E7: 4B, FSINFO 签名“72724161”
-
【4】0x3E8~0x3EB: 4B, 文件系统的空簇数, (fafc)=0300
-
【5】0x3EC~0x3EF: 4B, 下一可用簇号,(0300 0000)=3,第3个簇开始
-
【6】0x3F0~0x3FD: 14B, 未使用
-
【7】0x3FE~0x3FF: 2B, “55 AA”标志
//装入第一个FAT表扇区号到FirstFATSector 中
arg->FirstFATSector=lb2bb((bpb->BPB_RsvdSecCnt) ,2)+arg->BPB_Sector_No;
0 reserved--> 0x4000 FAT1 -->0x104000FAT2 -->0x204000 root_dir --->
未写入任何东东之前的分区表 0x4000开始
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f 0000 0000 ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
加入文件之后:
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f ffff ff0f ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
//第3个簇变成 ffff ff0f, 只占用了一个簇
数据区的开始: 023b000
阅读(1310) | 评论(0) | 转发(0) |