Linux入门真经-029MBR格式分区与fdisk
本节介绍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相关推荐
- linux centos fedora 扩展硬盘分区操作命令 fdisk df lvm pvcreate vgcreate lvcreate
linux centos fedora 扩展 硬盘分区 lvm fdisk df pvcreate vgcreate lvcreate 操作 命令 一.硬盘分区 在Linux系统中一个硬盘分区上限为1 ...
- Linux下分区格式ext3,Windows下读取Linux的ext3/ext4格式分区
ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...
- linux分区文件ext4和ext3,Windows下读取Linux的ext3/ext4格式分区
ext3/ext4等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.下面将介绍2款可以在 Windows 系统下读取 Linux 的 ext3/ext4 格式分 ...
- linux入门--磁盘管理之分区、格式化与挂载
前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...
- Linux入门真经-032文件系统的创建与管理
本节介绍文件系统的创建与一些文件系统管理的相关知识. 1.创建文件系统 新建文件系统常用的是mkfs命令. mkfs说全了其实是:make filesystem 用法: mkfs.FILESYSTEM ...
- Linux入门真经-036LVM逻辑卷原理与创建
有时候我们会面临这样一个窘境:分区内的数据快速增长,分区剩余空间几乎不够用了.这个时候你可能得想办法找个更大的硬盘或者分区,把数据挪过去,费时费力.有时候分区一开始分大了,很多空间又浪费了. 是否有 ...
- Linux入门真经-037LVM逻辑卷扩容与快照
本节介绍如何对LVM进行扩容. 1.扩展LV 上一节我们创建了两个PV:20G的sdb和5G的sdc1,并将他们组合成一个25G的VG:vgpool1,最后在vgpool1之上创建了一个20G的LV: ...
- Linux入门真经-049IPV6介绍
本文为大家介绍IPV6,是启蒙类文章,也是网络基础部分的最后一篇纯讲原理的文章.(预警:本节篇幅略长,且学习过程可能引起强烈不适,如果觉得很煎熬,通读一遍有个印象即可(本文无实验),不用强求过多,毕竟 ...
- linux不识别ntfs分区,WinUbuntu下linux无法挂载NTFS格式分区问题的解决
小生今天想打开电脑完善一下Linux报告,结果在进入Ubuntu系统时显示无法挂载我两个装着windows系统的两个ntfs分区.一开始直接进入了手动修复界面一时间也不知道要敲什么代码.就急着重启了, ...
最新文章
- 关于Python类属性与实例属性的讨论
- Spark Streaming初步使用以及工作原理详解
- [转]Flask --- 框架快速入门
- python-turtle库-01
- socket编程(十一)
- KR C C90,C99的改进
- 单目深度估计论文(1)— Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (NIPS 2014)
- 给char赋超过范围的值会发生什么
- 计算机开机一直无法访问,电脑开机时显示:AutoIt 错误 不能打开脚本文件 如何处理...
- 互联网晚报 | 7月14日 星期四 |微博将整治用谐音字变体字传播不良信息;恒丰银行回应破产传闻;消息称字节正大量招聘芯片工程师...
- Google镜像搭建:利用 Cloudflare Workers 搭建访问谷歌镜像站点,可自行绑定域名
- mysql numeric 区别_Mysql中NUMERIC和DECIMAL类型区别比较
- 开源版本_开源绘画应用 Pinta 在 5 年后迎来新版本 | Linux 中国
- .playground文件_部署可教学机器:Circuit Playground Express,Arduino,P5.js,TinyUSB
- Nexus升级、license安装和恢复密码
- 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理
- 可弯可折的LED柔性软模组,柔出异形屏显示新创意。
- 西部大开发,青海得到了什么?
- 厦门大学701语言文学基础考研参考书目
- DSP芯片的定点运算之数的定标Q格式(转)
热门文章
- 基于CAN总线的汽车诊断协议UDS的开发重点
- kotlin-Android开发依赖库
- 封装性 `public,protected,private的关系
- Vue使用vue-print-nb打印,并去除页眉页脚,打开打印窗口自动打印
- 计算机考试操作题怎么做,计算机考试操作题的做法
- Open Inventor: Windows系统下编译安装Quater
- mysql中quarter_MySQL里获取当前week、month、quarter,以及date(),date_format()和str_to_date(),DATEDIFF()操作...
- 2022年最新版大数据面试题全面总结-持续更新
- Ubuntu桥接网络配置
- 三十六、服务定位器模式 (Service Locator Pattern)