Linux基础笔记18 | 磁盘分区管理

fdisk 分区工具

fdisk 这个古老的软件并不认识 GPT ,所以 fdisk 只支持 MBR 的分区模式,且磁盘小于2T,大于了就不能使用 fdisk 进行分区了

新磁盘的分区

一块新加的磁盘的分区方式

检查系统中需要分区的磁盘

fdisk -l

image-20220907220428959

对新磁盘进行磁盘分区

fdisk /dev/sdb

进入交互式分区界面

image-20220907220625795

键入 m 获取帮助信息

image-20220907220701505

常用的命令选项

  • 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

image-20220907222203289

格式化新建的分区

mkfs.xfs /dev/sdb1 或者mkfs.ext4 /dev/sdb1 不同文件系统类型(正常来说不应该加 -f ,-f 意思是强制覆盖现有的文件系统)

image-20220907223413095

最后挂载使用

mount /dev/sdb1 /home/ceshi/:将分区 sdb1 挂载在 /home/ceshi 目录下

image-20220907223639182

以上就是完整的一个新磁盘从分区到被系统使用的一个参考过程!

原有磁盘基础上分区

有时候会遇到有些磁盘还剩一点空间,需要在原来基础上增加分区,具体可以参考以下分区流程

确定待增加分区的磁盘信息

fdisk -l

image-20220908084955612

进入分区交互界面

image-20220908085153734

接着分新的分区即可

