专栏首页开发与安全win 7和Ubuntu 12.04 双系统下的磁盘分区问题

win 7和Ubuntu 12.04 双系统下的磁盘分区问题

断续学Linux以来就一直没完全搞清楚磁盘分区的问题,现在虽然还是不清楚,但应该有点思路了,且记下。

我装了双系统,首先看在win 7下看到的磁盘分区情况:

本来是只有恢复分区,保留分区,以及CDFG盘,中间的几个主分区都是讲未配置的空间在装ubuntu时进行划分的,奇怪的是不应该显示为主分区,关于这点有些常识的人都知道。下面抄录一段:  硬盘的第一个扇区有512字节,其中主要分为两个部分(其实是4个部分,另外两个先可以不管),一个是存放启动引导程序(Master Boot Recorder,MBR)的空间,大约446字节。另一个是存放硬盘分区表(Disk Partition table, DPT)的空间,大约64字节。电脑开机后都要来读取这个扇区,这是启动电脑所必须的。  MBR真是个令人头疼的问题,关键在于使用“MBR”这个词的时候含义不同,我总结了一下有以下几种含义:      1、指主引导程序,如linux下常用的GRUB,lilo等,当然还有win的主引导程序。      2、指硬盘第一扇区中存放主引导程序的446字节的硬盘空间。      3、指硬盘第一扇区,也就是上面说的全部512字节的硬盘空间,包括了存放主引导程序的446字节的空间和存放分区表的64字节空间。 磁盘分区遵从 P+P+P+P  或者P+P+P+E的原则 总之,我们给硬盘分区必须遵守以上的规则,这是通用的,不论是使用windows还是使用linux都必须遵守。总结一下就是:       硬盘的分区种类有三种:主分区、扩展分区和逻辑分区。       主分区和扩展分区的分区记录保存在硬盘的第一扇区内,而这个地方空间有限,最多只能保持4个分区记录。所以我们硬盘的主分区和扩展分区的数量之和不能超过4。       扩展分区不能直接使用,只能在扩展分区中再次划分为逻辑分区后它的硬盘空间才能使用。       逻辑分区是扩展分区的一部分,所有逻辑分区的分区记录保存在扩展分区的头部,而非保存在硬盘的第一扇区内。 这里需要澄清的是每一个分区都有一个引导块(boot block),而MBR每个盘只有一个。MBR是用来加载引导程序的,并不是用来加载操作系统的。当你开机时,BIOS内置的检测程序(已经固化)会进行开机自检并在MBR中(MASTER的MBR)中加载开机引导程序。(这也就不难理解为什么MBR总是在0号磁道,如果MBR老是变更位置,那我岂不是要修改BIOS程序),MBR中的开机引导程序将在你选择操作系统之后将在你安装操作系统的那个主分区将操作系统的某些核心文件加载到内存并创建相应的进程,进行一系列的初始化..... 如前所说,在进行分区时,每个分区就是一个文件系统,而每个文件系统开始位置的那个块就成为引导块。引导块是由 PC标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。

如硬盘MBR的代号为(hd0),硬盘的第一个分区的引导块代号(也是分区代号)为(hd0,0),硬盘的第一个逻辑分区的引导块为(hd0,4),等会可以结合下面信息来看。

IDE、SATA甚至U盘都可能被Grub识别为hd设备(Linux会区分hd、sd);注意,Grub 2中分区号从1开始,但磁盘号仍然是从0开始的。。在Grub2中,(hd0,0)该表示为(hd0,1)或(hd0,msdos1)这样的。 我们知道,一个硬盘可以有很多分区,但MBR分区表只有四项,怎么能突破这个限制呢?答案是扩展引导记录(EBR - Extended Boot Record),通过把MBR分区表中一项设为扩展分区(系统ID为0x05或0x0F),其分区表项指定扩展分区的起始位置和长度,在扩展分区最开始扇区放置另外一个分区表,一般称为扩展分区表。扩展分区表的第一项指定扩展分区目前的逻辑分区信息,如果还有更多的逻辑分区,扩展分区表的第二项指定下一个EBR的位置,否则为0。通过这种方式,一个硬盘上的分区数目就没有限制了。 现在先来看ubuntu下的情况:

系统没有识别恢复分区,将win 7的盘挂载进来,如下

可以看到保留分区在Linux标识为/dev/sda2,而那个30G的就是C盘啦,标识为/dev/sda3, DFG都算是逻辑分区,D盘为/dev/sda5.那/dev/sda1呢?看下图:

没错,/dev/sda1就是恢复分区啦,/dev/sda5~/dev/sda7为DFG盘,而刚才在上图没有显示的/dev/sda8也出来了,就是虚拟内存区swap.从/dev/sda8~/dev/sda13都是我为ubuntu划分的分区,重点来了,那/dev/sda4是什么呢?其实就是一个扩展分区!!从/dev/sda5~/dev/sda13都是从/dev/sda4中划分出来的逻辑分区!!,有个证据可以证明的是可以看到/dev/sda4的end 数值与/dev/sda13 end的数值是一样的!都是976771071,而start 与/dev/sda5的 start也相差无几。查了下/dev/sda4中system列的意思,如下: It simply states that your 4th partition is an extended partition instead of a primary partition. The partition info in stored in MBR. However, the MBR can only store four partition entries. If you want more than four partitions, you will have to create an extended parition and with in which you can create more. In your case partition 5,6,7,8....

下面再看grub 2启动引导: 因为我是先装的win 7再装ubuntu,可以肯定 的是grub 2 装在了MBR,而grub 2 的配置文件却是在/boot/grub/grub.cfg

cat查看文件,找到比较重要的一些:

首先需要说明的是grub 2(可以安装在MBR或者引导块)引导加载程序可以做到: 1.直接指定并取用核心文件,加载到主存储器中 2.将控制权移交给下一个加载程序 可以看出上图是第二种功能,第一个menu是win 7恢复的引导加载,这个引导程序安装在第一个分区(恢复分区)/dev/sda1的引导块(hd0,0),即

(hd0,msdos1), chainloader +1:Load the boot loader, `+1' indicates that GRUB should read one sector from the start of  the partition;

如果在系统启动时菜单点击此项时将引导进入系统恢复。

第二个menu是win 7启动的引导加载(可以看到前面的图有加 * 号表示bootloader),这个引导程序安装在第二个分区(保留分区)/dev/sda2的引导块

(hd0,1),即(hd0,msdos2),如果在系统启动时菜单点击此项时将引导进入系统启动,即去/dev/sda3(C盘)找到系统内核文件加载到内存启动。

注:windows会默认将引导写入MBR和引导块(在这里是sda2的引导块),而linux可以选择安装在某个地方,因为选择安装在了MBR所以将windows的

覆盖掉,但sda2引导块的windows引导程序还可以看出来,如果先安装Linux再装Windows那将完全被覆盖掉。

而第一种功能如下图:

我们知道启动内核是在/boot下面的,因为我在分区时把/boot独立出来, 所以完整的路径就是 (hd0,msdos10)/vmlinuz-... 或者(/dev/sda10)/vmlinuz-...

如果没有独立出来,则为set root='(hd0,msdos9)'    #如前面,根目录/  为/dev/sda9 完整的路径为 (hd0,msdos9)/boot/vmlinuz-... 或者(/dev/sda9)/boot/vmlinuz-...

备注:

----------------------------------------------------------------------------------------- 系统ID可能的值: 0x01          FAT12主分区或逻辑分区。 0x04          FAT16主分区或逻辑分区。 0x05          扩展分区。 0x06          BIGDOS FAT16主分区或逻辑分区。 0x07          NTFS主分区或逻辑分区。 0x0B          FAT32主分区或逻辑分区。 0x0C          使用扩展中断13的FAT32主分区或逻辑分区。 0x0E          使用扩展中断13的BIGDOS FAT16主分区或逻辑分区。 0x0F          使用扩展中断13的扩展分区。 0x12          EISA分区。 0x42          动态磁盘卷。 0x86          遗留的FT(Fault Tolerant) FAT16。 0x87          遗留的FT NTFS。 0x8B          遗留的FT FAT32。 0x8C          遗留的FT 使用扩展中断13的FAT32。 27 Windows RE hidden partition On MBR disks, type 0x27. On GPT disks, GUID: DE94BBA4-06D1-4D40-A16A-BFD50179D6AC. A hidden version of a Windows RE type 0x7 partition with NTFS. When this is installed, reboot and press F8 in order to boot into this Recovery Environment. 07 HPFS/NTFS/exFAT 07 OS/2 IFS (e.g. HPFS) IFS = Installable File System. The best known example is HPFS. OS/2 will only look at partitions with ID 7 for any installed IFS (that's why the EXT2.IFS packet includes a special "Linux partition filter" device driver to fool OS/2 into thinking Linux partitions have ID 07). (Kai Henningsen (kai@khms.westfalen.de))

07 Windows NT NTFS Filesystem introduced in Windows NT 3.1. It is rumoured that the Windows NT boot partition must be primary, and within the first 2 GB of the disk.

07 exFAT Extended FAT, a.k.a. FAT64. Available in Microsoft Windows since CE 6.0 and Vista SP1. Allows 32 MB clusters and very large disks and files.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Python socket 实现一个简单的http服务器(post 与get 的区别)、CGI、WSGI、MVC

    预备知识: 关于http 协议的基础请参考这里。 关于socket 基础函数请参考这里。 关于python 网络编程基础请参考这里。 一、python...

    s1mba
  • 数据结构:图的定义和术语总结

    一、图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。在图中...

    s1mba
  • 数据结构:队列的链式存储结构

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终...

    s1mba
  • 深入理解Linux磁盘的奥秘

    当我们想在系统里增加一块硬盘的时候,要做以下这四步工作: 对磁盘进行分区 对新建的分区进行格式化,目的是为了创建系统可用的文件系统 对新建的文件系统进行检验 将...

    大闲人柴毛毛
  • Kettle数据库连接中的集群与分片

    在“集群”标签,勾选“使用集群”,然后定义三个分区。这里的分区实际指的是数据库实例,需要指定自定义的分区ID,数据库实例的主机名(IP)、端口、数据库名、用户名...

    用户1148526
  • ClickHouse|MergeTree引擎之数据分区

    前面通过 一文了解ClickHouse 介绍过ClickHouse,特性,结构,使用场景。自己并未完全深入学习clickhouse,因为公司打算小范围使用Cl...

    用户1278550
  • 分布式数据库选型—数据水平拆分方案

    水平拆分的概念随着分布式数据库的推广已为大部分人熟知,分库分表、异构索引、小表广播、这些功能几乎是产品功能需求标配。然而有些客户使用分布式数据库后的体验不尽如意...

    用户1278550
  • Winodws安装系统时,通过安装磁盘进行分区

      今天使用一个系统盘安装的时候,很奇怪,分区总是分出来一个系统磁盘,一个MBR,剩下的只能分主分区。   这样就导致我在进行windows激活时,激活工具都找...

    用户1154259
  • MySQL支持哪几类分区表?

    Q 题目 MySQL支持哪几类分区表? A 答案 表分区是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却...

    企鹅号小编
  • oracle表空间表分区详解及oracle表分区查询使用方法(转+整理)

    此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5...

    用户1221057

扫码关注云+社区

领取腾讯云代金券