关于Linux磁盘分区与双系统

Linux是一个很大的东西,而且稍微按照鸟哥的书做点网络上的扩展就会有很多很多的东西,常常会使得自己迷失,所以我认为在学习的时候,还是应该有自己的目标,写出关于目标的博客,不要什么都讲,却什么都不精确。

背景:家里电脑坏了,就重装系统,既然重装系统,就顺便装了win7+ubuntu双系统,既然重装系统就离不开:

MBR、grub2、硬盘分区、磁盘连接方式与装置文件名之类的东西。

关于装双系统的电脑首先,也是最重要的是:先装windows系统,再装linux系统。

Linux下硬件与系统文件的映射关系:

在Linux系统中,每个硬件都被当做了一个文件来对待。IDE接口(Integrated Drive Electronics)的硬件都被命名为/dev/sd[a-p]:

root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8, 0 6月  12 07:34 sda
brw-rw---- 1 root disk 8, 1 6月  12 07:34 sda1
brw-rw---- 1 root disk 8, 2 6月  12 07:34 sda2
brw-rw---- 1 root disk 8, 5 6月  12 07:34 sda5
brw-rw---- 1 root disk 8, 6 6月  12 07:34 sda6

注:IDE接口是把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。模式包括PIO、DMA。

注:由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘装置文件名都是/dev/sd[a-p]格式。(IDE、SATA、SCSI、FC、SAS简介与区别)

注:sd*都是块设备,文件属性是“b”开头,在Ubuntu中字体颜色是黄色。黄色字体的还有字符设备。

当我把自己的U盘插入:

root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8,  0 6月  12 07:34 sda
brw-rw---- 1 root disk 8,  1 6月  12 07:34 sda1
brw-rw---- 1 root disk 8,  2 6月  12 07:34 sda2
brw-rw---- 1 root disk 8,  5 6月  12 07:34 sda5
brw-rw---- 1 root disk 8,  6 6月  12 07:34 sda6
brw-rw---- 1 root disk 8, 16 6月  12 13:30 sdb
brw-rw---- 1 root disk 8, 17 6月  12 13:30 sdb1

很明显,我的U盘是sdb 和sdb1。

另外,其他硬件在Linux下的文件名:

/dev/vd[a-p]    用于虚拟机内

/dev/fd[0-7]     fd:file description文件描述符,在/dev中描述软盘驱动器

/dev/lp[0-2]     25针打印机(我的电脑上没有打印机,无法实)

/dev/input/mice 和/dev/psaux   鼠标(鸟哥书上是/dev/input/mouse[0-15])

root@ssozh-Inspiron-530:/dev# ll /dev/input/mice
crw-rw---- 1 root input 13, 63 6月  12 07:34 /dev/input/mice
注:其他关于设备文件/dev/*详解、查询(包括字符设备和块设备区别)

双系统与磁盘分区

MSDOS(MBR)与GPT磁盘分区表(partition table)

Windows的MBR(master boot record主引导记录)放在第一个扇区。

这个扇区通常大小为512Bytes,包括两个数据:

MBR:可以安装开机管理程序的地方,有446bytes.

分区表(partition table):记录整个硬盘分区的状态,有64bytes。

由于分区表所在的区块只有64bytes容量,因此最多仅能有四组记录区(每个16bytes),每组记录区记录了该区段的起始和结束的磁柱号码。而所谓的分区只是对分区表进行了分区,分区槽的最小单位是磁柱。由于第一个扇区所在的分区表只能记录四个数据,所以如果想多分区,我们可以利用额外的扇区来记录更多的分区信息。

具体而言,sda1 sda2 sda3 sda4这前四个号码都是保留给Primary或extended用的。(这个也叫主分区,放在MBR)

而延伸分区持续切割出来的分区槽叫做逻辑分区,用sda5 sda6....表示。

说这么多有什么用呢?

1、放置问题:假设你已经安装了win7的CDEF盘,作为四个主分区,然后企图把Linux放在F盘中,这个时候Linux系统是win7系统中主分区的一部分(即Linux是win7的一个硬盘了),这样是没有办法使用双系统的,因为MBR中只有一个win7和4个主分区。正确的做法是,留出至少一个主分区给Linux(就是删除一个添加卷)把空闲的磁盘装入Linux系统,并把MBR写入。

2、顺序问题:对于第一磁盘来说,先安装win7系统,然后给他分主分区(C,D,E盘)。那么Linux就只有一个分区了,这个时候这个分区应该是extended。从而构成P+P+P+E的形式,E=Linux的全部分区。但是如果你把“/”这个更目录填入了主分区则直接变成了p+p+p+p的形式,那么即使剩下了磁盘容量,也无法再分区,这些剩余容量会被浪费。所以正确的分发,是先给/home /boot进行逻辑分区,把剩下的这个分区变成extended,最后再进行“/”更目录分区。

MBR的局限性:

1、操作系统无法抓取到2.2T以上的磁盘容量;2、MBR仅有一个区块,若被破坏后,经常无法或难以恢复;3、MBR内只能存放446bytes,无法容纳较多程序代码。

因此引入了GPT(GUID partition table)

过去一个扇区大小是512bytes,现在已经有4K,为了兼容以前的磁盘,因此在扇区的定义上面,大多会使用逻辑区块地址(logical block address,LBA)来处理。GPT将所有区块以此LBA(512bytes)来规划,从第一个LBA0到LBA33,来记录分区信息。整个磁盘的后33个LBA也拿来做备份!详细结构如下:

LBA0(MBR相容块),LBA1(GPT表头记录,记录分区表本身大小和位置,且放置CRC32验证码)LBA2-33(实际记录分区信息处)

具体开机情况:开机-->BIOS(找到可以开机的硬盘)-->MBR(内含开机管理程序,load核心文件)

【-->开机管理程序(boot loader)-->核心文件】

注:如果是GPT格式的话,BIOS是可以从LBA0读取开机管理程序,但是如果开机管理程序不懂GPT的话,就无法开机(如XP系统)

boot loader:1、提供选单,用户可以选择不同的开机项目,这也是多重引导的重要功能;

       2、载入核心文件,直接指向可开机的程序区段来开始操作系统;

         3、转交其他loader,将开机管理功能转交给其他Loader负责(重要)。

每个分区槽都有自己的启动扇区(boot sector);图中的系统槽为第一及第二分区槽,实际可开机的核心文件是放置到各分区槽内的;loader只会认识自己的系统槽内的可开机核心文件以及其他loader;Loader可直接指向或者是间接将管理权转给另外一个管理程序。

之所以先安装Windows再安装Linux是因为Linux可以将开机管理程序安装在MBR或者其他分区槽的启动扇区(boot sector)且Linux可以手动选单,即 你可以在Linux的boot Loader里面加入Windows开机选项。但是Windows会在安装的时候直接覆盖掉MBR以及自己所在分区槽的启动扇区,你没有选择的机会。

即后装的系统覆盖前面的MBR,而后装的linux在MBR中提供了Windows开机选项,但是Windows则不会提供,所以要先装Windows。

而Linux在MBR中的boot Loader是需要回到/boot目录下的grub读取配置文件来找到Windows。

所以对双系统来讲,如果删除了(格式化了)Linux从而导致无法直接进入Windows(其实你可以从BIOS进入或者大白菜PE进入),你需要再次进入Windows系统病使用MBRfix重建mbr。

猜你喜欢

转载自www.cnblogs.com/SsoZhNO-1/p/9173721.html