本节介绍MBR分区格式和fdisk这一分区工具。

1、硬盘分区格式

我们以前讲过文件的元数据:记录了文件的各种属性信息。同样的,硬盘的分区信息是不是也要占用一部分存储空间呢?答案是肯定的,因为硬盘总得知道:我分了几个区,每个分区从哪里开始到哪里结束。存放这些信息当然需要空间了。

存放的关于分区信息的数据我们称之为分区表。常见的分区表有两种格式:MBR与GPT。

其中,MBR是过去很长一段时间的标准,但是随着时代的发展他也凸显了一些瓶颈和问题,比如默认只有四个标准分区(可以通过扩展分区的方式弥补)、最大只支持2T的硬盘(这一点随着4K扇区硬盘的出现有所缓解,理论最大可提升至16T)。但是它目前仍然占据着较大的市场份额,并且拥有最好的兼容性;

而GPT则是后起之秀,它解决了上文提及的MBR的相关瓶颈限制,不过一些较旧的操作系统不支持这一格式。硬件兼容性方面,有些开机启动程序也不认识GPT格式。

对于MBR格式的分区,我们通常使用fdisk。对于GPT格式的分区,我们常使用parted和gdisk(parted也支持mbr形式)。本节介绍MBR格式的分区表和fdisk。此外,虽然机械硬盘与固态硬盘在物理形态上截然不同,但是从分区的逻辑维度上看是即为相似的,且机械硬盘相对好理解,因此本节和下一节介绍分区时以机械硬盘为例,必要时对固态硬盘的相关机制作简要说明。

2、MBR分区格式

MBR全称为Master Boot Record(主引导记录)。MBR被存储于0磁道0扇区,该扇区的大小为512比特。MBR可以分为三部分:

引导加载器(boot load),硬盘被识别的地方。占用446byte空间。

分区表:记录了有多少个分区,每个分区从哪里开始到哪里结束。一共64byte。其中每16byte标识一个分区,因此,一块硬盘最多只能有4个主分区。

最后2byte:结束标志,标示前面510个byte是不是有效的。

如果一块硬盘需要划分超过4个分区,则可以将其中一个16byte当做扩展分区的分区表。扩展分区能够指向别的扇区做分区表。扩展分区本身并不能格式化,我们需要在扩展分区之上进行再分区(这样的分区叫做逻辑分区)。

所以使用MBR分区表的磁盘,最多使用四个主分区或者3个主分区+1个扩展分区(N个逻辑分区)

3、MBR分区工具:fdisk

fdisk命令:

1、查看磁盘的分区信息:

fdisk -l [-u] [device...]:列出指定磁盘设备上的分区情况;

2、管理分区

fdisk device

fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘上;

常用命令:

n:创建新分区

d:删除已有分区

t:修改分区类型

l:查看所有已知分区类型

w:保存并退出

q:不保存并退出

m:查看帮助信息

p:显示现有分区信息

举例:

首先我们在centos7的虚拟机上新增一块硬盘(添加前请先将虚拟机关机)

打开虚拟机,可以看到/dev/下有sdb了。

[root@localhost ~]# ls /dev/sd*

/dev/sda /dev/sda1  /dev/sda2  /dev/sdb

[root@localhost ~]#

如下,进入fdisk交互界面,m可以获取帮助,当你记不清相关指令的时候,m一下就能跳出相对详细的说明了:

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, untilyou decide to write them.

Be careful before using the write command.

Device does not contain a recognizedpartition table

Building a new DOS disklabel with diskidentifier 0x45cdafba.

Command (m for help): m

Command action

a   toggle a bootable flag

b   edit bsd disklabel

c   toggle the dos compatibilityflag

d   delete a partition

g   create a new empty GPTpartition table

G   create an IRIX (SGI) partitiontable

l   list known partition types

m   print this menu

n   add a new partition

o   create a new empty DOSpartition table

p   print the partition table

q   quit without saving changes

s   create a new empty Sundisklabel

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 (expertsonly)

Command (m for help):

让我们来创建一个10G的主分区:

Command (m for help): n

Partition type:

p   primary (0 primary, 0extended, 4 free)

e   extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-41943039, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G}(2048-41943039, default 41943039): +10G

Partition 1 of type Linux and of size 10GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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 / 512bytes

Disk label type: dos

Disk identifier: 0x45cdafba

Device Boot      Start         End      Blocks  Id  System

/dev/sdb1            2048    20973567   10485760   83  Linux

Command (m for help):

首先我们键入n表示要新建分区,然后选择主分区。系统提问从哪个扇区开始,使用了默认的2048扇区,之后问从哪里结束,我们使用+10G表示这个分区的大小。分区完毕后使用p显示目前的分区状况。我们可以看到sdb已经有一个分区:sdb1了。注意,此时只是写进内存,并没有真的生效。要使其真正生效需要键入w,放弃此次分区就键入q

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]#

