硬盘结构和基础知识
  扇区(Sector)为最小的物理储存单位,每个扇区为512 bytes,将扇区组成一个圆就是磁道(track),不同磁盘的相同磁道组成磁柱(Cylinder),磁柱是分区(partition)的最小单位。

   

硬盘的第一个扇区512bytes由主引导记录(Master boot record,MBR)和分区表(partition table),其中MBR占有446bytes,而partition table占有64bytes;硬盘最多只能分割为四个主分区或者是扩展分区(只能有一个),因为分区表只有64bytes,每条分区记录占16bytes,最后2bytes为55AA(标记该硬盘为可引导的)

扩展分区(引用其它额外的分区表)不能直接被格式化使用,必须将其继续分割为逻辑分区格式化后才能被使用;逻辑分区的数量依操作系统而不同,在Linux系统中IDE硬盘最多有59个逻辑分区(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)

为了能在一个磁盘上安装多个系统,引入了分区的概念;主流的分区机制MBR和GPT
  MBR(Master Boot Record)是传统的分区机制,应用于绝大多数使用BIOS的PC设备;MBR支持32bit和64bit系统;MBR支持分区数量是有限;MBR只支持不超过2T的硬盘,超过2T的硬盘将只能使用2T空间(有第三方解决方法)
  MBR结构:占用硬盘第一个扇区512bytes,前446bytes为系统启动引导代码(Bootstrap code are);接下来64bytes为分区表(partition table),最后2bytes为55AA
  MBR分区:主分区最多创建4个;一个扩展分区会占用一个主分区;使用逻辑分区必须先创建一个扩展分区

GPT分区格式:
  GPT(GUID(Globals Unique Identifiers) Partition Table)是一个较新的分区机制,解决了MBR的很多缺点;支持超过2T的硬盘(寻址空间更大);向后兼容MBR;必须在支持UEFI的硬件上才能使用(取代BIOS的新一代的引导系统);Windows7 64bit、windowsServer2008 64bit、Mac、Linux系统都能支持GPT
  支持128个分区,使用64位寻址空间,支持8Z大小硬盘(512Byte/block),64Z大小硬盘(4096Byte/block)
  使用128位UUID 表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位
                

LBA(Logical Block Address)逻辑区块地址,LBA指某个数据区块的地址或是某个地址所指向的数据区块。从0开始编号来定位区块,第一区块LBA0,第二区块LBA=1,依此类推;逻辑区块通常是512bit或1024bit一组(一个存储块,或物理上的一个扇区);

LBA0:保护性MBR
  在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR叫做保护性MBR(Protective MBR)。其中包含有磁盘签名,MBR分区表,结束标志。这里没有引导代码,分区表中只有一个分区表项,GPT不会用到,这个分区项只是为了让系统认为磁盘是合法的,阻止不能识别GPT分区的磁盘工具试图对其进行分区或格式化等操作。

LBA1:主要GPT头部
  主要GPT头部位于1号扇区,会定义分区表的起始位置,结束位置,分区表项个数;
  分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。

LBA2-33:分区表项
  分区表位于GPT磁盘的2-33号扇区,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一个分区,所以GPT磁盘可以创建128个分区。
GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。

LBA34:分区区域
  GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT头定义。

LBA -33~-2:分区表备份
  分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区

LBA -1:GPT头备份
  GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并非完全GPT头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。

GPT分区优点:与目前普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。它具有如下优点:
  1、支持2TB以上的大硬盘
  2、每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区)
  3、分区大小几乎没有限制
  4、分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过另一份恢复
  5、循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率
  6、虽然MBR提供1字节分区类型代码,但GPT使用一个16字节的全局唯一标识符(GUID)值来标识分区类型,这使分区类型更不容易冲突
  7、每个分区可以有一个名称(不同于卷标)

