首页 > 代码库 > 一、磁盘基础与分区

一、磁盘基础与分区

1.1、硬盘设备接口的分类

  通常硬盘按照接口类型可分为

接口类型用途

ATA(又称IDE或PATA)、SATA(又称串口IDE)

多用于PC或工作站现也用于存储设备
SCSI、FC、SAS、FATA

用于服务器和存储设备

  ATA(Advanced Technology Attachment)40针接口又称IDEIntegrated Drive Electronics电

子集成驱动器或PATA (Parellel ATA)。不可热插拔。通常所说ATA、Ultra ATA、DMA、Ultra DMA等

接口都属于IDE硬盘。速率有DMA 33/DMA 66/DMA 100/DMA 133。

技术分享

  SATA又称串口IDE硬盘。目前较多应用于主机和存储设备使用。15针电源插头7针数据插头速率有

1.5Gb/s和3.0Gb/s。

技术分享技术分享

  SCSI(Small Computer System Interface)是一种广泛应用于小型机上的高速数据传输技术。SCSI接口

具有应用范围广、多任务、带宽大、CPU占用率低以及热插拔等优点因此SCSI硬盘主要应用于中、高

端服务器、高档工作站以及存储设备中。 SCSI接口目前常用有68针和80针两种接口规格。区别在于

68pin需单独电源接口不支持热插拔用于机箱内部安装80pin无需电源接口可支持热插拔用

于高端服务器和存储设备。

技术分享

  FC(Fiber Channel)是专门为网络系统设计的但随着存储系统对速度的需求才逐渐应用到硬盘系统

中。光纤通道硬盘是为提高多硬盘存储系统的速度和灵活性才开发的它的出现大大提高了多硬盘系统

的通信速度。光纤通道的主要特性有热插拔性、高速带宽、远程连接、连接设备数量大等。

技术分享

 

 SAS(Serial Attached SCSI)是SCSI的升级产品其主要有点有更好的性能——采用串行传输代替并

行传输全双工模式更简便的连接线缆——将不再使用SCSI那种扁平的宽排线更广的扩展性——可

与SATA兼容。

技术分享

  FATA是一种混合型硬盘驱动器技术名为光纤附属适配器FATAFibre Attached Technology 

Adapted这种技术是与最大的硬盘厂商希捷公司联合开发的它可以有效的降低硬盘的成本从而有

助于提高磁盘阵列的性价比。FATA硬盘驱动器相当于改用FC接口的SATA硬盘驱动器。


类型转速接口类型容量主要优势
SATA7200

3.0Gb/s

500GB

740GB

1000G

价格低

容量高

SCSI

10000

15000

320MB/s

146GB

300GB

性能较高

SAS

10000

15000

3.0Gb/s

(全双工)

146GB

300GB

高性能

高可靠性

FC

10000

15000

2Gb/s

4Gb/s

146GB

300GB

高性能

高可靠性

1.2、机械磁盘的结构与性能

技术分享

  磁头(head)每个盘片一般有上下两面分别对应1个磁头共2个磁头磁头是硬盘中最昂贵的部

件是硬盘技术最重要和关键的一环采用了非接触式结构加电后悬浮在高速旋转的磁盘表面。

  磁道(track)当磁盘旋转时磁头若保持在一个位置上则每个磁头都会在磁盘表面划出一个圆形轨

迹这些圆形轨迹就叫做磁道。磁道是从盘片外圈往内圈编号0磁道磁道...靠近主轴的同心圆用

于停靠磁头不存储数据

技术分享

  柱面(cylinder)硬盘通常由重叠的一组盘片构成每个盘面都被划分为数目相等的磁道并从外缘

的“0”开始编号具有相同编号的磁道形成一个圆柱称之为磁盘的柱面。

技术分享

  扇区(sector) 磁盘上的每个磁道被等分为若干个弧段这些弧段就被称为磁盘的扇区。

技术分享

  圆盘(platter) 就是盘片的数量。

硬盘的评价指标说明
硬盘容量Capacity

作为计算机系统的数据存储器容量是硬盘最主要的参数

硬盘的容量以兆字节MB或千兆字节GB为单位

硬盘转速Rotationl Speed转速是指硬盘盘片每分钟转动的圈数单位为rpmRevolutions Per Minute
平均寻道时间Average Seek Time指磁头移动到数据所在磁道需要的时间这是衡量硬盘机械性能的重要指标 
平均潜伏期 Average Latency 指当磁头移动到数据所在的磁道以后等待指定的数据扇区转动到磁头下方的时间
平均访问时间Average Access Time 指从读/写指令发出到第一笔数据读/写实际开始所用的平均时间

1.3、主引导记录MBR

 主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操

作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对

硬盘进行初始化时产生。

  通常,将包含MBR引导代码的扇区称为主引导扇区。在这一扇区中引导代码占有绝大部分的空间,故而

将习惯将该扇区称为MBR扇区(简称MBR)。由于这一扇区承担有不同于磁盘上其他普通存储空间的特殊

