磁盘存储和文件系统

时间:2022-11-25 18:05:35

一、磁盘结构类型

1.设备文件

I/O Ports

I/O设备地址


一切皆文件

 open(),read(),write(),close()

   

设备类型:

块设备

bolck,存储单位时"块",他的依赖介质时磁盘,比如一个磁盘可以分为很多个块

块存储设备通常来讲时随机存放数据的,但它有缓存的机制。

字符设备

char,存储单位"字符",它的依赖介质是键盘输入数据,作为运维人员应该很熟的一个字符设备就是"/dev/null和/dev/tty"

通常来讲是顺序存放数据的,且其无缓存机制


设备文件:

关联至一个设备趋动程序,进而能够与之对应硬件设备进行通信。


设备号码:

主设备号:

major number,标识设备类型

次设备号:

minor number,标识同一类型下的不同设备

 温馨提示:

设备编号是安装系统自动生成的,无需系统工程师手动创建

磁盘存储和文件系统

2.磁盘接口类型

 并行:

 IDE:

     133MB/s,这种接口基本上被淘汰了,如下图所示

 SCSI:

     640MB/s

       

串口:

 STAT

6Gbps(注意,bps就是bit/s),约等于768MB/s

 SAS

6Gbps

 USB

480MB/s


每分钟转速(rotations per minute,简称rpm)

磁盘存储和文件系统

3.固态磁盘和机械磁盘

3.1磁盘分类

​机械硬盘​​(Hard Disk Drive,简称HDD):

即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。

机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。

磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。

数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。

硬盘为精密设备,进入硬盘的空气必须过滤(因此,家用设备不建议大家自行拆卸,因为你拆卸后基本上意味着这块磁盘里的数据报废了)。


​固态硬盘​​(Solid State Drive,简称SSD):

用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。

固态硬盘在接口的规范和定义,功能及使用方法上与机械硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致


机械硬盘(HDD)和固态硬盘(SSD)的​​区别​​:

相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势

硬盘有价,数据无价,目前SSD不能完全取代HHD,当HDD"损坏"是有可能将数据找回来的,但是当SSD"损坏"则意味着数据是真的丢失了。不过运维工程师备份自然是做的充足,尽管SSD数据丢失了,运维工程师也可以从备份中恢复数据。

3.2机械硬盘结构

​盘片​​(disk):

   负责真正存储数据的介质,一个硬盘中有多个盘片组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的。


​磁头​​(head):

   磁头是用来从盘片读取数据的。如下图所示,每个盘片的存储面(一个盘片有上下两面)上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小(一般很难通过肉眼区分它们之间的距离)。

   磁头通过磁力读取数据,但并不能和盘片直接接触,因为直接接触会划伤盘片导致数据丢失。这就是为什么生活环境中机械硬盘不能经常磕碰或者摔它。

 

​磁头控制器​​(Head controller):

   所有的磁头联在同一个磁头控制器上,由磁头控制器负责各个磁头的运动。


​磁道​​(track):

   每个盘片上下两面都有磁道,这个磁道类似于学校举行运动会的跑道,我们可以说盘片被划分成多个磁道。很显然,靠盘片外部的磁道存储的数据要比靠盘片内部的存储数据要多,这个也不难理解,就好像运动会的跑道,外圈比内圈要长。

   需要注意的是,每个盘片的各个磁道都有与其对应的编号,靠外边的磁道编号相对较小。

   

​扇区​​(sector):

   每个磁道又被划分成多个扇区,一般情况下默认每个扇区的大小是512字节(bits)。


​柱面​​(cylinder):

   它其实是一个逻辑的概念,它指的是所有盘片的相同的磁道称之为同一个柱面,从逻辑的角度来讲它应该是一个柱状结构。早期的分区划分方式就是基于柱面的(在CentOS 5.x及之前的版本)。  

   综上所述,基于柱面这个逻辑概念来划分分区的粒度太大了,因此在CentOS 6.x及以后的版本是可以基于扇区的方式来划分。


​蔟​​:

   簇是Window系统可以识别的最小单位。当我们存储一个文件时,占用的簇数量都是整数,也就是不会有两个文件同时占用一个簇的情况发生。

   每个簇可以包括2、4、8、16、32或64个扇区。显然,簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。

   在Linux操作系统可以识别的最小单位是块(block),其概念和window的蔟类似。