[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

image-20220908085949160

再格式化成对应的文件系统,挂载使用就行

df -h

image-20220908090636319

逻辑分区的参考

按照我们之前说的,MBR 方式的分区最多支持4个分区,如何进行更多分区操作呢?

先看下 “p+p+p+p” 情况下继续分区的情况

提示如果要创建4个以上的分区,必须使用一个扩展分区类型

image-20220908095548294

我们删除一个主分区,创建一个扩展分区,通过扩展分区创建出逻辑分区

命令(输入 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

image-20220908100314297

实验以下扩展分区大小是否限制了逻辑分区大小

确实是和扩展分区大小相关联的

image-20220908100512844

基于命令行非交互式创建分区方法

方法参考:

Linux管理文件系统(2):分区和创建文件系统 | 骏马金龙 (junmajinlong.com)

基于表述输出和管道传输

现在对一块完整的磁盘进行演示

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]#

image-20220908101603325

parted 分区工具

为了能支持大于2T的磁盘空间,需要使用 GPT 格式进行分区,需要用到 parted 工具了

  • parted 工具,每一步操作都是直接写入磁盘的,不同于 fdisk 和 gdisk 需要从内存的结果保存到磁盘中

新磁盘下的分区

进入 parted 分区界面

parted /dev/sdb

image-20220908102807100

键入”help“查看帮助

image-20220908103004045

进行分区操作

(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.

查看分区后的信息

image-20220908104828179

格式化后挂载文件系统使用

mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /home/ceshi

image-20220908105043710

原有磁盘下继续分区

进入交互式中

parted /dev/sdb

image-20220908105159355

键入 print 打印分区信息

image-20220908105241567

分区过程

(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

image-20220908105553911

多个分区的实验

来看看 gpt 下能够分区的数量

重复上面的操作进行分区操作,可以看到我分出来了很多很多主分区,基本不受限制了

image-20220908110151995

基于命令行非交互式创建分区

一次只能一个动作

parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart p xfs 1 10G
parted /dev/sdb mkpart p xfs 10G 20G

image-20220908110908767

LVM 磁盘分区管理

LVM 相关概念与实现机制

Logical Volume Manager:LVM ,弹性分区,随时随地对分区进行扩缩容

  • 大多数发行版都会内置这个东西
  • 基于内核的一种逻辑卷管理器
  • 适用于管理大存储设备

相关概念

  1. PV:Physical Volume 物理卷

    • 磁盘分区后还未格式化成文件系统的时候可以通过 pvcreate 命令创建为 pv
    • pv 要求分区的 system ID为 8e,即 LVM 格式的系统标识符

    image-20220908122937533

  2. VG:Volume Group 卷组

    • 多个 PV 组合起来,通过 vgcreate 命令创建成卷组
    • 创建 VG 的时候,会将所有空间按照指定大小的 PE 划分为很多个 PE
    • LVM 模式下的存储都是以 PE 为单元
  3. PE:Physical Extend

    • 数据都是存储的地方
  4. LV:Logical Volume

    • VG 中有很多 PE 单元,可以指定多少个 PE 或者大小来再次划分,划分后统称为 LV,LV 就相当于划分了分区了,对 LV 在进行文件系统格式化就可以拿来使用了
  5. 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

image-20220908144818873

先使用 fdisk 进行标准化分区,不需要格式化

image-20220908145115670

其中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]#

image-20220908150359185

创建一个测试 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]#

格式化成文件系统并挂载使用

image-20220908151232373

image-20220908151312631

LVM 的扩容操作

扩容的实质

  • 将 vg 中闲置的 PE 添加到 lv 中
  • 没有闲置的 pe,可以添加 pv,将 pv 空间加入到 vg 中

实验操作1参考:vg 中还有未被使用的 pe

  1. 查看 vg 中的使用情况:还有2862 个 pe 没有使用,大约11G大小

    image-20220908152623858

  2. 直接将闲置的 pe 添加到 lv 中:-l 使用PE数量进行添加;-L 使用大小进行添加

    image-20220908152927579

  3. 调整文件系统大小:is OK

    image-20220908153233609

实验操作2参考:vg 中没有可分配的 pe

  1. 查看 vg 中的使用情况:用完了

    image-20220908153426135

  2. 用完了我们就需要把额外的 pv 添加到 vg 当中去

    • 再利用分区出来的 sdb3 和sdb4 创建一个 pv

    image-20220908153734205

    • 创建 pv

    image-20220908153802897

    • 将创建好的 pv 添加到 vg 中

    image-20220908154007491

  3. 再次查看 vg 的使用情况:有了闲置的 pe

    image-20220908154146604

  4. 对 lv 进行添加后,重新调整文件系统大小:is ok

    image-20220908154348403

LVM 的缩容操作

理论来说,我们不考虑磁盘的缩容操作

  • 只能用 ext4 的文件格式来演示
  • xfs 的文件系统只能扩容,不能缩容,如果要缩容,就只能备份数据后,删掉重建 lv,再把数据恢复过去

我们先把之前的操作都撤销

其实也不必如此,就当练习了

image-20220908155435318

我们再来创建基于 ext4 类型的文件系统

image-20220908160008811

image-20220908160040526

查看 LVM 基本相关信息:我们要将 /dev/sdb4 的10G这个磁盘给缩容掉

image-20220908160244173

先卸载设备

image-20220908160637294

使用 resize2fs 收缩文件系统的容量为目标大小

image-20220908161000119

缩容 lv

image-20220908161109939

再次查看 PV 上的闲置 PE情况

闲置的 pe 分布在sdb3 和sdb4上,所以我们就可以直接直接移除sdb4的pv

image-20220908161326587

从 vg 中移除 pv

image-20220908161711337

再删除 pv 就可以了:又是一个正常的分区

image-20220908161758531

验证一下缩容后的是否能够正常使用:is OK

image-20220908162147828

image-20220908162216146

LVM 中的 snapshot 快照技术

参考链接:使用LVM | 骏马金龙 (junmajinlong.com)

  • 类似于软件的还原时间点功能
  • 针对某一个lv逻辑卷操作
  • 快照卷的大小应该尽量等同于 LV 逻辑卷的容量
  • 功能仅一次有效,一旦被还原后则会自动立即删除

先看下LVM 中的 VG 信息

可以看到已经使用了2000个PE,大约7.8个G,还剩大约12个G

image-20220908173326560

在挂载目录下准备文件

image-20220908173248092

生成快照卷

  • -L 参数指定切割大小

image-20220908173539053

查看快照卷

image-20220908173629031

模拟数据故障

image-20220908173700342

挂载快照

问题处理:无法挂载这个磁盘(2个逻辑卷使用的UUID一样了,xfs文件系统不允许,加参数再挂载一下)

image-20220908173856299

image-20220908174609124

image-20220908174723700

还原数据

可以从挂载点里面拷贝数据过去了,这就是最简单的使用方法了

image-20220908175010439

合并快照的方式

  1. 准备好测试数据

image-20220908183458379

  1. 做一下快照

image-20220908183547256

  1. 模拟故障

image-20220908183634023

  1. 卸载逻辑卷挂载点和快照卷

image-20220908183728004

  1. 合并快照(要确定卸载了挂载点):合并以后就会删除快照

image-20220908183948711

  1. 重新挂载逻辑卷:被破坏的数据恢复了

image-20220908184128222

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值