管理职能,作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格

式化命令不能清除主引导记录的任何信息。主引导扇区可以分为共512Bytes,可以分为三个部分:

主引导程序即主引导记录(MBR)446字节存放 BootLoader, 可读取内核文件来执行的程序

分区表( Partition table

64字节

每16字节为一个分区,共四个分区,其中主分区+扩展分区不能大于 4 个,且扩展分区只能有一个

结束标志

2字节

标记 MBR 是否有效,其值为AA55,存储时低位在前,高位在后,即看上去是55AA(十六进制)。

  GUID 磁碟分割表(GUID partion Table):可扩展固件接口( EFI) 标准的一部分, 被用于代替 

BIOS 系统中 32bit 来存储逻辑地址大小信息的开机主引导记录 MBR 分区。大于 2T 磁盘中,GUID

一种替代 MBR 的方式。

1.4、分区管理命令 fdisk/parted

fdisk:对于一块硬盘来讲,最多只能管理15个分区,无法处理 2TB 以上磁盘分区

fdisk -l [-u] [device...]
  p:
显示当前硬件的分区,包括没保存的改动
  n: 创建新分区(e: 扩展分区 p: 主分区)
  d: 删除一个分区 w: 保存退出 q: 不保存退出
  t: 修改分区类型 ( L: 显示所支持的所有类型)
  l: 显示所支持的所有类型

已经有分区处于使用状态的磁盘,新建分区后需要让内核重读其分区表:

  CentOS 5:

# partprobe [DEVICE]

  CentOS 6:

#partx -a [DEVICE]

#kpartx -af  [DEVICE]

查看内核是否已经识别新的分区:cat /proc/partations

[root@mylinux ~]# cat /proc/partitions    #查看当前分区
major minor  #blocks  name
 252        0   20971520 vda
 252        1   20970496 vda1
 252       16   10485760 vdb
 252       17    5243584 vdb1
 [root@mylinux ~]# fdisk /dev/vdb        #使用fdisk创建分区

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
         switch off the mode (command ‘c‘) and change display units to
         sectors (command ‘u‘).
Command (m for help): m
Command action
   a   toggle a bootable flag             #设置引导扇区
   b   edit bsd disklabel                 #编辑卷标(linux下使用的卷标bsd通用)
   c   toggle the dos compatibility flag  #切换DOS兼容标志
   d   delete a partition                 #删除一个分区
   l   list known partition types         #列出已知分区类型
   m   print this menu                    #列出菜单选项
   n   add a new partition                #新增一个分区
   o   create a new empty DOS partition table #创建一个空的DOS分区表
   p   print the partition table          #显示分区表
   q   quit without saving changes        #不保存退出
   s   create a new empty Sun disklabel   #创建一个空的太阳磁盘标签
   t   change a partition‘s system id     #改变分区类型
   u   change display/entry units         #改变显示/输入单位
   v   verify the partition table         #验证分区表
   w   write table to disk and exit       #把分区表写入硬盘并退出
   x   extra functionality (experts only)
Command (m for help): p                   #显示分区表

Disk /dev/vdb: 10.7 GB, 10737418240 bytes        #磁盘文件与容量
16 heads, 63 sectors/track, 20805 cylinders      #磁头、扇区、柱面大小
Units = cylinders of 1008 * 512 = 516096 bytes   #每个磁柱的大小
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xace28344

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       10404     5243584+  83  Linux
Command (m for help): n                    #创建新分区
Command action
   e   extended
   p   primary partition (1-4)
p                                          #创建一个主分区
Partition number (1-4): 2
First cylinder (10405-20805, default 10405): 
Using default value 10405
Last cylinder, +cylinders or +size{K,M,G} (10405-20805, default 20805): +2G #分区大小2G

Command (m for help): p

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xace28344

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       10404     5243584+  83  Linux
/dev/vdb2           10405       14566     2097648   83  Linux
Command (m for help): n                    #创建一个扩展分区
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 4
First cylinder (14567-20805, default 14567): 
Using default value 14567
Last cylinder, +cylinders or +size{K,M,G} (14567-20805, default 20805): 
Using default value 20805

Command (m for help): p

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xace28344

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       10404     5243584+  83  Linux
/dev/vdb2           10405       14566     2097648   83  Linux
/dev/vdb4           14567       20805     3144456    5  Extended

Command (m for help): n                 #创建逻辑分区
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (14567-20805, default 14567): 
Using default value 14567
Last cylinder, +cylinders or +size{K,M,G} (14567-20805, default 20805): +100M

Command (m for help): p

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xace28344

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       10404     5243584+  83  Linux
/dev/vdb2           10405       14566     2097648   83  Linux
/dev/vdb4           14567       20805     3144456    5  Extended
/dev/vdb5           14567       14770      102784+  83  Linux

Command (m for help): t               #更改分区类型
Partition number (1-5): 5
Hex code (type L to list codes): L    #显示所有支持的分区类型

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext‘d (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e 
Changed system type of partition 5 to 8e (Linux LVM)

Command (m for help): p                    #查看已创建的分区

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xace28344

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       10404     5243584+  83  Linux
/dev/vdb2           10405       14566     2097648   83  Linux
/dev/vdb4           14567       20805     3144456    5  Extended
/dev/vdb5           14567       14770      102784+  8e  Linux LVM  #分区类型改变
Command (m for help): w   #保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@mylinux ~]# partx -a /dev/vdb    #通知内核读取分区表
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
[root@mylinux ~]# kpartx -af /dev/vdb
[root@mylinux ~]# cat /proc/partitions   #查看当前磁盘上已存在的分区   
major minor  #blocks  name

 252        0   20971520 vda
 252        1   20970496 vda1
 252       16   10485760 vdb
 252       17    5243584 vdb1
 252       18    2097648 vdb2
 252       20          1 vdb4
 252       21     102784 vdb5

  传统的MBR(Master Boot Record)分区方式,有一个局限:无法支持超过2TB的硬盘的分区(或单个分

区超过2TB),这个情况在当前这个数据量激增的时候,实在令人难以接受(尤其是企业级的应用,动辄

数TB的数据量)。GPT的分区表很好了解决了传统MBR无法逾越2TB的限制。但是在Linux系统中,传统的

fdisk命令无法支持gpt分区方式。 因此出现了parted命令。 

  parted的操作都是实时的,也就是说你执行了一个分区的命令,他就实实在在地分区了,而不是像

fdisk那样,需要执行w命令写入所做的修改, 所以进行parted的测试千万注意不能在生产环境中。

[root@mylinux ~]# parted /dev/vdb
GNU Parted 2.1
使用 /dev/vdb
Welcome to GNU Parted! Type ‘help‘ to view a list of commands.
(parted) help                               #显示帮助信息                                
  align-check TYPE N                       check partition N for TYPE(min|opt)alignment
  check NUMBER                             #对文件系统做简单的检查
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   #复制文件系统到另一个分区
  help [COMMAND]                           #显示帮助
        COMMAND
  mklabel,mktable LABEL-TYPE               #创建新的磁盘标签(分区标签)
  mkfs NUMBER FS-TYPE                      #在NUMBER分区上创建FS-TYPE类型文件系统
  mkpart PART-TYPE [FS-TYPE] START END     #创建一个分区
  mkpartfs PART-TYPE FS-TYPE START END     #用文件系统做分区
  move NUMBER START END                    #移动分区NUMBER
  name NUMBER NAME                         #为分区 NUMBER命名为NUME
  print [devices|free|list,all|NUMBER]     #显示分区表、可用磁盘、空闲空间、所有可见分区                                              或者特别的分区
  quit                                     #退出程序
  rescue START END                         #从START开始修复丢失的分区
        and END
  resize NUMBER START END                  #重新设置分区NUMBER大小和文件系统类型类型
  rm NUMBER                                #删除分区NUMBER
  select DEVICE                            #选择磁盘DEVICE进行编辑操作
  set NUMBER FLAG STATE                    #改变分区NUMBER的标志
  toggle [NUMBER [FLAG]]                   #在分区NUMBER上切换标志的状态
        NUMBER
  unit UNIT                                #设置默认单位为UNIT
  version                                  #显示软件的版本信息
(parted) print                             #显示当前磁盘上的分区                                             
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  标志
 1      32.3kB  5369MB  5369MB  primary   ext2
 2      5369MB  7517MB  2148MB  primary
 4      7517MB  10.7GB  3220MB  extended
 5      7517MB  7623MB  105MB   logical                lvm
(parted) rm 2                               #删除2号分区
(parted) print                                                            
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  标志
 1      32.3kB  5369MB  5369MB  primary   ext2
 4      7517MB  10.7GB  3220MB  extended
 5      7517MB  7623MB  105MB   logical                lvm
 
(parted) mkpart                              #创建分区                                   
分区类型?  primary/主分区/logical/逻辑分区? primary                      
文件系统类型?  [ext2]?                                          
起始点? 5369MB                                                               
结束点? 7517MB                                                           
警告: You requested a partition from 0.00B to 2000MB.                     
The closest location we can manage is 512B to 31.7kB.
Is this still acceptable to you?
是/Yes/否/No? Yes                                                         
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? Ignore                                           
(parted) p                                                                
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  标志
 1      32.3kB  5369MB  5369MB  primary   ext2
 2      5369MB  7517MB  2148MB  primary               #新建的分区
 4      7517MB  10.7GB  3220MB  extended
 5      7517MB  7623MB  105MB   logical                lvm
(parted) quit                                         #退出                              
信息: You may need to update /etc/fstab.



本文出自 “随风而飘” 博客,请务必保留此出处http://yinsuifeng.blog.51cto.com/10173491/1912091

一、磁盘基础与分区