​磁头停泊区​​:

   顾名思义,主要是存放磁头的一个安全停泊区,当没有数据访问时,磁头会停放在该区域,这一点有点类似于高速公路上的服务区,即当你在高速路上想停车时需要进入对应的服务区。


​温馨提示​​:

   机械硬盘为精密装备,磁盘里面的空间基本上是没有什么杂物的,但也不是说是真空环境(因为真空环境的话由于压力的作用硬盘会直接被压扁的),因此它里面应该是一种惰性气体,进入硬盘的空气必须经过过滤。

   综上所述,非专业人员不建议大家去拆卸自己的机械硬盘,因为当你拆开后意味着空气中未过滤的气体会进入到硬盘内部,可能会导致磁盘不可用。

磁盘存储和文件系统

3.3 区位记录磁盘(Zoned Bit Recording,简称ZBR)扇区结构

如下图所示,各个磁道的扇区数是一样的,假设每个扇区的大小是512bytes,如果同一个扇面靠内的扇区和靠外的扇区存储相同的数据,这会导致靠内的扇区存储的数据很紧凑,靠外存储的数据很稀松。


综上所述,为了解决上述的情况,引入了区位记录磁盘扇区结构(Zoned Bit Recording,简称ZBR)。


如下图所示,可以很明显的看出来无论是靠内的函数还是靠外的扇区其大小是一样的,但靠内的扇区数要比靠外的扇区数少。靠外的扇区数多意味着可以多放数据,靠内的扇区数少就少放数据。


温馨提示:

 当以盘片的旋转轴为中心,旋转相同的角度,通过ZBR划分扇区的方式,很明显是靠外的数据要比靠内的数据要多。

 我们直到靠外的磁道编号较小,靠内的磁道编号较大,因此在实际生产环境中我们在分区时可以考虑将编号较小的分区划分给我们常用的分区,

 综上所述,这就是为什么我们安装window操作系统喜欢被大家统称为C盘,因为C盘的分区对应的磁道编号较小,其拥有的是靠外的扇区,读写速度自然是快些。

磁盘存储和文件系统

3.4 CHS和LBA

​CHS​​:

CHS是柱面(cylinder),磁头(head)和扇区(sector)的简称。我们通常生活中说的硬盘的三维指的就是CHS

 它采用24bit位寻址(最大寻址空间是8G)

(1)其中前10位表示cylinder(磁道数和柱面数相同,柱面数范围是0到2的10次方,即0~1024,如果你发现自己的硬盘柱面数大于1024,说明你用的硬盘已经不是早期的硬盘了,随着工业技术的提升,硬盘的质量也有很大的提高)

(2)中间8位表示head(磁头数范围是0到2的8次方,即0~255)

(3)后面6位表示sector(扇区数范围是0到2的6次方,即0-63)


​LBA​​:

是logical block addressing的简称。

LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址

ATA-1规范中定义了28位寻址模式,以每扇区512字节来计算,ATA-1所定义的28位LBA上限达到128GiB(2的28次方 x 512字节 = 137438953472字节/1024/1024/1024 = 128GB)。

2002年ATA-6规范采用48位LBA,同样以每扇区512字节组计算容量上限可达128Petabytes。


温馨提示:

由于CHS寻址方式的寻址空间在大概8GB(512bytes(单个扇区大小)*63(扇区数)*1024(柱面数/磁道数)*255(磁头)=8422686720bytes/1024/1024=8032MB/1024<8GB)以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式。

3.5 磁盘设备的设备文件命名

早期对磁盘设备的设备文件命名方式和现在的设备文件命名方式有所不同。


​CentOS 5.x​​操作系统:

如果磁盘设备的接口不同,则设备文件命名方式不同

当使用SCSI接口类型则操作系统命名方式以"sd"开头(比如标识第一个设备文件命名位sda,对应第一个分区则为"sda1")

 

​CentOS 7.x​​操作系统:

无论是哪种硬盘接口,都有统一的设备文件命名方式(均以"sd"字母开头)

   

温馨提示:

