找回密码
 立即注册
搜索
查看: 595|回复: 0

逻辑卷管理 LVM

[复制链接]

267

主题

0

回帖

1156

积分

管理员

积分
1156
发表于 2023-12-26 00:08:55 | 显示全部楼层 |阅读模式

当你发现某个文件夹满到放不下新文件时,又不能放到其他文件夹和分区,应该会想到加块儿硬盘吧。可以如何将新硬盘合并到即将满了的分区呢?LVM,逻辑卷管理(Logical Volume Manager),它是 Linux 环境下对磁盘分区进行管理的一种机制,可以提高磁盘分区的灵活性。很牛的一点是,LVM 允许在不停机的情况下伸缩文件系统的大小,这在服务器上十分重要。

LVM 的几个概念

  • 物理存储介质(PhysicalStorageMedia)
    指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
  • 物理卷(Physical Volume,PV)
    指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如 RAID),是 LVM 的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与 LVM 相关的管理参数。
  • 卷组(Volume Group,VG)
    类似于非 LVM 系统中的物理磁盘,其由一个或多个物理卷 PV 组成。可以在卷组上创建一个或多个 LV(逻辑卷)。
  • 逻辑卷(Logical Volume,LV)
    类似于非 LVM 系统中的磁盘分区,逻辑卷建立在卷组 VG 之上。在逻辑卷 LV 之上可以建立文件系统(比如 /home 或者 /usr 等)。
  • 物理块(Physical Extent,PE)
    PE 是物理卷 PV 的基本划分单元,具有唯一编号的 PE 是可以被 LVM 寻址的最小单元。PE 的大小是可配置的,默认为 4 MB。所以物理卷(PV)由大小等同的基本单元 PE 组成。
  • 逻辑块(Logical Extent,LE)
    逻辑卷 LV 也被划分为可被寻址的基本单位,称为 LE。在同一个卷组中,LE 的大小和 PE 是相同的,并且一一对应。

准备物理卷(PV)

创建物理卷

提示:直接操作磁盘有风险,请根据实际情况来!

pvcreate /dev/sda

查看物理卷

pvdisplay

  "/dev/sda" is a new physical volume of "<2.73 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda
  VG Name               
  PV Size               <2.73 TiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               IXSvwr-TOUv-4GJ9-Pzzi-mB0P-VM3h-Zl5eHu

删除物理卷

pvremove /dev/sda

准备卷组(VG)

创建卷组

vgcreate vg1 /dev/sda /dev/sdb1 /dev/sdb2

查看卷组

vgdisplay

  --- Volume group ---
  VG Name               vg1
  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               <5.46 TiB
  PE Size               4.00 MiB
  Total PE              1430792
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1430792 / <5.46 TiB
  VG UUID               GPQkyt-yEGc-wpKr-ks28-mkJO-b9MF-sA7JHu

缩容卷组

vgreduce vg1 /dev/sdc

通过删除 LVM 卷组中的物理卷来减少卷组容量,但不能删除 LVM 卷组中剩余的最后一个物理卷。

先使用 pvs 命令检查是否使用了:

pvs -o +pv_used
  PV         VG  Fmt  Attr PSize  PFree  Used
  /dev/sda   vg1 lvm2 a--  <2.73t <2.73t   0 
  /dev/sdc   vg1 lvm2 a--  <2.73t <2.73t   0

如果物理卷已经被使用了,则必须使用 pvmove 命令将数据传输到另一个物理卷,然后将其从卷组中删除。

扩容卷组

vgextend vg1 /dev/sdc

删除卷组

vgremove vg1

准备逻辑卷(LV)

创建逻辑卷

lvcreate -L 100M -n lv1 vg1 # 创建 100 M 大小名为 lv1 的逻辑卷
lvcreate -l 100%VG -n lv1 vg1 # 创建占全部卷组大小的逻辑卷
lvcreate -l 100%FREE -n lv1 vg1 # 创建 100% 剩余空间大小的逻辑卷

查看逻辑卷

lvdisplay
                                                                                --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                3f8r8Z-Ybw8-nIyQ-fAnA-cRIy-RXcU-J9935d
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2022-03-22 11:24:18 +0000
  LV Status              available
  # open                 0
  LV Size                <5.46 TiB
  Current LE             1430792
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

