Linux【6】-硬盘管理1-分区(fdisk)

一、分区的几个基本概念

1.1 磁盘的文件名

Linux 中每个硬件都被当做一个文件。

常见磁盘的文件名:

  • SCSI/SATA/USB 磁盘:/dev/sd[a-p]
  • IDE 磁盘:/dev/hd[a-d]

其中文件名后面的序号的确定与磁盘插入的顺序有关,而与磁盘所插入的插槽位置无关。

1.2 分区表

磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。

1.MBR

MBR 中,第一个扇区最重要,里面有:主要开机记录(Master boot record, MBR)及分区表(partition table),其中 MBR 占 446 bytes,partition table 占 64 bytes。

分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它将其它空间用来记录分区表,可以记录更多的分区,因此通过扩展分区可以分出更多区分,这些分区称为逻辑分区。

Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名+编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。

2.GPT

不同的磁盘有不同的扇区大小,例如 512bytes 和最新磁盘的 4k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA)。

GPT 第 1 个区块记录了 MBR,紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。

GPT 没有扩展分区概念,都是主分区,最多可以分 128 个分区。

二、查看硬盘

在硬盘装上后,在分区之前,用 fdisk –l 就可以看到这块硬盘了,fdisk –l 会输出一些有关这块硬盘的基本信息,如下所示:

[root@localhost ~]# fdisk –l 硬盘名/分区名
….#此处省略若干行
Disk /dev/sdb: 536.9 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2f7e945a
…#此处省略若干行
[root@localhost ~]#

要理解 fdisk –l 输出的关于磁盘的基本信息,我们首先需要简要了解一下机 械式磁盘(HDD)的物理构成:我们需要知道的概念包括:

  • 盘片(platter):一个机械式磁盘一般由若干磁性盘片组成;
  • 磁头(head):每个盘片一般有上下两面,盘片的两个面均能存储数据,因此需要两个磁头;
  • 磁道(track):每个盘片沿着半径的方向可以划分为很多同心圆,这些圆圈被称为磁道(track),磁道是从盘片外圈往内圈编号 0 磁道,1 磁道…,靠近 主轴的同心圆用于停靠磁头,不存储数据;
  • 扇区(sector):每个磁道被分成若干等份,每一份就被称为一个扇区,扇区是硬盘数据存储的最小单位;
  • 柱面(cylinder)数:不同盘片上具有相同磁道编号的同心圆组成面就称作柱面,所以磁盘柱面数就等于磁盘单个盘片上的磁道数。柱面是硬盘分区的最小单位.因此,一个磁盘的容量 = 磁头数 ×柱面数 × 每道扇区数 × 每扇区字节数。

所以,上面这段 fdisk –l 输出就是告诉我们:这个名为/dev/sdb 的磁盘容量 总共为 536870912000 字节(536.9 GB),磁盘有 255 个磁头,每个磁道有 63 个扇区,总共有 65270 个柱面(磁道)。其中每个扇区容量为 512 字节(这个磁 盘的最小逻辑和物理单元,也是这个磁盘的读写的最小单元), 因此每个柱面的 容量为 255×63×512 字节=8225280 字节。

当然在对磁盘进行分区( Partition )前,磁盘是无法用来存储数据的。事实上, 对磁盘进行分区的作用就是告诉操作系统磁盘可存储数据的区域,也即每个分区 的起始柱面和结束柱面。这些分区信息都包括在一个叫做分区表(Partition Table) 的数据结构中。

分区表是一块磁盘中最重要的数据,分区表一般存储在磁盘的 0 磁道上面 (所以当一个硬盘的 0 磁道发生了物理损坏的时,这个硬盘就基本宣告寿终正 寝了),硬盘仅仅为分区表保留了 64 个字节的存储空间,而每个分区的参数占据 16 个字节,故主引导扇区中总计可以存储 4 个分区的数据,,这就是主分区 (Primary)+扩展分区(Extended) 最多只能有四个的原因了。

注意要查询一下自己的硬盘格式,用

df -T

三、分区和格式化硬盘

fdisk

图文教学:https://www.cnblogs.com/boshen-hzb/p/6669016.html?utm_source=itdadao&utm_medium=referral

执行:fdisk /dev/sdb

p:打印分区表.

n:新建一个新分区.

d:删除一个新分区.

q:退出不保存.

w:退出且保存

步骤:

  1. 输入n,进行创建分区
  2. 出现两个选项,p代表着主分区,e代表着拓展分区.先试着创建一个主分区。所有输入p
  3. 办入p后,会让输入主分区号,默认为1,1-4表示只能创建4分主分区,这里直接按回车,表示选择1.然后再按回车,表示起始扇面号从2048开始,即从未使用的地方开始
  4. 要求输入尾部扇面号,这里我们输入:+10G,即第一个主分区的大小为10G,然后回车,第一个分区就建好了。
  5. 继续输入p可以看到分好的分区,sdb1
  6. 接下来再创建一个10G的逻辑分区。必须先建立一个拓展分区,在这里就把所有的剩余空间给这个拓展分区了.键入”n”,然后键入”e”,表示创建拓展分区,然后再键入”2”,表示选择分区的编号为2,键入两次”回车”,代表把所有的可用空间分给这个拓展分区.

接下来对sdb1和sdb5进行格式化成ext4格式。

[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb5
或者:
mkfs.xfs /dev/sdb

parted

教学: https://www.thegeekstuff.com/2011/09/parted-command-examples/

四、分个大于2T的硬盘

如果一个大于2T的硬盘分区的话,会提示如下的错误:

# fdisk /dev/sdb
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

    WARNING: The size of this disk is 5.9 TB (5908688535552 bytes).
    DOS partition table format can not be used on drives for volumes
    larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
    partition table format (GPT).

那如何来划分出1个大于2T的分区呢?

4.1 创建2T的分区

# fdisk /dev/sdb1
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-718357, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349):
Using default value 267349

这样,2T的分区就被建立了

Command (m for help): p

Disk /dev/sdb: 5908.7 GB, 5908688535552 bytes
255 heads, 63 sectors/track, 718357 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3dffd626

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   83  Linux

4.2 建立gpt的分区表

GPT stands for GUID partition table format (GPT).

# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print
Error: /dev/sdb: unrecognised disk label

(parted) mklabel gpt

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags


# parted /dev/sdb

(parted) mkpart primary 0GB 5909GB

(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  5909GB  5909GB               primary

然后查看,fdisk分区的一个状态:

# fdisk /dev/sdb

Command (m for help): print

Disk /dev/sdb: 5908.7 GB, 5908688535552 bytes
255 heads, 63 sectors/track, 718357 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267350  2147483647+  ee  GPT

4.3 初始化

mkfs.xfs /dev/sdb

3.4 挂载

见下文

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学