虽然CentOS在2019年的年底就已经将系统发布到CentOS 8.x版本,但目前企业使用较多的版本依旧是CentOS 7.x为主。CentOS 6.x次之,如果你发现还有CentOS 5.x建议迁移到CentOS 7.x及以上版本,因为老版本系统随着时间的推移会不断的爆出bug。

一个服务器基本上很难超过36块硬盘,因此我们对设备文件命名使用/dev/sda到/dev/sdb之间可以表示36块设备,通常是足够使用了。但是你遇到的是磁盘阵列的话可能会超过36块设备,此时我们可以使用/dev/sdaa到/dev/sdaz表示,如果还有更多的设备可以一次类推命名方式。

虚拟磁盘通常以"vd"字母开头,尤其是你在购买一些云产品的服务器,你会发现磁盘的命名方式是"/dev/vd*",这个时候你并不用担心,这意味你使用的是一块虚拟磁盘,关于其底层负责存储的物理磁盘无需咱们用户关心。

我们使用的虚拟机添加硬盘(磁盘)的方式也比较简单,如下图所示按照我们的需求可以自定义磁盘的大小,如果您将虚拟磁盘存储为单个文件最大不能超过2040GB(即不到2TB),如果将虚拟磁盘查分成多个文件,最大磁盘大小不能超过8192GB(即8TB)。

二、磁盘分区概述

1.磁盘分区概述

1.1 为什么要是用分区

我们知道磁盘(磁盘)在不分区的情况下是可以使用的,那为什么要引入分区这个概念呢?


使用分区带来的好处:

  1. 优化I/O性能
  2. 实现磁盘空间配额限制
  3. 提高修复速度
  4. 隔离系统和程序
  5. 安装多个操作系统(OS)
  6. 采用不同文件系统
1.2 分区方式

目前有两种主流的分区方式:Master Boot Record(简称MBR)和GUID(Globals Unique Identifiers) partition table(简称GPT)


​MBR​​:(Master Boot Record):

1982年,使用32位(4字节)标识扇区数,分区不超过2T(2的32次方 x扇区数大小512字节) = 2199023255552 Bytes/1024/1024/1024 = 2048GB/1024=2T

如何分区:

按住面(cylinder:)进行分区。需要注意的是0磁道0扇区有512bytes大小,其组成部分如下:

446bytes:

                   boot loader

             64bytes:

                    分区表,齐总每16bytes标识一个分区

              2bytes:

                    55AA

      4个主分区:

               3主分区+1扩展(N个逻辑分区)


​GTP​​:GUID(Globals Unique Identifiers) partition table:

支持128个分区,使用64位秒支持8Z(512Byte/block)64Z(4096Byte/block)

 使用128位UUID(Universally Unique Identifier)表示磁盘和分区GTP分区表自动备份在头和尾两份,并有CRC校验位

UEFI(统一扩展固件接口)硬件支持GPT,使操作系统启动

1.3 使用分区空间

使用分区空间大概分为以下几个步骤:

(1)硬件设备识别

(2)硬件设备分区

      (3)创建文件系统

      (4)标记文件系统

      (5)在/etc/fstab文件中创建条目

      (6)挂载到新的文件系统

1.4 Windows默认使用的分区方式

​window 7​​默认使用的是MBR分区

​window 10​​默认使用的是GPT分区

1.5 Linux默认使用的分区方式
如下图所示,CentOS 7.6以上版本默认采用的就是GPT分区方式
[gestep@gapfts_check ~]$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[gestep@gapfts_check ~]$ uname -r
3.10.0-1127.el7.x86_64
[gestep@gapfts_check ~]$ uname -m
x86_64
[gestep@gapfts_check ~]$ fdisk -l /dev/sd
sda sda1 sda2 sda3 sda4 sda5 sdb sdb1 sdc sdc1
[gestep@gapfts_check ~]$ fdisk -l /dev/sda
fdisk: 打不开 /dev/sda: 权限不够
[gestep@gapfts_check ~]$ sudo fdisk -l /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sda:600.1 GB, 600127266816 字节,1172123568 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 2EFDD87A-CA20-4D5A-8790-E8FB4DF01891


# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 212223999 100G Microsoft basic
4 212224000 421939199 100G Microsoft basic
5 421939200 1172111359 357.7G Microsoft basic
[gestep@gapfts_check ~]$