硬盘接口(接口速率不代表硬盘的速率)
  IDE(ATA):Integrated Drive Electronics电子集成驱动器  并口,每个控制器可接两个硬盘(master、slave)  133MB/S
  /dev/hd[a-d][1-63] 为IDE接口的磁盘文件名
  /dev/hda[5+]    逻辑分区5开始
  SCSI:Small Computer System Interface小型计算机接口  并口,采用Ultra320或Ultra640 SCSI标准的SCSI硬盘  320MB/s或640MB/s
  SATA:Serial ATA  串口  150MB/s、300MB/s、600MB/s
  SAS:Serial Attached SCSI串行连接SCSI  串口  320MB/s  600MB/s
  /dev/sd[a-p][1-15]:为SCSI、SATA、USB、SAS、Flash等接口磁盘文件名
  USB:Universal Serial Bus  通用串行总线  串口  480MB/s
  注意:RedHat 6以后所有的磁盘文件名都是/dev/sd

  获取IDE或SCSI磁盘相关硬件信息
  hdparm
  -i 从操作系统读取
  -I 直接从硬盘读取
  -g 显示硬盘的布局信息
  -t 测试硬盘的读写性能
  -T 测试硬盘的缓存性能

设备文件
  内核引用不同设备的时候是通过主设备号和次设备号引用的;设备文件是作为设备的访问入口的,我们发给设备文件的内容,就相当于发给这个设备的内容
  块设备(b):按块为单位,随机访问的设备,例如硬盘
  字符设备(c):按字符为单位,线性设备有顺序的,例如键盘

  主设备号(major number):标识设备类型,用于标明设备所需要的驱动程序
  次设备号(minor number):标识同种设备类型中的不同设备,是特定设备的访问入口

mknod  创建设备文件
  mknod [OPTION]... NAME TYPE [MAJOR MINOR]
  -m MODE 创建后的设备文件的访问权限
  例子:mknod /tmp/mydev b 66 0

磁盘分区管理命令
  fdisk  创建MBR分区,也支持GPT
  gdisk  创建GPT分区
  parted  高级分区操作(创建、复制、调整大小等等)

fdisk 对于一个硬盘最多只能管理15个分区
  查看磁盘分区信息:
  fdisk -l [-u] [Device]

管理磁盘分区:
 fdisk提供了一个交互式接口来管理分区,他有许多命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上
  fdisk /dev/sda
  d 删除分区
  n 新建一个分区
  p 创建主分区
  e 创建扩展分区
  p 显示当前硬盘的分区,包括没保存的改动
  t 修改分区类型ID,就是文件系统的类型ID(ID指定为你将要格式化成那种类型文件系统的ID)
  L 显示所支持的文件系统类型对应的ID
  w 保存退出
  q 不保存退出
  m 帮助

支持分区的ID类型

  分区表识别
 如果是已经挂载上正在使用的硬盘,在将剩余的空间进行分区后,内核还不能立即识别新建分区信息,需要重新读取分区表才能显示出来,显示出来后才能对其进行格式化、挂载;如果是新硬盘分区完后,直接partprobe指定的磁盘文件名就可以了
 cat /proc/partitions      查看当前内核识别到的分区信息

通过以下命令可以让内核识别新添加的分区信息
  Centos5的系统直接partprobe /dev/sda
  Centos6的系统需要通过partx和kpartx两个命令多次读取(按下面的命令顺序执行),但也有可能不成功,如果还读取不出来只能重启系统
   kpartx -l /dev/sda  显示当前sda硬盘上的所有分区信息
   kpartx -af /dev/sda -a创建所有分区映射表-f是强制创建
   partx -a /dev/sda  读取硬盘创建所有分区表
   hdparm -z /dev/sda  这个命令也可以重读分区表
  Centos7的系统可以用partx(多次执行)
    partx -a /dev/sda  创建分区映射表
   partx -n m:n     指定分区编号

  lsblk 列出系统下的所有磁盘和磁盘分区信息
  -f 同时列出该磁盘内的文件系统名称、卷标、UUID

如果想分区为GPT类型,请使用gdisk或parted工具
  parted /dev/sda print 可以查看分区类型是MBR还是GPT
  不要在已有MBR分区的硬盘上面使用gdisk,也不要在已有GPT分区硬盘上使用fdisk

