fdisk 分区工具
fdisk 这个古老的软件并不认识 GPT ,所以 fdisk 只支持 MBR 的分区模式,且磁盘小于2T,大于了就不能使用 fdisk 进行分区了
新磁盘的分区
一块新加的磁盘的分区方式
检查系统中需要分区的磁盘
fdisk -l
对新磁盘进行磁盘分区
fdisk /dev/sdb
进入交互式分区界面
键入 m 获取帮助信息
常用的命令选项
- d:删除一个分区
- n:添加一个新分区
- q:退出而不保存更改
- w:将分区表写入磁盘并退出
- m:打印帮助菜单
- p:打印分区表信息
- v:验证分区表
分区过程
命令(输入 m 获取帮助):n # n:新建一个分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # p:分区类型是主分区
分区号 (1-4,默认 1):1 # 选择分区号
起始 扇区 (2048-104857599,默认为 2048): # 起始扇区(默认就好)
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+10G # 分区大小
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w # 写入磁盘并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@vm10 ~]#
查看新建的分区
fdisk -l
格式化新建的分区
mkfs.xfs /dev/sdb1
或者mkfs.ext4 /dev/sdb1
不同文件系统类型(正常来说不应该加 -f ,-f 意思是强制覆盖现有的文件系统)
最后挂载使用
mount /dev/sdb1 /home/ceshi/
:将分区 sdb1 挂载在 /home/ceshi 目录下
以上就是完整的一个新磁盘从分区到被系统使用的一个参考过程!
原有磁盘基础上分区
有时候会遇到有些磁盘还剩一点空间,需要在原来基础上增加分区,具体可以参考以下分区流程
确定待增加分区的磁盘信息
fdisk -l
进入分区交互界面
接着分新的分区即可
[root@vm10 home]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n # 键入 n
Partition type:
p primary (1 primary, 0 extended, 3 free) # 键入 p
e extended
Select (default p): p
分区号 (2-4,默认 2): # 默认回车就行
起始 扇区 (20973568-104857599,默认为 20973568): # 默认回车就行
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-104857599,默认为 104857599):+10G # 设置分区大小
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 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@vm10 home]#
[root@vm10 home]# partprobe /dev/sdb
如遇到以上报错信息可通过partprobe /dev/sdb
解决
partprobe 命令用于重读分区表,将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表。
查看新的分区信息
fdisk -l
再格式化成对应的文件系统,挂载使用就行
df -h
逻辑分区的参考
按照我们之前说的,MBR 方式的分区最多支持4个分区,如何进行更多分区操作呢?
先看下 “p+p+p+p” 情况下继续分区的情况
提示如果要创建4个以上的分区,必须使用一个扩展分区类型
我们删除一个主分区,创建一个扩展分区,通过扩展分区创建出逻辑分区
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e ## 键入 e 创建出一个扩展分区
已选择分区 4
起始 扇区 (62916608-104857599,默认为 62916608):
将使用默认值 62916608
Last 扇区, +扇区 or +size{K,M,G} (62916608-104857599,默认为 104857599):+10G # 设置扩展分区大小
分区 4 已设置为 Extended 类型,大小设为 10 GiB
命令(输入 m 获取帮助):n ## 再次创建新分区,这个时候就是逻辑分区了
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (62918656-83888127,默认为 62918656):
将使用默认值 62918656
Last 扇区, +扇区 or +size{K,M,G} (62918656-83888127,默认为 83888127):+5G ## ;逻辑分区大小不超过扩展分区
分区 5 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 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@vm10 home]# partprobe /dev/sdb
实验以下扩展分区大小是否限制了逻辑分区大小
确实是和扩展分区大小相关联的
基于命令行非交互式创建分区方法
方法参考:
基于表述输出和管道传输
现在对一块完整的磁盘进行演示
echo -e "n\np\n1\n\n+10G\nw"|fdisk /dev/sdb
- \n:换行,所以基于命令行的分区方式很简单的
- 新建分区–分区类型为主分区–分区号是1–起始扇区回车选择默认–分区大小是10G–保存更改信息
[root@vm10 home]# echo -e "n\np\n1\n\n+10G\nw"|fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): 分区号 (1-4,默认 1):起始 扇区 (2048-104857599,默认为 2048):将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@vm10 home]#
parted 分区工具
为了能支持大于2T的磁盘空间,需要使用 GPT 格式进行分区,需要用到 parted 工具了
- parted 工具,每一步操作都是直接写入磁盘的,不同于 fdisk 和 gdisk 需要从内存的结果保存到磁盘中
新磁盘下的分区
进入 parted 分区界面
parted /dev/sdb
键入”help“查看帮助
进行分区操作
(parted) mklabel ## 设置分区类型为 gpt
新的磁盘标签类型? gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want
to continue?
是/Yes/否/No? yes
(parted) mkpart ## 开始分区
分区名称? []? p ## 分区类型
文件系统类型? [ext2]? xfs ## 文件系统类型
起始点? 1 ## 磁盘的1M开始分区,默认单位是1M
结束点? 10G ## 到10GB的位置截至
(parted)
(parted) q ## 退出
信息: You may need to update /etc/fstab.
查看分区后的信息
格式化后挂载文件系统使用
mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /home/ceshi
原有磁盘下继续分区
进入交互式中
parted /dev/sdb
键入 print 打印分区信息
分区过程
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 10.0GB 9999MB xfs p
(parted) mkpart ## 开始分区
分区名称? []? p ## 分区类型
文件系统类型? [ext2]? xfs ## 文件系统
起始点? 10000 ## 起始点:上一个分区下一个点
结束点? 20G ## 空间大小
(parted) print ## 打印分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 10.0GB 9999MB xfs p
2 10.0GB 20.0GB 9999MB p
(parted)
格式化后挂载使用
mkfs.xfs -f /dev/sdb2
mount /dev/sdb2 /home/ceshi1
多个分区的实验
来看看 gpt 下能够分区的数量
重复上面的操作进行分区操作,可以看到我分出来了很多很多主分区,基本不受限制了
基于命令行非交互式创建分区
一次只能一个动作
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart p xfs 1 10G
parted /dev/sdb mkpart p xfs 10G 20G
LVM 磁盘分区管理
LVM 相关概念与实现机制
Logical Volume Manager:LVM ,弹性分区,随时随地对分区进行扩缩容
- 大多数发行版都会内置这个东西
- 基于内核的一种逻辑卷管理器
- 适用于管理大存储设备
相关概念
-
PV:Physical Volume 物理卷
- 磁盘分区后还未格式化成文件系统的时候可以通过 pvcreate 命令创建为 pv
- pv 要求分区的 system ID为 8e,即 LVM 格式的系统标识符
-
VG:Volume Group 卷组
- 多个 PV 组合起来,通过 vgcreate 命令创建成卷组
- 创建 VG 的时候,会将所有空间按照指定大小的 PE 划分为很多个 PE
- LVM 模式下的存储都是以 PE 为单元
-
PE:Physical Extend
- 数据都是存储的地方
-
LV:Logical Volume
- VG 中有很多 PE 单元,可以指定多少个 PE 或者大小来再次划分,划分后统称为 LV,LV 就相当于划分了分区了,对 LV 在进行文件系统格式化就可以拿来使用了
-
LE:logical extent
- LV 中的逻辑存储单元,和 PE 大小是一样的,从 VG 中划分 LV,就是分配 PE 单元,只不过划分 LV 后,PE 就被称之为 LE 了
实现机制
- 一个简单的图解
- LV 中的 PE 可能来自多个 PV,在向 LV 写入数据时候,分几种机制
- 线性模式:先写完来自于同一个PV 的 PE,再写来自下一个 PV 的 PE
- 条带模式:一份数据拆分成多份,分别写入该 LV 对应的每个 PV 中,读写性能好
- 默认使用的线性模式,因为扩缩容方便,LVM 最有用的也就是动态扩缩容
LVM 相关命令解析
PV
命令 | 说明 |
---|---|
pvcreate | 创建 PV |
pvscan | 列出所有的 PV |
pvdisplay | 列出 PV 属性 |
pvremove | 移除 PV |
pvmove | 移除 PV 中的数据 |
[root@vm10 home]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID LeNFHF-2miV-2oYy-KDxG-Y0JQ-V2eS-ldi1ny
--- Physical volume ---
PV Name /dev/sda3
VG Name centos
PV Size 80.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 20479
Free PE 1279
Allocated PE 19200
PV UUID 7QUzi3-FbDr-m3ud-YYOn-7IFS-gCmk-3IVEDW
[root@vm10 home]# pvscan
PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free]
PV /dev/sda3 VG centos lvm2 [<80.00 GiB / <5.00 GiB free]
Total: 2 [98.99 GiB] / in use: 2 [98.99 GiB] / in no VG: 0 [0 ]##PV 的总容量/已经使用的/未使用的
[root@vm10 home]# pvdisplay -m
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID LeNFHF-2miV-2oYy-KDxG-Y0JQ-V2eS-ldi1ny
--- Physical Segments ---
Physical extent 0 to 511: ## 0-511个PE在使用
Logical volume /dev/centos/swap
Logical extents 0 to 511 ## 该PE在LV中的第0个LE位置上,这个地方是用满了的
Physical extent 512 to 4862:
Logical volume /dev/centos/root
Logical extents 0 to 4350
--- Physical volume ---
PV Name /dev/sda3
VG Name centos
PV Size 80.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 20479
Free PE 1279
Allocated PE 19200
PV UUID 7QUzi3-FbDr-m3ud-YYOn-7IFS-gCmk-3IVEDW
--- Physical Segments ---
Physical extent 0 to 19199: ## 0-19199个PE在使用
Logical volume /dev/centos/root
Logical extents 4351 to 23550 ## PE在第4351个LE位置上
Physical extent 19200 to 20478: ## 19200-20478序号的PE没被使用
FREE
[root@vm10 home]#
VG
命令 | 说明 |
---|---|
vgcreate | 创建 VG |
vgscan | 列出所有的 VG |
vgdisplay | 列出 VG 属性 |
vgremove | 移除 VG,删除 VG |
vgreduce | 从 VG 中移除 PV |
vgextend | 将 PV 添加到 VG 中 |
vgchange | 修改 VG 属性 |
- vgscan 搜寻有几个 vg 并显示 vg 的基本属性
- vgcreate 是创建 vg
- vgdisplay 是列出 vg 的详细信息
- vgremove 是删除整个v g
- vgextend 用于扩展 vg 即将 pv 添加到 vg 中
- vgreduce 是将 pv 移除出 vg
- vgchange 用于改变 vg 的属性,如修改 vg 的状态为激活状态或未激活状态
LV
命令 | 说明 |
---|---|
lvcreate | 创建 LV |
lvscan | 扫描并列出所有的 LV |
lvdisplay | 列出 LV 属性信息 |
lvremove | 移除 LV,即删除 LV |
lvreduce(lvresize) | 缩小 LV 容量 |
lvextend(lvresize) | 增大 LV 容量 |
lvresize | 改变 LV 容量 |
LVM 分区过程参考
根据上述的命令操作方法,来进行一个 LVM 分区过程
查看需要进行分区的磁盘信息
fdisk -l
先使用 fdisk 进行标准化分区,不需要格式化
其中2个分区创建一个 PV
[root@vm10 home]# pvcreate /dev/sdb1 /dev/sdb2
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb2.
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
[root@vm10 home]#
创建一个测试 VG
[root@vm10 home]# vgcreate test_vg /dev/sdb{1,2}
Volume group "test_vg" successfully created
[root@vm10 home]# vgdisplay test_vg
--- Volume group ---
VG Name test_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID 3YMuNV-Jxmr-rgdN-gl5z-YRRw-IGq1-gSiZqW
[root@vm10 home]#
创建 lv
[root@vm10 home]# lvcreate -n test_lv1 -L 1G test_vg ## -n指定lv名称 -L 指定大小 -l 指定PE数量
Logical volume "test_lv1" created.
[root@vm10 home]# lvcreate -n test_lv2 -l 2000 test_vg
Logical volume "test_lv2" created.
[root@vm10 home]# lvdisplay
--- Logical volume ---
LV Path /dev/test_vg/test_lv1
LV Name test_lv1
VG Name test_vg
LV UUID 1A2yQf-9Mr7-ri1Y-gzK4-oyj6-Nr4C-WEjQ43
LV Write Access read/write
LV Creation host, time vm10, 2022-09-08 15:08:47 +0800
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/test_vg/test_lv2
LV Name test_lv2
VG Name test_vg
LV UUID OM2Jvm-uYDa-9LMH-8uhP-QVwo-vqF5-LUMK3E
LV Write Access read/write
LV Creation host, time vm10, 2022-09-08 15:09:18 +0800
LV Status available
# open 0
LV Size 7.81 GiB
Current LE 2000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID SGdwb8-TfNw-arTQ-ic4M-OwAB-1G68-PMYdBS
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-07-20 13:57:18 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID 3GSliK-ZJFv-hKnR-756n-z1wR-bUfc-2c0tiU
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-07-20 13:57:19 +0800
LV Status available
# open 1
LV Size <92.00 GiB
Current LE 23551
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@vm10 home]#
格式化成文件系统并挂载使用
LVM 的扩容操作
扩容的实质
- 将 vg 中闲置的 PE 添加到 lv 中
- 没有闲置的 pe,可以添加 pv,将 pv 空间加入到 vg 中
实验操作1参考:vg 中还有未被使用的 pe
-
查看 vg 中的使用情况:还有2862 个 pe 没有使用,大约11G大小
-
直接将闲置的 pe 添加到 lv 中:-l 使用PE数量进行添加;-L 使用大小进行添加
-
调整文件系统大小:is OK
实验操作2参考:vg 中没有可分配的 pe
-
查看 vg 中的使用情况:用完了
-
用完了我们就需要把额外的 pv 添加到 vg 当中去
- 再利用分区出来的 sdb3 和sdb4 创建一个 pv
- 创建 pv
- 将创建好的 pv 添加到 vg 中
-
再次查看 vg 的使用情况:有了闲置的 pe
-
对 lv 进行添加后,重新调整文件系统大小:is ok
LVM 的缩容操作
理论来说,我们不考虑磁盘的缩容操作
- 只能用 ext4 的文件格式来演示
- xfs 的文件系统只能扩容,不能缩容,如果要缩容,就只能备份数据后,删掉重建 lv,再把数据恢复过去
我们先把之前的操作都撤销
其实也不必如此,就当练习了
我们再来创建基于 ext4 类型的文件系统
查看 LVM 基本相关信息:我们要将 /dev/sdb4 的10G这个磁盘给缩容掉
先卸载设备
使用 resize2fs 收缩文件系统的容量为目标大小
缩容 lv
再次查看 PV 上的闲置 PE情况
闲置的 pe 分布在sdb3 和sdb4上,所以我们就可以直接直接移除sdb4的pv
从 vg 中移除 pv
再删除 pv 就可以了:又是一个正常的分区
验证一下缩容后的是否能够正常使用:is OK
LVM 中的 snapshot 快照技术
- 类似于软件的还原时间点功能
- 针对某一个lv逻辑卷操作
- 快照卷的大小应该尽量等同于 LV 逻辑卷的容量
- 功能仅一次有效,一旦被还原后则会自动立即删除
先看下LVM 中的 VG 信息
可以看到已经使用了2000个PE,大约7.8个G,还剩大约12个G
在挂载目录下准备文件
生成快照卷
- -L 参数指定切割大小
查看快照卷
模拟数据故障
挂载快照
问题处理:无法挂载这个磁盘(2个逻辑卷使用的UUID一样了,xfs文件系统不允许,加参数再挂载一下)
还原数据
可以从挂载点里面拷贝数据过去了,这就是最简单的使用方法了
合并快照的方式
- 准备好测试数据
- 做一下快照
- 模拟故障
- 卸载逻辑卷挂载点和快照卷
- 合并快照(要确定卸载了挂载点):合并以后就会删除快照
- 重新挂载逻辑卷:被破坏的数据恢复了