硬盘分区fdisk,partd命令用法详解
Linux fdisk 分区命令详解
一、什么是分区?
分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。
分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
二、为什么要有多个分区?
-
防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。
-
增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。这时我们需要取这些文件大小的平均值进行区块大小的划分。
-
fdisk 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实 类Unix类操作系统的文件系统等。
-
数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起。
三、Linux fdisk
Linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。
fdisk是Linux下常用的磁盘分区工具。受mbr分区表的限制,fdisk工具只能给小于2TB的磁盘划分分区。如果使用fdisk对大于2TB的磁盘进行分区,虽然可以分区,但其仅识别2TB的空间,所以磁盘容量若超过2TB,就要使用parted分区工具
(后面会讲)进行分区。
fdisk [选项] [设备名]
分区工具fdisk用法介绍
fdisk命令参数介绍
p、打印分区表。
n、新建一个新分区。
d、删除一个分区。
q、退出不保存。
w、把分区写进分区表,保存并退出。
3.1 fdisk -l 显示所有磁盘分区的信息
如果有多个磁盘,会依次显示全部的磁盘,每个磁盘信息会列出其分区信息。
#fdisk -l
Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors '// 磁盘名称 /dev/vda 对应的总大小、 扇区个数'
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: 0x00040353 '// /dev/vda 划分的分区列表'
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1026047 512000 83 Linux '// 分区 /dev/vda1'
/dev/vda2 1026048 209715199 104344576 8e Linux LVM
参数解释:
- Device: 分区,这里有2个分区;
- Boot: 启动分区,
用*表示的是启动分区
;- Start: 表示开始的柱面:
- End: 表示结束的在面;
- Blocks:block 块数量;
- Id: 分区类型Id;
- System: 分区类型。
-
总磁盘大小: 107374182400 bytes(B) / 1024 = 104857600 KB / 1024 = 102400 MB / 1024 = 100 GB
-
每个柱面的大小Units: 512 bytes (这里一个柱面一个扇区)
-
扇区个数是sectors: 107374182400 bytes / 512 bytes = 209715200
-
/dev/vda1的大小是:柱面数=1026047(结束位置)-2048(起始位置) = 1023999 约等于1024000.
那么/dev/vda1的大小 = 1024000 × 512 bytes = 524288000 bytes / 1024 = 512000 K / 1024 = 500M
-
/dev/vda2的大小是:(209715199 - 1026048) × 512 bytes / 1024 / 1024 / 1024 = 99.5G
3.2指定特定分区
还可以直接指定特定分区查看信息。
Linux parted 分区命令详解
一、概述
通常我们用的比较多的分区工具是fdisk命令,但由于fdisk只支持MBR分区,MBR分区表最大支撑2T的磁盘,所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区。
parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具。GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4 16个字节,只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT分区方式没有四个主分区的限制,** 最多可达到128个主分区 **。下面我们看下parted命令的用法。
二、 语法结构
parted [选项]… [设备 [命令 [参数]…]…]
2.1.选项
三、操作命令
- parted交互命令 说 明
- check NUMBER 做一次简单的文件系统检测
- cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER 复制文件系统到另一个分区
- help [COMMAND] 显示所有的命令帮助
- mklabel,mktable LABEL-TYPE 创建新的磁盘卷标(分区表)
- mkfs NUMBER FS-TYPE 在分区上建立文件系统
- mkpart PART-TYPE [FS-TYPE] START END 创建一个分区
- mkpartfs PART-TYPE FS-TYPE START END 创建分区,并建立文件系统
- move NUMBER START END 移动分区
- name NUMBER NAME 给分区命名
- print [devices|free|list,all|NUMBER] 显示分区表、活动设备、空闲空间、所有分区
- quit 退出
- rescue START END 修复丢失的分区
- resize NUMBER START END 修改分区大小
- rm NUMBER 删除分区
- select DEVICE 选择需要编辑的设备
- set NUMBER FLAG STATE 改变分区标记
- toggle [NUMBER [FLAG]] 切换分区表的状态
- unit UNIT 设置默认的单位
- Version 显示版本
四、交互操作实例
4.1 选择分区硬盘
首先类似fdisk一样,先选择要分区的硬盘,此处为/dev/hdb: ((parted)表示在parted中输入的命令,其他为自动打印的信息)
[root@my-linux ~]# parted /dev/hdb
GNU Parted 1.8.1
Using /dev/hdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
4.2 创建分区
选择了/dev/hdb作为我们操作的磁盘,接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):
(parted) mklabel
New disk label type? gpt (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)
4.3 完成分区操作
创建好分区表以后,接下来就可以进行分区操作了,执行mkpart命令,分别输入分区名称,文件系统和分区的起止位置
(parted) mkpart
Partition name? []? dp1
File system type? [ext2]? xfs
Start? 0 (可以用百分比表示,比如Start? 0% , End? 50%)
End? 500GB
4.4 验证分区信息
分好区后可以使用print命令打印分区信息,下面是一个print的样例
(parted) print
Model: VBOX HARDDISK (ide)
Disk /dev/hdb: 3841GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB dp1
4.5 删除分区示例
如果分区错了,可以使用rm命令删除分区,比如我们要删除上面的分区,然后打印删除后的结果
(parted)rm 1 #rm后面使用分区的号码,就是用print打印出来的Number
(parted) print
Model: VBOX HARDDISK (ide)
Disk /dev/hdb: 3841GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
4.6 格式化操作
在交互状态下,完成以后我们可以使用quit
命令退出parted并使用系统的mkfs
命令对分区进行格式化。
[root@my-linux ~]# fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/hdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/hdb: 3841.0 GB, 3841022206976 bytes
255 heads, 63 sectors/track, 267349 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 1 267350 2147482623+ ee EFI GPT
[root@my-linux ~]# mkfs.xfs /dev/hdb1
[root@my-linux ~]# mkfs.xfs /dev/hdb2
[root@my-linux ~]# mkdir /data1 /data2
[root@my-linux ~]# mount /dev/hdb1 /data1
[root@my-linux ~]# mount /dev/hdb2 /data2
4.7 交互创建分区的完整示示例
按照上面的方法把整个硬盘都分好区,下面是一个分完后的样例
(parted) mkpart
Partition name? []? dp1
File system type? [ext2]? xfs
Start? 0
End? 500GB
(parted) mkpart
Partition name? []? dp2
File system type? [ext2]? xfs
Start? 500GB
End? 3841GB
(parted) print
Model: VBOX HARDDISK (ide)
Disk /dev/hdb: 3841GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB dp1
2 500GB 3841GB 1699GB dp2
五、非交互方式
5.1 创建分区表
parted /dev/sdl mklabel gpt
5.2 将硬盘所有容量分给主分区
parted /dev/sdl mkpart primary 0% 100%
5.3 查询磁盘的已有分区
parted /dev/sdl print
5.4 查询硬盘分区
fdisk -l
or
lsblk
5.5 格式化分区
mkfs -t xfs /dev/sdl1
文件系统EXT3,EXT4和XFS的区别:
EXT3
(1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
(2)Ext3目前只支持32000个子目录
(3)Ext3文件系统使用32位空间记录块数量和i-节点数量
(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
EXT4
EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。
(1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB
(2)理论上支持无限数量的子目录
(3)Ext4文件系统使用64位空间记录块数量和i-节点数量
(4)Ext4的多块分配器支持一次调用分配多个数据块
XFS
(1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
(2)采用优化算法,日志记录对整体文件操作影响非常小
(3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间
(4)能以接近裸设备I/O的性能存储数据
5.6 查询/dev/sdl1的blkid
blkid /dev/sdl1
5.7 修改/etc/fstab
vi /etc/fstab
编辑/etc/fstab
使开机可知道挂载文件系统。
5.8 挂载文件系统,查询
mount -a
df -h
六、非交互方式示例
6.1 创建gpt分区表
[root@my-linux ~]# parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.
6.2 划分3个分区
[root@my-linux ~]# parted /dev/sdb mkpart primary 0% 27%
Information: You may need to update /etc/fstab.
[root@my-linux ~]# parted /dev/sdb mkpart primary 27% 54%
Information: You may need to update /etc/fstab.
[root@my-linux ~]# parted /dev/sdb mkpart primary 54% 81%
Information: You may need to update /etc/fstab.
6.3 打印分区
[root@my-linux ~]# parted /dev/sdb print
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 3841GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2097kB 1037GB 1037GB primary
2 1037GB 2074GB 1037GB primary
3 2074GB 3111GB 1037GB primary
6.4 删除分区
删除分区的命令是parted /dev/sdb rm 1
其中最后的数字 1 表示分区编号。
[root@my-linux ~]# parted /dev/sdb rm 1
Information: You may need to update /etc/fstab.
[root@my-linux ~]# parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.
[root@my-linux ~]# parted /dev/sdb rm 3
Information: You may need to update /etc/fstab.
[root@my-linux ~]# parted /dev/sdb print
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 3841GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
[root@my-linux ~]#
七、MBR & GPT
MBR: MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区
GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破 MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。
八、parted 分区对齐报错
在使用parted
创建分区时产生告警信息, “Warning: The resulting partition is not properly aligned for best performance.”
这个问题Redhat官网有解析:https://access.redhat.com/mt/zh-hans/solutions/184143
8.1 问题
(parted) mkpart primary 128 1048575
Warning: You requested a partition from 128s to 1048575s.
The closest location we can manage is 128s to 1048542s.
Is this still acceptable to you?
Yes/No? Yes
Warning: The resulting partition is not properly aligned for best performance. <-----
Ignore/Cancel? C
忽略这个告警分区可以正常创建,只不过会影响磁盘性能。那么该如何创建一个正确对齐的分区呢?
8.2 解决方案
8.2.1 百分比
一般来说只要正确的选择分区开始的位置就可以解决这个问题,但需要查询和计算一下相应的参数。通常相较于使用明确的开始和结束位置使用百分比可以更容易使分区对齐。
mkpart primary 0% 100% or mkpart primary 0% 320GB 创建单个分区, 或
mkpart primary 0% 50% and mkpart primary 50% 100% 创建两个大小相等的分区。
8.2.2 1MiB偏移量
一般情况下,很大一部分磁盘的默认对齐粒度为1MiB,因此在大多数情况下,使用MiB作为mkpart中的单元就可以创建一个对齐的分区。由于磁盘空间上的第一个MiB包括0扇区中的遗留主引导记录(MBR)和紧随其后的gpt主表(如果是gpt类型),因此需要跳过磁盘上的第一个MiB,并从1MiB开始分区:
mkpart primary 1MiB 100% 例如,创建单个分区。
8.2.3 计算偏移量#
如果使用百分比或1MiB偏移量不起作用,可以通过查询设备相应的sysfs条目来直接计算所需的对齐
获取如下值:
cat /sys/block/sdb/queue/optimal_io_size
cat /sys/block/sdb/alignment_offset
cat /sys/block/sdb/queue/physical_block_size
获取正确的偏移扇区数是将 optimal_io_size
和 alignment_offset
相加然后除以 physical_block_size
.
For example:
optimal_io_size = 1310720
alignment_offset = 0
physical_block_size = 512
i.e 1310720+0/512 = 2560
现在创建分区的命令可以是:
(parted) mkpart primary 2560 100% OR
(parted) mkpart primary 2560 1000G