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专栏

2018年8月14日TCP网络编程及具体代码

静态文件?顾名思义,静态文件就是那些不会改变的文件,例如视频音乐,图片等类似的文件 NT平台:指的是windows NT操作系统,是windows在199...

714
来自专栏mini188

Http状态码之:301、302重定向

概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,...

3105
来自专栏自由而无用的灵魂的碎碎念

真正彻底卸载ie8的某些加载项

但是,有的加载项“删除”不可选的,这时如果是你不想要的或流氓加载项咋办?如果你不只是禁用掉它,还需要永久删除掉它,怎么办?

843
来自专栏惨绿少年

inotify+rsync实现实时同步

1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送...

1870
来自专栏FreeBuf

利用Office文档结合社会工程学手段欺骗用户执行恶意代码

Microsoft Office文档为攻击者提供了各种欺骗受害者运行任意代码的方法。当然,攻击者可能会尝试直接利用Office漏洞,但更常见的情况是向受害者发送...

853
来自专栏hbbliyong

VisualStudio 怎么使用Visual Leak Detector

那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visu...

3847
来自专栏吴伟祥

基于Java的打包jar、war、ear包的作用与区别详解

以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果。除jar以...

654
来自专栏惨绿少年

inotify+rsync实现实时同步

第1章 数据实时同步介绍 1.1 什么是实时同步:如何实现实时同步 A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 B. 发现目录中...

2600
来自专栏Java帮帮-微信公众号-技术文章全总结

IntelliJ IDEA 修改内存大小,使得idea运行更流畅【面试+工作】

idea有个配置文件,可以设置内存大小的,就跟咱的jvm的内存里面的堆大小,栈大小等等,可以设置的,而且设置了之后,你这个的性能就会得到提升。具体看下面怎么修改...

1003
来自专栏FreeBuf

使用fuzzDB进行web安全测试

写在前面: fuzzDB看字面意思就知道,他是一个用于fuzz网站的库。类似于wwwscan之类工具的字典,但是他的过人之处是他是“开源”的,会有很多大神帮你维...

2318

扫码关注云+社区