/dev/vg1 这个文件夹是创建 LV 后才被创建的。除了 /dev/vg1/lv1 还会创建一个 /dev/mapper/vg1-lv1 他们都是软链接,链接到了 /dev/dm0

此时查看使用情况:

pvs -o +pv_used                                                                             PV         VG  Fmt  Attr PSize  PFree Used  
  /dev/sda   vg1 lvm2 a--  <2.73t    0  <2.73t
  /dev/sdc   vg1 lvm2 a--  <2.73t    0  <2.73t

可见,创建完 LV 后两块儿磁盘就 100% 被使用了。

像使用物理卷那样使用逻辑卷 /dev/vg1/lv1 就可以了:

mkfs.ext4 /dev/vg1/lv1 # 格式化
mkdir /data && chattr +i /data # 创建挂载点
mount /dev/vg1/lv1 /data

缩容逻辑卷

缩容是个细致活,不能大意了,否则数据可能丢失。主要有 5 步:

  1. 卸载要操作的文件系统

    umount /dev/vg1/lv1
  2. 检查修复文件系统错误

    e2fsck -f /dev/vg1/lv1
    
    e2fsck 1.45.5 (07-Jan-2020)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/vg1/lv1: 12/183144448 files (0.0% non-contiguous), 11836033/1465131008 blocks

    这个命令要根据文件系统的类型来选择了,本文用的是 ext4 文件系统。

  3. 缩小文件系统

    resize2fs /dev/vg1/lv1 4T # 将文件系统缩小为 4 TB
    
    resize2fs 1.45.5 (07-Jan-2020)
    Resizing the filesystem on /dev/vg1/lv1 to 1073741824 (4k) blocks.
    The filesystem on /dev/vg1/lv1 is now 1073741824 (4k) blocks long.

    如果要查看调整后的大小,可以使用 dumpe2fs -h /dev/vg1/lv1 命令,不过要计算一下才能得到结果:Block count * Block size (bytes)

    echo "1073741824 * 4096 / 1024 / 1024 / 1024" | bc
    4096 # 这是我调整后的结果,4T
  4. 缩小逻辑卷大小

    lvreduce -L 4T /dev/vg1/lv1 # 将逻辑卷缩小为 4 TB
    
    lvdisplay # 查看调整后的大小
    
     --- Logical volume ---
     LV Path                /dev/vg1/lv1
     LV Name                lv1
     VG Name                vg1
     LV UUID                3f8r8Z-Ybw8-nIyQ-fAnA-cRIy-RXcU-J9935d
     LV Write Access        read/write
     LV Creation host, time ubuntu, 2022-03-22 11:24:18 +0000
     LV Status              available
     # open                 0
     LV Size                4.00 TiB
     Current LE             1048576
     Segments               2
     Allocation             inherit
     Read ahead sectors     auto
     - currently set to     256
     Block device           253:0

    也可以使用 lvresize -L 4T /dev/vg1/lv1 命令来调整大小。

  5. 挂载文件系统并使用

    mount /dev/vg1/lv1 /data

扩容逻辑卷

扩容相对来说更容易一些,不需要 umount 文件系统。

查看卷组 VG 空闲空间状态:

vgdisplay

  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <5.46 TiB
  PE Size               4.00 MiB
  Total PE              1430792
  Alloc PE / Size       1048576 / 4.00 TiB
  Free  PE / Size       382216 / <1.46 TiB
  VG UUID               GPQkyt-yEGc-wpKr-ks28-mkJO-b9MF-sA7JHu

可以看到空闲的 PE 数量是 382216。

扩展卷大小,使用全部的空闲空间:

lvextend -l +382216 /dev/vg1/lv1

这里使用了加号来增加空间。扩展卷同样也可以使用 lvresize 命令。

扩展文件系统,使用全部的卷空间:

df -h
/dev/mapper/vg1-lv1  4.0T   89M  3.8T   1% /data
resize2fs /dev/vg1/lv1
df -h
/dev/mapper/vg1-lv1  5.5T   72M  5.2T   1% /data

可以看到扩展前后文件系统的大小发生了预期的变化。

删除逻辑卷

lvremove /dev/vg1/lv1

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-23 16:23 , Processed in 0.020536 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表