Linux 磁盘管理及分区

硬盘结构和基础知识
  扇区(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

猜你喜欢

转载自www.cnblogs.com/Link-Luck/p/9855911.html