磁盘存储和文件系统

2.Master Boot Record(简称MBR)分区方式概述

2.1 MBR分区结构

如下图所示,硬盘(磁盘)主引导记录MBR由4个部分组成:

​主引导程序​​(偏移地址0000H--0088H)

它负责从活动分钟加载并运行引导系统程序


​出错信息数据区​

又称为数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节


​分区表​​(DPT,Disk Partition Table)

包含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节,分别对应为分区项1、分区项2、分区项3、分区项4


​结束标志​

偏移地址01FE--01FF的2个字节值为技术标志55AA


​注意​

分区表不属于任何分区,因此生产环境 中对分区表的备份尤为重要。

磁盘存储和文件系统

2.2 MBR中的DPT结构

磁盘存储和文件系统

2.3 查看主分区表DPT的引导标志

80表示活动分区,00表示非活动分区

[gestep@gapfts_check ~]$ lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.9G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 100G 0 part /
├─sda4 8:4 0 100G 0 part /var
└─sda5 8:5 0 357.7G 0 part /home
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data
sdc 8:32 0 1.8T 0 disk
└─sdc1 8:33 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data
[gestep@gapfts_check ~]$ sudo fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sda:600.1 GB, 600127266816 字节,1172123568 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 2EFDD87A-CA20-4D5A-8790-E8FB4DF01891


# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 212223999 100G Microsoft basic
4 212224000 421939199 100G Microsoft basic
5 421939200 1172111359 357.7G Microsoft basic
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: C73ABB6C-954D-45E2-80F4-B9A3BFE997AC


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdc:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 8D7E10FC-CD39-4F8A-9815-1B7750492580


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM

磁盘 /dev/mapper/data-lvdata:3920.8 GB, 3920768270336 字节,7657750528 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo hexdump -C /dev/sda -n 512
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001c0 02 00 ee fe ff ff 01 00 00 00 af 2f dd 45 00 00 |.........../.E..|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
[gestep@gapfts_check ~]$ sudo hexdump -C /dev/sdb -n  512 -v
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001c0 02 00 ee fe ff ff 01 00 00 00 af 88 e0 e8 00 00 |................|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
[gestep@gapfts_check ~]$

3.GUID(Globals Unique Identifiers)partition table(简称GPT)分区方式概述

3.1 GPT分区结构

如下图所示,使用128位Universally Unique Identifier(简称UUID)表示磁盘和分区GPT分区表,GPT自动分区自动备份在头和尾两份


EFI部分又可分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

 

Protective MBR(512bytes):

主要作用是保护GPT分区,因为一些老的机器可能不支持GPT分区,老机器一般只能识别MBR分区,因此其功能就是让老机器将GPT分区识别为MBR分区。但对于GPT分区来讲并没有实际意义,其作用就是为了兼容老的MBR

如果没有Proctive MBR,老的机器就识别不了GPT分区策略,老机器会一贯认为磁盘是没有分区信息的,可能会导致数据被破坏。因此GPT为了兼容老机器伪造了一个MBR的分区的身份,以防止后面的数据被破坏。


Primary GUID Partition Header:

GPT的头部信息。


GUID Parition entries 1-128:

 对应的是分区表信息。


Partition 1-128:

分区表对应的存储空间。


GUID Partition entries 1 - 128:

备份的分区表信息。


BackupGUID Partition Header:

对应的GPT头部信息的备份。 

磁盘存储和文件系统

3.2 BIOS+MBR与UEFI+GPT

UEFI(统一扩展固件接口)硬件支持GPT,使得操作系统启动。因此采用传统的BIOS方式仅支持MBR分区方式。我们现在新购买的机器基本上都是基于UEFI方式启动的。


我们基于BIOS启动的操作系统它通常是MBR分区的系统,虽然BIOS无法识别GPT分区,但我们基于BIOS启动的操作系统是可以识别你新接入的GPT分区的磁盘。


BIOS只是字符界面,它只能使用键盘操作,而UEFI是支持鼠标操作的


BIOS和UEFI运行流程如下所示:

 传统BIOS运行流程:

       (1)开机

       (2)BIOS初始化

       (3)BIOS自建

       (4)引导操作系统

       (5)进入系统


 UEFI运行流程:

       (1)开机

       (2)UEFI初始化

       (3)引导操作系统

       (4)进入系统