这个时候查看/dev下的硬盘设备,发现多出了sdb1

[root@localhost ~]# ls /dev/sd*

/dev/sda /dev/sda1  /dev/sda2  /dev/sdb /dev/sdb1

[root@localhost ~]#

注意:创建的新分区,内核可能在创建完成后无法直接识别;查看分区是否已经识别,可以去查看/proc/partitions中的信息。/proc是一个伪文件系统,进阶部分我们会详细阐述:

[root@localhost ~]# cat /proc/partitions

major minor #blocks  name

8        0   20971520 sda

8        1    1048576 sda1

8        2   19921920 sda2

8       16   20971520 sdb

8       17   10485760 sdb1

11        0     927744 sr0

253       0   17821696 dm-0

253       1    2097152 dm-1

[root@localhost ~]#

我们可以看到内核已经识别了,如果没识别,使用以下方法(建议连续执行两次):

Centos5(6、7也可以使用):

partprobe [DEVICE]

Centos6/7:

partx -a [DEVICE]

你也可以选择重启,但依赖重启并不是一个好习惯,或者说是个坏习惯。能不重启就别重启。

接着我们继续创建2个主分区,并创建扩展分区,再在扩展分区之上建立逻辑分区:

[root@localhost /]# fdisk /dev/sdb

Command (m for help): n

Partition type:

p   primary (1 primary, 0extended, 3 free)

e   extended

Select (default p): p

Partition number (2-4, default 2):

First sector (20973568-41943039, default20973568):

Using default value 20973568

Last sector, +sectors or +size{K,M,G}(20973568-41943039, default 41943039): +1G

Partition 2 of type Linux and of size 1 GiBis set

Command (m for help): n

Partition type:

p   primary (2 primary, 0extended, 2 free)

e   extended

Select (default p): p

Partition number (3,4, default 3):

First sector (23070720-41943039, default23070720):

Using default value 23070720

Last sector, +sectors or +size{K,M,G}(23070720-41943039, default 41943039): +1G

Partition 3 of type Linux and of size 1 GiBis set

Command (m for help): n

Partition type:

p   primary (3 primary, 0extended, 1 free)

e   extended

Select (default e): e

Selected partition 4

First sector (25167872-41943039, default25167872):

Using default value 25167872

Last sector, +sectors or +size{K,M,G}(25167872-41943039, default 41943039):

Using default value 41943039

Partition 4 of type Extended and of size 8GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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 / 512bytes

Disk label type: dos

Disk identifier: 0x45cdafba

Device Boot      Start         End      Blocks  Id  System

/dev/sdb1            2048    20973567   10485760   83  Linux

/dev/sdb2        20973568    23070719    1048576   83  Linux

/dev/sdb3        23070720    25167871    1048576   83  Linux

/dev/sdb4        25167872    41943039    8387584    5 Extended

Command (m for help):

创建扩展分区(sdb4)之后,再在其上建立逻辑分区

Command (m for help): n

All primary partitions are in use

Adding logical partition 5

First sector (25169920-41943039, default25169920):

Using default value 25169920

Last sector, +sectors or +size{K,M,G}(25169920-41943039, default 41943039): +5G

Partition 5 of type Linux and of size 5 GiBis set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 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 / 512bytes

Disk label type: dos

Disk identifier: 0x45cdafba

Device Boot      Start         End      Blocks  Id  System

/dev/sdb1            2048    20973567   10485760   83 Linux

/dev/sdb2        20973568    23070719    1048576   83  Linux

/dev/sdb3        23070720    25167871    1048576   83  Linux

/dev/sdb4        25167872    41943039    8387584    5  Extended

/dev/sdb5        25169920    35655679    5242880   83  Linux

w保存退出并生效

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost /]#

4、SSD与fdisk

机械硬盘的最小存取单位是sector,有512byte和4K之分。机械硬盘最小存取单位是page,通常为4k。这个时候存在一个对齐的说法(想象一下,4k的数据完全可以用1个page去存放。如果不对齐,4k的数据可能会写在2个page中,8K的数据可能会交错在3个page中。这就导致,以4K数据为例:从物理上看,对齐了只要读一个page的内容,不对齐可能要读3个page的内容。降低了读写效率)。

在centos7中,使用的是新版的fdisk,通过本文的介绍大家可以看到:使用新版fdisk分区时,询问你的是从那个sector开始(可以理解为与SSD的page相对应),因此在新版的fdisk中,是可以实现自动对齐的。之后给大家介绍的parted、gdisk都是可以实现自动对齐的。

而在老版本的fdisk(如centos6中),则没有那么幸运了,如果你用过就会发现,老版fdisk标注分区的始末使用的不是sector而是cylinder,是不会自动和SSD对齐的。因此如果你想保证高效率,你得在网上找各种资料,保证分区时进行了对齐。

