对Linux的引导扇区的认识

根据对PC BIOS 的了解,引导时首先要读入引导扇区。

我安装完毕Oracle Enterprise Linux x86_64 5.3以后,用  fdisk -l 看,可以看到:

[root@localhost ~]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1566 12474472+ 8e Linux LVM

可以看到分了两个区。

根据如下的说法,一个物理硬盘,最多可以分成四个区

(因为引导扇区512字节中。除了末尾两个字节为标志位,留下64个字节给分区表,一个分区表16个字节,一共可以容纳4个)

用如下命令读取其引导扇区的内容:

dd if=/dev/sda  of=/root/bootsector bs=512 count=1

把读出来的二进制文件拿出来看,内容如下:

EB,48,90,10,8E,D0,BC,00,B0,B8,00,00,8E,D8,8E,C0,

FB,BE,00,7C,BF,00,06,B9,00,02,F3,A4,EA,21,06,00,

00,BE,BE,07,38,04,75,0B,83,C6,10,81,FE,FE,07,75,

F3,EB,16,B4,02,B0,01,BB,00,7C,B2,80,8A,74,03,02,

80,00,00,80,41,FC,02,00,00,08,FA,90,90,F6,C2,80,

75,02,B2,80,EA,59,7C,00,00,31,C0,8E,D8,8E,D0,BC,

00,20,FB,A0,40,7C,3C,FF,74,02,88,C2,52,BE,7F,7D,

E8,34,01,F6,C2,80,74,54,B4,41,BB,AA,55,CD,13,5A,

52,72,49,81,FB,55,AA,75,43,A0,41,7C,84,C0,75,05,

83,E1,01,74,37,66,8B,4C,10,BE,05,7C,C6,44,FF,01,

66,8B,1E,44,7C,C7,04,10,00,C7,44,02,01,00,66,89,

5C,08,C7,44,06,00,70,66,31,C0,89,44,04,66,89,44,

0C,B4,42,CD,13,72,05,BB,00,70,EB,7D,B4,08,CD,13,

73,0A,F6,C2,80,0F,84,EA,00,E9,8D,00,BE,05,7C,C6,

44,FF,00,66,31,C0,88,F0,40,66,89,44,04,31,D2,88,

CA,C1,E2,02,88,E8,88,F4,40,89,44,08,31,C0,88,D0,

C0,E8,02,66,89,04,66,A1,44,7C,66,31,D2,66,F7,34,

88,54,0A,66,31,D2,66,F7,74,04,88,54,0B,89,44,0C,

3B,44,08,7D,3C,8A,54,0D,C0,E2,06,8A,4C,0A,FE,C1,

08,D1,8A,6C,0C,5A,8A,74,0B,BB,00,70,8E,C3,31,DB,

B8,01,02,CD,13,72,2A,8C,C3,8E,06,48,7C,60,1E,B9,

00,01,8E,DB,31,F6,31,FF,FC,F3,A5,1F,61,FF,26,42,

7C,BE,85,7D,E8,40,00,EB,0E,BE,8A,7D,E8,38,00,EB,

06,BE,94,7D,E8,30,00,BE,99,7D,E8,2A,00,EB,FE,47,

52,55,42,20,00,47,65,6F,6D,00,48,61,72,64,20,44,

69,73,6B,00,52,65,61,64,00,20,45,72,72,6F,72,00,

BB,01,00,B4,0E,CD,10,AC,3C,00,75,F4,C3,00,00,00,

00,00,00,00,00,00,00,00,43,D2,06,00,00,00,80,01,

01,00,83,FE,3F,0C,3F,00,00,00,8E,2F,03,00,00,00,

01,0D,8E,FE,FF,FF,CD,2F,03,00,D1,B0,7C,01,00,00,

00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,

00,00,00,00,00,00,00,00,00,00,00,00,00,00,55,AA,
                        80,01,

01,00,83,FE,3F,0C,3F,00,00,00,8E,2F,03,00,
是第一个分区表,第一个字节80表示是活动分区。就是这里的 /dev/sda1

                        00,00,

01,0D,8E,FE,FF,FF,CD,2F,03,00,D1,B0,7C,01,
是第二个分区,第一个字节 00表示是 非活动分区。就是这里的 /dev/sda2
参考:
http://www.docin.com/p-394748574.html

而 第 5 个字节,表达的是 分区类型:83 为Linux 分区,8e 为 Linux LVM 分区

如果我们把两个分区表的 第一个字节的80 和 00 互换改为:,
                         00,01,
01,00,83,FE,3F,0C,3F,00,00,00,8E,2F,03,00,80,00,

01,0D,8E,FE,FF,FF,CD,2F,03,00,D1,B0,7C,01,

然后把修改后的 bootsector 文件写回到引导扇区,
dd if=/bootector of=/dev/sda bs=512 count=1

再看fdisk -l ,会看到:

/dev/sda1 1 13 104391 83 Linux
/dev/sda2 * 14 1566 12474472+ 8e Linux LVM

可以看到 × 的位置发生了变化,* 就表示那个分区是活动的(就是有效的可引导分区)。

为了安全起见,应当再把 bootsector 的内容中 第一个字节的80 和 00 互换回来。
                         80,01,
01,00,83,FE,3F,0C,3F,00,00,00,8E,2F,03,00,00,00,

01,0D,8E,FE,FF,FF,CD,2F,03,00,D1,B0,7C,01,
dd if=/bootector of=/dev/sda bs=512 count=1

你可能感兴趣的:(linux)