3.3 管理分区

列出块设备

lsblk


创建分区使用:

创建MBR分区

fdisk

创建GPT分区

gdisk


高级分区操作:

 parted


重新设备内存中的内核分区表版本 

partprobe

三、分区管理工具--fdisk实战

1.fdisk非交互式命令

1.1 查看fdis的帮助信息
[gestep@gapfts_check ~]$ fdisk -h
用法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区> 给出分区大小(块数)

选项:
-b <大小> 扇区大小(512、1024、2048或4096)
-c[=<模式>] 兼容模式:“dos”或“nondos”(默认)
-h 打印此帮助文本
-u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
-v 打印程序版本
-C <数字> 指定柱面数
-H <数字> 指定磁头数
-S <数字> 指定每个磁道的扇区数

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ man fdisk #使用man手册查看更为详细的信息
1.2 查看所有分区表信息
[gestep@gapfts_check ~]$ lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.9G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 100G 0 part /
├─sda4 8:4 0 100G 0 part /var
└─sda5 8:5 0 357.7G 0 part /home
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data
sdc 8:32 0 1.8T 0 disk
└─sdc1 8:33 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data
[gestep@gapfts_check ~]$ sudo fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sda:600.1 GB, 600127266816 字节,1172123568 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 2EFDD87A-CA20-4D5A-8790-E8FB4DF01891


# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 212223999 100G Microsoft basic
4 212224000 421939199 100G Microsoft basic
5 421939200 1172111359 357.7G Microsoft basic
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: C73ABB6C-954D-45E2-80F4-B9A3BFE997AC


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdc:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 8D7E10FC-CD39-4F8A-9815-1B7750492580


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM

磁盘 /dev/mapper/data-lvdata:3920.8 GB, 3920768270336 字节,7657750528 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ cat /proc/partitions 
major minor #blocks name

8 0 586061784 sda
8 1 204800 sda1
8 2 1048576 sda2
8 3 104857600 sda3
8 4 104857600 sda4
8 5 375086080 sda5
8 16 1953514584 sdb
8 17 1953513472 sdb1
8 32 1953514584 sdc
8 33 1953513472 sdc1
253 0 3828875264 dm-0
[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ ll /dev/sd*
brw-rw---- 1 root disk 8, 0 10月 21 13:55 /dev/sda
brw-rw---- 1 root disk 8, 1 10月 21 13:55 /dev/sda1
brw-rw---- 1 root disk 8, 2 10月 21 13:55 /dev/sda2
brw-rw---- 1 root disk 8, 3 10月 21 13:55 /dev/sda3
brw-rw---- 1 root disk 8, 4 10月 21 13:55 /dev/sda4
brw-rw---- 1 root disk 8, 5 10月 21 13:55 /dev/sda5
brw-rw---- 1 root disk 8, 16 10月 21 13:55 /dev/sdb
brw-rw---- 1 root disk 8, 17 10月 21 13:55 /dev/sdb1
brw-rw---- 1 root disk 8, 32 10月 21 13:55 /dev/sdc
brw-rw---- 1 root disk 8, 33 10月 21 13:55 /dev/sdc1
1.3 查看单个磁盘分区信息
[gestep@gapfts_check ~]$ lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.9G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 100G 0 part /
├─sda4 8:4 0 100G 0 part /var
└─sda5 8:5 0 357.7G 0 part /home
[gestep@gapfts_check ~]$ sudo fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: C73ABB6C-954D-45E2-80F4-B9A3BFE997AC


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM

[gestep@gapfts_check ~]$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data

2.fdisk交互式命令

[gestep@gapfts_check ~]$ sudo fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:2000.4 GB, 2000398934016 字节,3907029168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: C73ABB6C-954D-45E2-80F4-B9A3BFE997AC


# Start End Size Type Name
1 2048 3907028991 1.8T Microsoft basic LVM

[gestep@gapfts_check ~]$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 1.8T 0 disk
└─sdb1 8:17 0 1.8T 0 part
└─data-lvdata 253:0 0 3.6T 0 lvm /data
2.1 查看帮助信息
命令(输入 m 获取帮助):m
命令操作
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

命令(输入 m 获取帮助):
2.2 创建新分区

​主分区​

Command (m for help): n                                              #添加分区
Partition type
p primary (0 primary, 0 extended, 4 free) #添加主分区
e extended (container for logical partitions) #添加扩展分区
Select (default p): p #输入p来创建第一个主分区
Partition number (1-4, default 1): 1 #输入分区号,从1开始
First sector (2048-41943039, default 2048): #输入起始扇区,默认2048开始
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +5G #注意,如果不加单位的话默认是以扇区为单位开始分配空间,因此通常分配时我们按G来分配
#给第一个主分区/dev/sdb1分5G,可以使用扇区来指定大小

Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): p #第一个分区结束,p查看已分区信息
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2710fd5

