高级磁盘管理07 — 相关命令与创建LVM

概述

本章,您将学习 LVM 的相关命令以及创建 LVM。

相关命令

如下表所示:

功能项 PV VG LV
扫描 pvscan vgscan lvscan
创建 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
移除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩减 vgreduce lvreduce
查阅信息 pvs vgs lvs

上一篇我们提到「PV 的最小存储单位为 PE」,换言之,LV 能够实现动态扩容或动态缩容,其实就是增加或者减少组成该 LV 中 PE 的数量。

上述命令都是由 lvm2 软件包释放出来,若您的操作系统中没有该软件包,请执行以下操作:

Shell > dnf -y install lvm2

创建 LVM 的步骤

创建 LVM 的步骤:

  1. 将物理磁盘或磁盘分区初始化为 PV
  2. 将一个或多个 PV 加入到相应的 VG 中
  3. 在 VG 中创建一个或多个 LV
  4. 对这些 LV 执行格式化与挂载操作

创建 LVM

准备工作

因为服务器通常都支持「热插拔」技术,所以管理员可在开机的操作系统上直接插入新硬盘。

注:仅 SCSI 和 SATA 接口标准的磁盘支持「热插拔」,消费级 m.2 NVME 协议的固态硬盘通常不支持「热插拔」,企业级 U.2/U.3 NVME 协议的固态硬盘支持「热插拔」

# 假设您在 Vmware Workstation 中添加了两块 硬盘,每块硬盘 10GB
## 操作系统中的 udev 识别这两块硬盘分别为 sdb 和 sdc

# 使用 parted 进行分区操作:
Shell > lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0   47G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sdb      8:16   0   10G  0 disk
sdc      8:32   0   10G  0 disk
sr0     11:0    1 13.2G  0 rom

Shell > parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  10.7GB  10.7GB               primary

(parted) quit
Information: You may need to update /etc/fstab.

Shell > parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdc: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  10.7GB  10.7GB               primary

(parted) quit
Information: You may need to update /etc/fstab.

Shell > lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0   47G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sdb      8:16   0   10G  0 disk
└─sdb1   8:17   0   10G  0 part
sdc      8:32   0   10G  0 disk
└─sdc1   8:33   0   10G  0 part
sr0     11:0    1 13.2G  0 rom

初始化为 PV

Shell > pvcreate /dev/sd{b,c}1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.

查阅相关信息:

Shell > pvscan
  PV /dev/sdb1                      lvm2 [<10.00 GiB]
  PV /dev/sdc1                      lvm2 [<10.00 GiB]
  Total: 2 [<20.00 GiB] / in use: 0 [0   ] / in no VG: 2 [<20.00 GiB]

# VG 列为空
Shell > pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sdb1     lvm2 ---  <10.00g <10.00g
  /dev/sdc1     lvm2 ---  <10.00g <10.00g

# VG Name 行空值
Shell > pvdisplay /dev/sdb1 /dev/sdc1
  "/dev/sdb1" is a new physical volume of "<10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               VDv64B-L8sD-iO3F-lnPK-FkNp-XN9D-1V1RW0

  "/dev/sdc1" is a new physical volume of "<10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               <10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               FC85SS-Biip-VBji-YJpv-La87-0ecW-JppGQ0

通过查阅信息可知,我们这里的 PV 并没有加入到 VG 中。

创建 VG

需要将一个或多个 PV 加入到 VG 中,创建 VG 的命令语法为:

vgcreate <VG-name> <PV> ...

比如,我需要创建一个 vg01 且让 /dev/sdb1 和 /dev/sdc1 加入其中:

Shell > vgcreate vg01 /dev/sd{b,c}1
  Volume group "vg01" successfully created

再次查阅相关信息:

# 如您所见,默认 PE 为 4MiB
Shell > vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  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               jFqzMt-lCMo-eLC1-0oJa-uqzf-M66U-KpuXMA

