Linux常用命令--磁盘管理之逻辑卷

摘要

  • 磁盘的挂载、分区、格式化、扩容等命令

  • 本文基于AWS EC2 EBS CentOS8(x86_64)

写在前面

  • 逻辑卷不支持MBRGPT分区,但通过MBRGPT分区后的子分区可以被加入到物理卷组,从而扩展原有逻辑分区或者创建新的逻辑分区

  • 逻辑卷与普通的磁盘和分区一样,同样支持重新挂载到ec2,不过要将组成逻辑卷和物理卷组的所有磁盘都挂载到ec2后才有效

挂载新的逻辑卷

1.aws控制台–>卷–>创建一个新卷,注意选择可用区,然后点击操作–>挂载卷–选择对应的ec2实例

2.ssh 登录 ec2,以下操作全责root下进行,初始磁盘情况如下

1
2
3
4
5
6
7
8
9
10
11
$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 532K 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/xvda1 xfs 100G 13G 88G 13% /
tmpfs tmpfs 393M 0 393M 0% /run/user/1002
tmpfs tmpfs 393M 0 393M 0% /run/user/1001
tmpfs tmpfs 393M 0 393M 0% /run/user/1000
/dev/xvdf xfs 20G 53M 20G 1% /data

3.查看新挂载卷的名称,这里看到新挂载的卷名称为 xvdg

1
2
3
4
5
6
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 100G 0 disk
└─xvda1 202:1 0 100G 0 part /
xvdf 202:80 0 20G 0 disk /data
xvdg 202:96 0 10G 0 disk

4.创建新物理卷

1
2
3
4
5
6
7
# 创建新物理卷,可以先分区再创建,这里为了省事不进行分区,也就是说,物理卷可以通过磁盘或者磁盘的子分区进行创建
$ pvcreate /dev/xvdg
Physical volume "/dev/xvdg" successfully created.
# 查看当期所有物理卷(或使用 pvdisplay 命令)
pvs
PV VG Fmt Attr PSize PFree
/dev/sdg lvm2 --- 10.00g 10.00g

5.创建新物理卷组

1
2
3
4
5
6
7
# 创建新物理卷组,这里 vgnew 就是新卷组的名称
$ vgcreate vgnew /dev/xvdg
Volume group "vgnew" successfully created
# 查看卷组(或使用 命令)
vgs
VG #PV #LV #SN Attr VSize VFree
vgnew 1 0 0 wz--n- <10.00g <10.00g

6.创建新逻辑卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建新逻辑卷,lvnew 为自定义逻辑卷名称,一个物理卷组可以创建多个逻辑卷,重点看物理卷组的剩余空间
$ lvcreate -n lvnew -l 100%FREE vgnew # 这里的含义是将物理卷组中100%的剩余可用空间分配给新的逻辑卷,也可以只使用卷组的部分空余空间,如50%FREE,或者指定具体的容量:lvcreate -n lvnew -L 5G vgnew
Logical volume "lvnew" created.

# 查看当前所有逻辑卷(或使用 lvdisplay 命令)
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvnew vgnew -wi-a----- <10.00g

# 查看磁盘信息,注意此时创建的逻辑卷的全称为 vgnew-lvnew,与其对应的磁盘路径为 /dev/vgnew/lvnew ,其TYPE为 lvm,这里说一下TYPE: disk-磁盘卷,part-分区卷,lvm-逻辑卷
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 100G 0 disk
└─xvda1 202:1 0 100G 0 part /
xvdf 202:80 0 20G 0 disk /data
xvdg 202:96 0 10G 0 disk
└─vgnew-lvnew 253:0 0 10G 0 lvm /new_data

7.格式化新卷

7.1 xfs

1
2
3
4
5
6
7
8
9
10
$ mkfs.xfs /dev/vgnew/lvnew
meta-data=/dev/vgnew/lvnew isize=512 agcount=4, agsize=655104 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0
data = bsize=4096 blocks=2620416, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

7.2 ext4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ mkfs.ext4 /dev/vgnew/lvnew
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620416 blocks
131020 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