Device Boot Start End Sectors Size Id Type #从左到右的每个字段分别为设备名,起始扇区,结束扇区,块数量,分区的系统ID,分区的系统ID对应的类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux

​扩展分区​

Command (m for help): n                                     #再建一个分区
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): e #创建扩展分区
Partition number (2-4, default 2): 2 #扩展分区号为2
First sector (10487808-41943039, default 10487808): #起始扇区默认开始
Last sector, +sectors or +size{K,M,G,T,P} (10487808-41943039, default 41943039):
#剩余全部空间给扩展分区

Created a new partition 2 of type 'Extended' and of size 15 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2710fd5

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 41943039 31455232 15G 5 Extended

​逻辑分区​

Command (m for help): n                                     #新建逻辑分区
All space for primary partitions is in use. #提示所有的主分区已经使用
Adding logical partition 5 #添加逻辑分区从5开始
First sector (10489856-41943039, default 10489856): #起始扇区默认
Last sector, +sectors or +size{K,M,G,T,P} (10489856-41943039, default 41943039): +5G
#逻辑分区给5G
Created a new partition 5 of type 'Linux' and of size 5 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2710fd5

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 41943039 31455232 15G 5 Extended
/dev/sdb5 10489856 20975615 10485760 5G 83 Linux
2.3 删除分区
Command (m for help): p

Disk /dev/sdb: 644.2 GB, 644245094400 bytes, 1258291200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7bc495c7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 209717247 104857600 83 Linux
/dev/sdb2 209717248 629147647 209715200 83 Linux
/dev/sdb3 629147648 734005247 52428800 83 Linux

Command (m for help):
Command (m for help): d          #删除分区
Partition number (1-3, default 3):    #我们上面可以看到有3个分区信息,默认删除最后一个分区,我们也可以输入分区数的编号 
Partition 3 is deleted

Command (m for help):
Command (m for help): p          #删除分区后再次查看分区信息

Disk /dev/sdb: 644.2 GB, 644245094400 bytes, 1258291200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7bc495c7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 209717247 104857600 83 Linux
/dev/sdb2 209717248 629147647 209715200 83 Linux

Command (m for help):
2.4 退出交互界面
[gestep@gapfts_check ~]$ sudo fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):q

[gestep@gapfts_check ~]$
[gestep@gapfts_check ~]$ sudo fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sda:600.1 GB, 600127266816 字节,1172123568 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 2EFDD87A-CA20-4D5A-8790-E8FB4DF01891


# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 2508799 1G Microsoft basic
3 2508800 212223999 100G Microsoft basic
4 212224000 421939199 100G Microsoft basic
5 421939200 1172111359 357.7G Microsoft basic

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
2.5 修改分区的系统ID
Command (m for help): p

Disk /dev/sdb: 644.2 GB, 644245094400 bytes, 1258291200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7bc495c7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 209717247 104857600 83 Linux
/dev/sdb2 209717248 629147647 209715200 83 Linux
/dev/sdb3 629147648 1166018559 268435456 5 Extended
/dev/sdb5 734009344 943724543 104857600 83 Linux
/dev/sdb6 943726592 1111498751 83886080 83 Linux

Command (m for help):
Command (m for help): t
Partition number (1-3,5,6, default 6):
Hex code (type L to list all codes): l

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

Command (m for help):
Command (m for help): p

Disk /dev/sdb: 644.2 GB, 644245094400 bytes, 1258291200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7bc495c7