# VG 列有了值
Shell > pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  vg01 lvm2 a--  <10.00g <10.00g
  /dev/sdc1  vg01 lvm2 a--  <10.00g <10.00g

Shell > vgscan
  Found volume group "vg01" using metadata type lvm2

创建 LV

创建 LV 需要使用 lvcreate 命令,其基本语法为:

lvcreate -n <name> -L <size> <VG-name>

相关选项:

  • -n <name> – 指定逻辑卷名称
  • -L <size> – 指定 LV 的大小,支持 M、G 等单位后缀,请注意这里的单位后缀都是 1024 进制,如 1G=1GiB
  • -l <PE-number> – 从 PE 数量的角度指定 LV 大小
  • <VG-name> – 指定从哪个 VG 中划分 LV

vgdisplay vg01 命令的输出可以看到,我们可以操作的容量大小为 19.99GiB,对应可操作的 PE 数量为 5118。

假设我需要从 vg01 中划分出两个 lv,第一个 lv 为 1GiB,剩余的容量划分给第二个 lv:

Shell > lvcreate -n lv01 -L 1G vg01
  Logical volume "lv01" created.

Shell > vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  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       256 / 1.00 GiB
  Free  PE / Size       4862 / 18.99 GiB
  VG UUID               jFqzMt-lCMo-eLC1-0oJa-uqzf-M66U-KpuXMA

Shell > lvcreate -n lv02 -l 4862 vg01
  Logical volume "lv02" created.

Shell > pvscan
  PV /dev/sdb1   VG vg01            lvm2 [<10.00 GiB / 0    free]
  PV /dev/sdc1   VG vg01            lvm2 [<10.00 GiB / 0    free]
  Total: 2 [19.99 GiB] / in use: 2 [19.99 GiB] / in no VG: 0 [0   ]

Shell > vgscan
  Found volume group "vg01" using metadata type lvm2

Shell > lvscan
  ACTIVE            '/dev/vg01/lv01' [1.00 GiB] inherit
  ACTIVE            '/dev/vg01/lv02' [18.99 GiB] inherit

Q: 创建完 LV 后,设备的命名是什么样的?

其遵循这样的命名规范:

/dev/<VG-name>/<LV-name>

# 或者

/dev/dm-0
/dev/dm-1
...

# 或者

/dev/mapper/<VG-name>-<LV-name>
# 如您所见,/dev/vg01/lv01 是 /dev/dm-0 的软链接(符号链接)
Shell > ls -l /dev/vg01/lv0?
lrwxrwxrwx 1 root root 7 Jun 17 23:22 /dev/vg01/lv01 -> ../dm-0
lrwxrwxrwx 1 root root 7 Jun 17 23:23 /dev/vg01/lv02 -> ../dm-1

使用 LVM

写入文件系统并执行挂载操作:

# 格式化
Shell > mkfs -t ext4 /dev/vg01/lv01
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 8eb731eb-1bda-4863-9430-b3cb46ea2507
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

# 格式化
Shell >  mkfs -t ext4 /dev/vg01/lv02
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 4978688 4k blocks and 1245184 inodes
Filesystem UUID: c8958bf4-001e-4bc0-8116-fab989475d81
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

# 临时挂载
Shell > mkdir -p /lv{01,02}
Shell > mount -t ext4 /dev/vg01/lv01 /lv01/
Shell > mount -t ext4 /dev/vg01/lv02 /lv02/

Shell > df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
...
/dev/mapper/vg01-lv01 ext4      974M   24K  907M   1% /lv01
/dev/mapper/vg01-lv02 ext4       19G   24K   18G   1% /lv02

若您需要让挂载永久生效,可写入到 /etc/fstab 文件中,比如:

/dev/mapper/vg01-lv01  /lv01                   ext4    defaults        0 5
/dev/mapper/vg01-lv02  /lv02                   ext4    defaults        0 6
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