8.创建新路径并将新卷挂载上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ mkdir /new_data
$ mount /dev/vgnew/lvnew /new_data
$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 544K 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/xvda1 xfs 100G 13G 88G 13% /
/dev/xvdf xfs 20G 53M 20G 1% /data
tmpfs tmpfs 393M 0 393M 0% /run/user/1002
tmpfs tmpfs 393M 0 393M 0% /run/user/1001
tmpfs tmpfs 393M 0 393M 0% /run/user/1000
/dev/mapper/vgnew-lvnew xfs 10G 43M 10G 1% /new_data

9.永久挂载卷

9.1 xfs

1
2
echo '/dev/mapper/vgnew-lvnew  /new_data xfs    defaults    0  0' >> /etc/fstab
mount -a

9.2 ext4

1
2
echo '/dev/mapper/vgnew-lvnew  /new_data ext4    defaults    0  0' >> /etc/fstab
mount -a

添加新的磁盘到存在的逻辑卷

1.添加新的磁盘,步骤同1,2,3,新卷名称 xvdh,注意物理卷的方式扩容只能添加新的磁盘,不支持修改ebs容量的方式进行扩容

1
2
3
4
5
6
7
8
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 100G 0 disk
└─xvda1 202:1 0 100G 0 part /
xvdf 202:80 0 20G 0 disk /data
xvdg 202:96 0 10G 0 disk
└─vgnew-lvnew 253:0 0 10G 0 lvm /new_data
xvdh 202:112 0 10G 0 disk

2.创建新物理卷

1
2
3
4
5
6
7
8
# 创建新物理卷,可以先分区再创建,这里为了省事不进行分区
$ pvcreate /dev/xvdh
Physical volume "/dev/xvdh" successfully created.
# 查看当期所有物理卷(或使用 pvdisplay 命令)
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdg vgnew lvm2 a-- <10.00g 0
/dev/sdh lvm2 --- 10.00g 10.00g

3.扩展已有卷组

1
2
3
4
5
6
7
8
9
10
11
12
# 将新的物理卷 /dev/sdh 加入卷组 vgnew
$ vgextend vgnew /dev/sdh
Volume group "vgnew" successfully extended
# 查看当前所有物理卷(或使用 pvdisplay 命令)
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdg vgnew lvm2 a-- <10.00g 0
/dev/sdh vgnew lvm2 a-- <10.00g <10.00g
# 查看卷组(或使用 vgdisplay 命令),此次可以看到卷组中剩余可用空间 VFree和总大小 VSize
$ vgs
VG #PV #LV #SN Attr VSize VFree
vgnew 2 1 0 wz--n- 19.99g <10.00g

4.扩容已有逻辑卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 将卷组中的剩余空间添加到指定逻辑卷
$ lvextend -l +100%FREE /dev/vgnew/lvnew
Size of logical volume vgnew/lvnew changed from <10.00 GiB (2559 extents) to 19.99 GiB (5118 extents).
Logical volume vgnew/lvnew successfully resized.

# 可以加上 -r,自动更新文件系统
$ lvextend -r -l +100%FREE /dev/vgnew/lvnew
Size of logical volume vgnew/lvnew changed from 509.99 GiB (130558 extents) to <519.99 GiB (133117 extents).
Logical volume vgnew/lvnew successfully resized.
meta-data=/dev/mapper/vgnew-lvnew isize=512 agcount=817, agsize=163776 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=133691392, imaxpct=25
= sunit=1 swidth=1 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 133691392 to 136311808

5.更新文件系统,上面的扩展逻辑卷名称加上 -r 后,就不需要执行的命令了

5.1 xfs

1
2
3
4
5
6
7
8
9
10
11
$ xfs_growfs /dev/vgnew/lvnew
meta-data=/dev/mapper/vgnew-lvnew isize=512 agcount=4, agsize=655104 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=2620416, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2620416 to 5240832

5.2 ext4

1
2
3
4
5
$ resize2fs /dev/mapper/vgnew-lvnew
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vgnew-lvnew is mounted on /new_data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/vgnew-lvnew is now 5240832 blocks long.

5.3 查看结果

1
2
3
4
5
6
7
8
9
10
11
12
$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 548K 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/xvda1 xfs 100G 13G 88G 13% /
/dev/xvdf xfs 20G 53M 20G 1% /data
tmpfs tmpfs 393M 0 393M 0% /run/user/1002
tmpfs tmpfs 393M 0 393M 0% /run/user/1001
tmpfs tmpfs 393M 0 393M 0% /run/user/1000
/dev/mapper/vgnew-lvnew xfs 20G 53M 20G 1% /new_data