本节内容就到这里,下一节介绍GPT分区与parted分区工具

关注本公众号获取每日更新

Linux入门真经-029MBR格式分区与fdisk相关推荐

  1. linux centos fedora 扩展硬盘分区操作命令 fdisk df lvm pvcreate vgcreate lvcreate

    linux centos fedora 扩展 硬盘分区 lvm fdisk df pvcreate vgcreate lvcreate 操作 命令 一.硬盘分区 在Linux系统中一个硬盘分区上限为1 ...

  2. Linux下分区格式ext3,Windows下读取Linux的ext3/ext4格式分区

    ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...

  3. linux分区文件ext4和ext3,Windows下读取Linux的ext3/ext4格式分区

    ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...

  4. linux入门--磁盘管理之分区、格式化与挂载

    前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...

  5. Linux入门真经-032文件系统的创建与管理

    本节介绍文件系统的创建与一些文件系统管理的相关知识. 1.创建文件系统 新建文件系统常用的是mkfs命令. mkfs说全了其实是:make filesystem 用法: mkfs.FILESYSTEM ...

  6. Linux入门真经-036LVM逻辑卷原理与创建

    ​有时候我们会面临这样一个窘境:分区内的数据快速增长,分区剩余空间几乎不够用了.这个时候你可能得想办法找个更大的硬盘或者分区,把数据挪过去,费时费力.有时候分区一开始分大了,很多空间又浪费了. 是否有 ...

  7. Linux入门真经-037LVM逻辑卷扩容与快照

    本节介绍如何对LVM进行扩容. 1.扩展LV 上一节我们创建了两个PV:20G的sdb和5G的sdc1,并将他们组合成一个25G的VG:vgpool1,最后在vgpool1之上创建了一个20G的LV: ...

  8. Linux入门真经-049IPV6介绍

    本文为大家介绍IPV6,是启蒙类文章,也是网络基础部分的最后一篇纯讲原理的文章.(预警:本节篇幅略长,且学习过程可能引起强烈不适,如果觉得很煎熬,通读一遍有个印象即可(本文无实验),不用强求过多,毕竟 ...

  9. linux不识别ntfs分区,WinUbuntu下linux无法挂载NTFS格式分区问题的解决

    小生今天想打开电脑完善一下Linux报告,结果在进入Ubuntu系统时显示无法挂载我两个装着windows系统的两个ntfs分区.一开始直接进入了手动修复界面一时间也不知道要敲什么代码.就急着重启了, ...

最新文章

  1. 关于Python类属性与实例属性的讨论
  2. Spark Streaming初步使用以及工作原理详解
  3. [转]Flask --- 框架快速入门
  4. python-turtle库-01
  5. socket编程(十一)
  6. KR C C90,C99的改进
  7. 单目深度估计论文(1)— Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (NIPS 2014)
  8. 给char赋超过范围的值会发生什么
  9. 计算机开机一直无法访问,电脑开机时显示:AutoIt 错误 不能打开脚本文件 如何处理...
  10. 互联网晚报 | 7月14日 星期四 |微博将整治用谐音字变体字传播不良信息;恒丰银行回应破产传闻;消息称字节正大量招聘芯片工程师...
  11. Google镜像搭建:利用 Cloudflare Workers 搭建访问谷歌镜像站点,可自行绑定域名
  12. mysql numeric 区别_Mysql中NUMERIC和DECIMAL类型区别比较
  13. 开源版本_开源绘画应用 Pinta 在 5 年后迎来新版本 | Linux 中国
  14. .playground文件_部署可教学机器:Circuit Playground Express,Arduino,P5.js,TinyUSB
  15. Nexus升级、license安装和恢复密码
  16. 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理
  17. 可弯可折的LED柔性软模组,柔出异形屏显示新创意。
  18. 西部大开发,青海得到了什么?
  19. 厦门大学701语言文学基础考研参考书目
  20. DSP芯片的定点运算之数的定标Q格式(转)

热门文章

  1. 基于CAN总线的汽车诊断协议UDS的开发重点
  2. kotlin-Android开发依赖库
  3. 封装性 `public,protected,private的关系
  4. Vue使用vue-print-nb打印,并去除页眉页脚,打开打印窗口自动打印
  5. 计算机考试操作题怎么做,计算机考试操作题的做法
  6. Open Inventor: Windows系统下编译安装Quater
  7. mysql中quarter_MySQL里获取当前week、month、quarter,以及date(),date_format()和str_to_date(),DATEDIFF()操作...
  8. 2022年最新版大数据面试题全面总结-持续更新
  9. Ubuntu桥接网络配置
  10. 三十六、服务定位器模式 (Service Locator Pattern)