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 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

恢复低版本的FlashPlayer

做页游开发,经常会遇到一些很奇怪的问题。我最近就遇到一个问题:用户进入游戏,只显示游戏部分界面,chrome浏览器是正常的,就IE死活不行,而我自己的IE却又...

67730
来自专栏开发技术

spring-session实现分布式集群session的共享

  HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是我们把应用搭建成分布式的集群,然后利用LVS或...

15110
来自专栏坚毅的PHP

hbase问题总结

 1 java.io.IOException: java.io.IOException: java.lang.IllegalArgumentException:...

73860
来自专栏FreeBuf

利用Web查询文件(.iqy)有效钓鱼

几天前我在Casey Smith的twitter上看到了有关iqy文件的一些介绍,和大多数渗透测试人员或者技术狂热者一样我也在探寻它的价值。能够通过使用本地/可...

31560
来自专栏青玉伏案

iOS开发之使用XMPPFramework实现即时通信(一)

关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互...

236100
来自专栏Java架构师历程

ssh工作原理

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

16630
来自专栏小特工作室

Navi.Soft31.WinCE框架.开发手册(含下载地址)

1.概述 1.1应用场景 随着物联网的普及,越来越多的制造商对货品从原料配备,加工生产,销售出库等环节的要求和把控越来越高.在此情况之下,传统的ERP软件已经无...

21550
来自专栏C/C++基础

C++实现简易log日志系统

在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况。

1K20
来自专栏coding

Linux用户权限管理

35330
来自专栏惨绿少年

用户与磁盘

第1章 linux文件属性相关 1.1 linux文件属性 1.2 磁盘的使用过程 1、磁盘(房子) 2、分区(划分隔断) 3、格式化创建文件系统(装修) 4、...

28700

扫码关注云+社区

领取腾讯云代金券