Device Boot Start End Blocks Id System
/dev/sdb1 2048 209717247 104857600 83 Linux
/dev/sdb2 209717248 629147647 209715200 83 Linux
/dev/sdb3 629147648 1166018559 268435456 5 Extended
/dev/sdb5 734009344 943724543 104857600 83 Linux
/dev/sdb6 943726592 1111498751 83886080 8e Linux LVM

Command (m for help):

3.分区注意事项

3.1 设备分区数字编号不稳定

生产环境中建议大家不要使用设备编号去挂载文件,因为当我们删除一个分区后,可能会导致灾难性的事情发生。


当我们删除一个分区后,删除的分区后面的所有分区数字编号减1,这意味着你之前在"/etc/fstab"文件中挂载的所有分区可能都会出现问题。


推荐大家使用UUID去唯一标识设备名称,这也是红帽公司在开源的Linux发行版如此设计的。

3.2 fdisk命令查看的是磁盘上的数据

当我们为一块操作系统正在使用的磁盘进行分区时,此时可能会导致磁盘上的分区表和内存中的分区表的数据不一致的情况。这是我们需要手动将磁盘中分区表的数据同步到内存中。


在CentOS 7.x系列,使用partprobe命令就可以搞定这件事


在CentOS 6.x系列,使用partprobe命令可能不好使,推荐大家使用part命令,"partx -a /dev/sda"(适用于增加分区),"partx -d --nr 6 /dev/sda "(适用于删除分区所对应的编号)。

4.实战测试案例

[root@test185 ~]# fdisk /dev/sda 
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sda:6000.1 GB, 6000069312512 字节,11718885376 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: D003F34E-501B-4158-9901-5AB6541717FF


# Start End Size Type Name
1 2048 4095 1M BIOS boot
2 4096 1028095 500M Microsoft basic
3 1028096 11718883327 5.5T Linux LVM

命令(输入 m 获取帮助):n
分区号 (4-128,默认 4):
第一个扇区 (34-11718885342,默认 11718883328):
Last sector, +sectors or +size{K,M,G,T,P} (11718883328-11718885342,默认 11718885342):+5G
值超出范围。
Last sector, +sectors or +size{K,M,G,T,P} (11718883328-11718885342,默认 11718885342):+1M
值超出范围。
Last sector, +sectors or +size{K,M,G,T,P} (11718883328-11718885342,默认 11718885342):
已创建分区 4


命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@test185 ~]#

​fdisk​​查看的是磁盘上的数据

[root@test185 ~]# fdisk -l /dev/sda 
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sda:6000.1 GB, 6000069312512 字节,11718885376 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: D003F34E-501B-4158-9901-5AB6541717FF


# Start End Size Type Name
1 2048 4095 1M BIOS boot
2 4096 1028095 500M Microsoft basic
3 1028096 11718883327 5.5T Linux LVM
4 11718883328 11718885342 1007.5K Linux filesyste

​lsblk​​查看到的是内存中的数据

[root@test185 ~]# lsblk /dev/sda*
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5.5T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 500M 0 part /boot
└─sda3 8:3 0 5.5T 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 31.5G 0 lvm [SWAP]
└─centos-home 253:2 0 5.4T 0 lvm /home/gestep/data
sda1 8:1 0 1M 0 part
sda2 8:2 0 500M 0 part /boot
sda3 8:3 0 5.5T 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 31.5G 0 lvm [SWAP]
└─centos-home 253:2 0 5.4T 0 lvm /home/gestep/data

​partprobe​​同步信息

[root@test185 ~]# partprobe /dev/sda          
#该命令可以某块将磁盘中的数据同步到内存中,如果不指定磁盘,默认会将所有的磁盘设备的分区表重新刷新到内存。

​验证​

[root@test185 ~]# lsblk /dev/sda        #再次查看发现内存中有最新的分区信息
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5.5T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 500M 0 part /boot
├─sda3 8:3 0 5.5T 0 part
│ ├─centos-root 253:0 0 50G 0 lvm /
│ ├─centos-swap 253:1 0 31.5G 0 lvm [SWAP]
│ └─centos-home 253:2 0 5.4T 0 lvm /home/gestep/data
└─sda4 8:4 0 1007.5K 0 part