Linux 磁盘管理及分区的更多相关文章

  1. linux磁盘管理与分区 转载

    原文:http://zhengjianglong.leanote.com/post/linux%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA 一.基础知识 一块磁盘可以分为多 ...

  2. Linux 磁盘管理(分区、创建文件系统、挂载)

    Linux设备文件可以分为两类 b : 按块为单位,随机访问设备(块设备文件)  如:硬盘 c : 按字符为单位,线性设备(字符设备文件)  如:键盘 设备文件位于/dev下 主设备号(major n ...

  3. Linux磁盘管理——swap分区

    转自:Linux Swap交换分区设置 对swap分区的误解 一种流行的.以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍.也就是说,如果内存是2G,那么就应该分出4G的 ...

  4. Linux 磁盘管理

    Linux磁盘管理好坏管理直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分 ...

  5. df、du、fdisk:Linux磁盘管理三板斧的使用心得(转载)

    From:http://os.51cto.com/art/201012/240726_all.htm 作者介绍:李洋(博客),博士毕业于中科院计算所.10多年来一直从事计算机网络信息安全研发工作,曾主 ...

  6. linux 磁盘管理学习笔记

    磁盘管理命令:fdisk df du fdisk #查看硬盘分区表 df #查看分区使用情况 du #查看文件占用空间情况lvdisplay #逻辑分区 [1] 李洋.df.du.fdisk:Linu ...

  7. linux磁盘管理系列-软RAID的实现

    1 什么是RAID RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. R ...

  8. linux磁盘管理系列-LVM的使用

    LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...

  9. linux磁盘管理系列三:LVM的使用

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

随机推荐

  1. 路飞学城Python-Day24

    12.粘包现象 客户端接收的信息指定了的字节,TCP协议没有丢失协议,只是只能接收指定的字节数,于是产生出了粘包现象 服务端接收命令只能接收1024字节,服务端执行命令结果以后传输给客户端,客户端再以 ...

  2. Parameter ‘brOrderNo’ not found

    org.apache.ibatis.binding.BindingException: Parameter 'brOrderNo' not found. Available parameters ar ...

  3. JS取出特定字符前后的字符串,针对一串字符里面的单个字符前后的字符串

    //针对一串自负里面的单个字符前后的字符串<!doctype html> <html> <head> <meta charset="utf-8&qu ...

  4. 安装laravel项目出错

    我的本地是7.0.1,而下载下来的原来是运行在7.0.8版本的,于是执行:composer install 时,报了一堆错.解决办法:删掉composer.lock,重新composer instal ...

  5. 基于element的表单渲染器 (el-form-renderer)

    基于 element-ui 封装的表单渲染器,完整继承了 element 的属性定义,并进行了简单扩展,从而用户能够通过使用一段预设的数据渲染出一个完整的 element 表单. 演示地址 项目地址 ...

  6. angular-Then的用法

    then怎么使用(主要是如何从中提取出我们需要的后台返回的数据):then(fn) 方法中带一个参数,这个参数就是要被执行的函数,并且,这个作为参数的函数本身有一个参数,这个参数就是我们需要的数据,这 ...

  7. ASP.NET-HTTP响应标头

    Reponse Headers 理论上所有的响应头信息都应该是回应请求头的.但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到: Cache-Control:mus ...

  8. 【万里征程——Windows App开发】控件大集合2

    以下再来看看一些前面还没有讲过的控件,只是控件太多以至于无法所有列出来,大家仅仅好举一反三啦. Button 前面最经常使用的控件就是Button啦,Button另一个有意思的属性呢.当把鼠标指针放在 ...

  9. extjs grid 复制问题还有一种解决方式.

    之前的项目中尽管也常常使用到extjs,但也许是没有注意到,也也许是根本就没有须要用到这个功能. 前几天在和客户讨论需求时,客户说想要可以将gird表中的数据复制出来,当时没多想,感觉这功能extjs ...

  10. 敏捷自己主动化单元測试 (从前台 JavaScript 至后台 Java)

    此份材料的内容适用于前台 JavaScript 与后台 Java 的单元測试◦ 希望, 能协助开发者可在最短的时间内, 开展单元測试的工作◦ 附件: 敏捷自己主动化单元測试 例子代码: QUnit 例 ...