逻辑卷基本概念

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 物理卷(PV, Physical Volume),是LVM的基本存储逻辑块,通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质(如分区、磁盘等)相比,物理卷包含有和LVM相关的管理参数。
  • 卷组(VG, Volume Group),是一个逻辑的存储空间,由一个或多个物理卷组成。
  • 逻辑卷(LV, Logical Volume),是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘,那么逻辑卷则可以类比为一个硬盘分区,所以也可以在逻辑卷之上创建文件系统。

简单地说:卷组由多个物理卷组成,可以在卷组中创建多个逻辑卷,对逻辑卷创建文件系统给用户使用。

逻辑卷基本管理

创建物理卷

# 创建单个PV
[root@server ~ 15:03:07]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
# 此次创建多个PV
[root@server ~ 15:03:34]# pvcreate /dev/sd{c,d}
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
# 查看PV列表
[root@server ~ 15:04:14]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <19.00g     0 
  /dev/sdb          lvm2 ---   20.00g 20.00g
  /dev/sdc          lvm2 ---   20.00g 20.00g
  /dev/sdd          lvm2 ---   20.00g 20.00g
# 查看单个PV详细信息
[root@server ~ 15:04:19]# pvdisplay /dev/sdb
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               PTxy0G-5I3M-TTtw-RBgT-hDs6-QMDo-fmDbw1

创建卷组

# 创建包涵单个PV的VG
[root@server ~ 15:04:58]# vgcreate webapp /dev/sdb
  Volume group "webapp" successfully created
# 创建包涵多个PV的VG
[root@server ~ 15:06:47]# vgcreate dbapp /dev/sd{c,d}
  Volume group "dbapp" successfully created
[root@server ~ 15:07:13]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb   webapp lvm2 a--  <20.00g <20.00g
  /dev/sdc   dbapp  lvm2 a--  <20.00g <20.00g
  /dev/sdd   dbapp  lvm2 a--  <20.00g <20.00g
# 查看VG列表
[root@server ~ 15:07:18]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n- <19.00g      0 
  dbapp    2   0   0 wz--n-  39.99g  39.99g
  webapp   1   0   0 wz--n- <20.00g <20.00g
# 查看单个VG详细信息
[root@server ~ 15:07:39]# vgdisplay dbapp 
  --- Volume group ---
  VG Name               dbapp
  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               39.99 GiB
# PE,Physical Extend,是PV的最小存储单元。
# 在创建VG时,可通过-s选项设置。
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               qUxDPr-OmCC-KKMg-1NDQ-A0If-56xg-x2u6oA

创建逻辑卷

# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@server ~ 15:08:21]# lvcreate -n webapp01 -L 5G webapp
  Logical volume "webapp01" created.
# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@server ~ 15:09:32]# lvcreate -n data01 -L 25G dbapp
  Logical volume "data01" created.
# 查看LV列表
[root@server ~ 15:10:17]# lvs
  LV       VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     centos -wi-ao---- <17.00g                                                    
  swap     centos -wi-ao----   2.00g                                                    
  data01   dbapp  -wi-a-----  25.00g                                                    
  webapp01 webapp -wi-a-----   5.00g      

逻辑卷设备名支持以下三种格式:

  • /dev/vname/lvame
  • /dev/mapper/vname-lvame
  • /dev/dm-N
[root@server ~ 15:10:21]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01 
lrwxrwxrwx 1 root root 7 Jan  7 15:10 /dev/dbapp/data01 -> ../dm-3
lrwxrwxrwx 1 root root 7 Jan  7 15:10 /dev/mapper/dbapp-data01 -> ../dm-3
# 查看单个LV详细信息
[root@server ~ 15:11:25]# lvdisplay /dev/dbapp/data01 
  --- Logical volume ---
  LV Path                /dev/dbapp/data01
  LV Name                data01
  VG Name                dbapp
  LV UUID                Zn11fq-FhyT-TE7O-v3zk-UzD6-pyjd-zavikq
  LV Write Access        read/write
  LV Creation host, time server, 2026-01-07 15:10:17 +0800
  LV Status              available
  # open                 0
  LV Size                25.00 GiB
# LE,Logical Extend,是LV的最小存储单元。
# 通常一个LE对应于一个PE。
Current LE             6400
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@server ~ 15:11:47]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb   webapp lvm2 a--  <20.00g <15.00g
  /dev/sdc   dbapp  lvm2 a--  <20.00g      0 
  /dev/sdd   dbapp  lvm2 a--  <20.00g  14.99g

# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘
[root@server ~ 15:12:22]# lsblk /dev/sd{b..d}
NAME              MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb                 8:16   0  20G  0 disk 
└─webapp-webapp01 253:2    0   5G  0 lvm  
sdc                 8:32   0  20G  0 disk 
└─dbapp-data01    253:3    0  25G  0 lvm  
sdd                 8:48   0  20G  0 disk 
└─dbapp-data01    253:3    0  25G  0 lvm  

创建文件系统

[root@server ~ 15:13:35]# mkfs.xfs /dev/webapp/webapp01 
meta-data=/dev/webapp/webapp01   isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, 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
[root@server ~ 15:14:18]# mount /dev/webapp/webapp01 /var/www/html
mount: mount point /var/www/html does not exist
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstad文件。

清理

# 卸载文件系统
[root@server ~ 15:14:40]# umount /dev/webapp/webapp01

# 删除LV
[root@server ~ 15:15:16]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
  Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
  Logical volume "data01" successfully removed
  
# 删除VG
[root@server ~ 15:15:34]# vgremove webapp dbapp
  Volume group "webapp" successfully removed
  Volume group "dbapp" successfully removed
  
# 删除PV
[root@server ~ 15:15:39]# pvremove /dev/sd{b..d}
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.

挂载实验

[root@server ~ 15:24:49]# mkfs.xfs /dev/webapp/webapp01
[root@server ~ 15:26:11]# mkdir -p /usr/share/nginx/html
[root@server ~ 15:27:02]# mount /dev/webapp/webapp01 /usr/share/nginx/html/
[root@server ~ 15:27:29]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   20G  0 disk 
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   19G  0 part 
  ├─centos-root   253:0    0   17G  0 lvm  /
  └─centos-swap   253:1    0    2G  0 lvm  [SWAP]
sdb                 8:16   0   20G  0 disk 
└─webapp-webapp01 253:2    0    5G  0 lvm  /usr/share/nginx/html
sdc                 8:32   0   20G  0 disk 
└─dbapp-data01    253:3    0   25G  0 lvm  
sdd                 8:48   0   20G  0 disk 
└─dbapp-data01    253:3    0   25G  0 lvm  
sde                 8:64   0   20G  0 disk 
sdf                 8:80   0   20G  0 disk 
sdg                 8:96   0   20G  0 disk 
sr0                11:0    1  4.4G  0 rom  

[root@server ~ 15:27:38]# yum install -y nginx
[root@server ~ 15:28:17]# systemctl start nginx
[root@server ~ 15:28:39]# df -h /usr/share/nginx/html/
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01  5.0G   33M  5.0G   1% /usr/share/nginx/html
[root@server ~ 15:29:31]# ls /usr/share/nginx/html/
404.html  en-US  img         nginx-logo.png
50x.html  icons  index.html  poweredby.png
[root@server ~ 15:30:24]# echo Hello World from LVM. > /usr/share/nginx/html/index.html 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[root@server ~ 15:31:03]# umount /usr/share/nginx/html 
[root@server ~ 15:31:50]# lsblk 
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   20G  0 disk 
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   19G  0 part 
  ├─centos-root   253:0    0   17G  0 lvm  /
  └─centos-swap   253:1    0    2G  0 lvm  [SWAP]
sdb                 8:16   0   20G  0 disk 
└─webapp-webapp01 253:2    0    5G  0 lvm  
sdc                 8:32   0   20G  0 disk 
└─dbapp-data01    253:3    0   25G  0 lvm  
sdd                 8:48   0   20G  0 disk 
└─dbapp-data01    253:3    0   25G  0 lvm  
sde                 8:64   0   20G  0 disk 
sdf                 8:80   0   20G  0 disk 
sdg                 8:96   0   20G  0 disk 
sr0                11:0    1  4.4G  0 rom  
[root@server ~ 15:31:56]# lvremove /dev/webapp/webapp01 
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
  Logical volume "webapp01" successfully removed
[root@server ~ 15:32:30]# vgremove webapp 
  Volume group "webapp" successfully removed
[root@server ~ 15:32:41]# vgremove dbapp
Do you really want to remove volume group "dbapp" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
  Logical volume "data01" successfully removed
  Volume group "dbapp" successfully removed
[root@server ~ 15:32:54]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <19.00g     0 
  /dev/sdb          lvm2 ---   20.00g 20.00g
  /dev/sdc          lvm2 ---   20.00g 20.00g
  /dev/sdd          lvm2 ---   20.00g 20.00g
[root@server ~ 15:32:57]# pvremove /dev/sd[bcd]
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.
[root@server ~ 15:33:17]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0 
[root@server ~ 15:33:19]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdf               8:80   0   20G  0 disk 
sdg               8:96   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  

扩展和缩减卷组

环境准备

# 创建卷组
[root@server ~ 16:05:17]# vgcreate webapp /dev/sdb
  Physical volume "/dev/sdb" successfully created.
  Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。
# 创建逻辑卷
[root@server ~ 16:05:37]# lvcreate -n webapp01 -L 10G webapp 
WARNING: xfs signature detected on /dev/webapp/webapp01 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/webapp/webapp01.
  Logical volume "webapp01" created.
# -n webapp01指定逻辑卷的名称(name)为 webapp01[root@server ~ 16:06:55]# #-L 10G指定逻辑卷的容量(size)为 10GB(支持单 位:M/G/T,需卷组有足够空闲空间)
# webapp目标卷组(VG)名称,逻辑卷必须创建在已存在的卷组中

扩展卷组

如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。

[root@server ~ 16:07:29]# vgextend webapp /dev/sd{c,d}
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
  Volume group "webapp" successfully extended

缩减卷组

如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。
删除物理卷前确保物理卷不在使用中。

# 查看物理卷使用状态
[root@server ~ 16:07:57]# pvs
PV         VG     Fmt  Attr PSize   PFree  
/dev/sda2  centos lvm2 a--  <19.00g      0 
/dev/sdb   webapp lvm2 a--  <20.00g <10.00g# /dev/sdb在使用
/dev/sdc   webapp lvm2 a--  <20.00g <20.00g
/dev/sdd   webapp lvm2 a--  <20.00g <20.00g

# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错
[root@server ~ 16:08:14]# vgreduce webapp /dev/sdb
  Physical volume "/dev/sdb" still in use
  
# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@server ~ 16:08:36]# pvmove /dev/sdb
  /dev/sdb: Moved: 0.16%
  /dev/sdb: Moved: 100.00%
  [root@server ~ 16:09:35]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb   webapp lvm2 a--  <20.00g <20.00g
  /dev/sdc   webapp lvm2 a--  <20.00g <10.00g
  /dev/sdd   webapp lvm2 a--  <20.00g <20.00g
  
# 或者移动到卷组中特定物理卷
[root@server ~ 16:09:37]# pvmove /dev/sdc /dev/sdd
  /dev/sdc: Moved: 0.08%
  /dev/sdc: Moved: 74.65%
  /dev/sdc: Moved: 100.00%
  
# 查看物理卷使用状态
[root@server ~ 16:10:35]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb   webapp lvm2 a--  <20.00g <20.00g# /dev/sdb不在使用
  /dev/sdc   webapp lvm2 a--  <20.00g <20.00g
  /dev/sdd   webapp lvm2 a--  <20.00g <10.00g# /dev/sdd在使用

# 再次剔除,成功
[root@server ~ 16:10:38]# vgreduce webapp /dev/sdb
  Removed "/dev/sdb" from volume group "webapp"
[root@server ~ 16:10:55]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb          lvm2 ---   20.00g  20.00g
  /dev/sdc   webapp lvm2 a--  <20.00g <20.00g
  /dev/sdd   webapp lvm2 a--  <20.00g <10.00g

扩展和缩减逻辑卷

扩展逻辑卷

如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。

# 逻辑卷增加2G空间
[root@server ~ 16:11:01]# lvextend -L +2G /dev/webapp/webapp01 
  Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
  Logical volume webapp/webapp01 successfully resized.
[root@server ~ 16:11:47]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-a----- 12.00g           

缩减逻辑卷

如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。

[root@server ~ 16:12:45]# lvreduce -L -2G /dev/webapp/webapp01 
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: `y`
  Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
  Logical volume webapp/webapp01 successfully resized.
[root@server ~ 16:13:32]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-a----- 10.00g     

扩展和缩减文件系统

扩展 XFS 文件系统

XFS文件系统只支持扩展,不支持缩减

环境准备:格式化文件系统,并创建数据

[root@server ~ 16:13:45]# mkfs.xfs /dev/webapp/webapp01 
[root@server ~ 16:19:59]# mkdir -p /usr/share/nginx/html
[root@server ~ 16:22:46]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 16:23:28]# cp /etc/host* /usr/share/nginx/html
[root@server ~ 16:23:46]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny
# 第一步:扩展逻辑卷
[root@server ~ 16:23:51]# lvextend -L 15G /dev/webapp/webapp01 
[root@server ~ 16:24:15]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 15.00g         
  
# 第二步:扩展文件系统
[root@server ~ 16:24:25]# xfs_growfs /usr/share/nginx/html
[root@server ~ 16:24:59]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   15G   33M   15G   1% /usr/share/nginx/html
[root@server ~ 16:26:11]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny

# 块设备和文件系统一并扩展
[root@server ~ 16:26:25]# lvextend -rL 20G /dev/webapp/webapp01
  Size of logical volume webapp/webapp01 changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents).
  Logical volume webapp/webapp01 successfully resized.
  
[root@server ~ 16:27:59]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   20G   33M   20G   1% /usr/share/nginx/html

扩展 EXT4 文件系统

EXT4文件系统即支持扩展,也支持缩减

环境准备:格式化文件系统,并创建数据

[root@server ~ 16:28:20]# umount /usr/share/nginx/html
[root@server ~ 16:28:35]# mkfs.ext4 /dev/webapp/webapp01 
[root@server ~ 16:28:57]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 16:29:37]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   20G   45M   19G   1% /usr/share/nginx/html
[root@server ~ 16:29:46]# cp /etc/host* /usr/share/nginx/html
[root@server ~ 16:31:09]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found
# 第一步:扩展逻辑卷
[root@server ~ 16:36:28]# lvextend -L 25G /dev/webapp/webapp01 
  Size of logical volume webapp/webapp01 changed from 20.00 GiB (5120 extents) to 25.00 GiB (6400 extents).
  Logical volume webapp/webapp01 successfully resized.
[root@server ~ 16:38:43]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 25.00g  
  
# 第二步:扩展文件系统
[root@server ~ 16:38:53]# resize2fs /dev/webapp/webapp01 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/webapp/webapp01 is mounted on /usr/share/nginx/html; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/webapp/webapp01 is now 6553600 blocks long.

[root@server ~ 16:39:18]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   25G   44M   24G   1% /usr/share/nginx/html
[root@server ~ 17:06:19]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

# 块设备和文件系统一并扩展
[root@server ~ 17:07:35]# lvs /dev/webapp/webapp01 
  LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  webapp01 webapp -wi-ao---- 30.00g                                                    
[root@server ~ 17:07:50]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01   30G   44M   28G   1% /usr/share/nginx/html

缩减 EXT4 文件系统

缩减EXT4文件系统注意事项:

  • 不支持在线缩减,必须卸载后缩减。
  • 缩减后的容量,不能小于当前使用的容量。

ext4 减容流程:

  1. 卸载文件系统
  2. e2fsck 文件系统
  3. 缩减文件系统
  4. 缩减 lv
  5. 挂载测试
    具体操作如下:
# 第一步:卸载文件系统
[root@server ~ 17:09:05]# umount /usr/share/nginx/html

# 第二步:检测文件系统
[root@server ~ 17:09:22]# e2fsck -f /dev/webapp/webapp01
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/webapp/webapp01:14/1966080 文件(0.0% 为非连续的), 167445/7864320
块

# 第三步:缩减文件系统
[root@server ~ 17:09:43]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.42.9 (28-Dec-2013)
将 /dev/webapp/webapp01 上的文件系统调整为 2621440 个块(每块 4k)。
/dev/webapp/webapp01 上的文件系统现在为 2621440 个块(每块 4k)。

# 第四步:缩减逻辑卷
[root@server ~ 17:10:11]# lvreduce -L 10G /dev/webapp/webapp01 
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: y
  Size of logical volume webapp/webapp01 changed from 30.00 GiB (7680 extents) to 10.00 GiB (2560 extents).
  Logical volume webapp/webapp01 successfully resized.
  
# 第五步:挂载文件系统验证
[root@server ~ 17:10:45]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 17:10:59]# df -h /usr/share/nginx/html
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01  9.8G   37M  9.2G   1% /usr/share/nginx/html
[root@server ~ 17:11:08]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

补充说明: 如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。

逻辑卷快照

我们可以使用快照记录了lv中数据,后续可以用来恢复数据。

# 创建快照:快照的容量不能小于lv容量
[root@server ~ 17:11:43]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
  Logical volume "webapp01-snap1" created.
# -s表示创建快照卷(Snapshot),必选参数
# -n指定快照卷的名称(name),此处为 webapp01-snap1
# 最后一个参数源逻辑卷路径(必须是已存在的 LVM  逻辑卷)

`[root@server ~ 17:21:29]# mkdir -p /webapp/webapp01/`
# 挂载快照
[root@server ~ 17:14:54]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/

# 查看数据
[root@server ~ 17:23:07]# ls /webapp/webapp01/
host.conf  hostname  hosts  hosts.allow  hosts.deny  lost+found

# 创建新数据
[root@server ~ 17:23:22]# echo hello world > /webapp/webapp01/hello.txt
[root@server ~ 17:23:31]# cat /webapp/webapp01/hello.txt 
hello world

raid 逻辑卷

准备环境

[root@server ~ 17:23:44]# umount /webapp/webapp01 
[root@server ~ 17:24:09]# umount /usr/share/nginx/html
[root@server ~ 17:24:50]# lvremove /dev/webapp/webapp01*
Do you really want to remove active origin logical volume webapp/webapp01 with 1 snapshot(s)? [y/n]: y
  Logical volume "webapp01-snap1" successfully removed
  Logical volume "webapp01" successfully removed
# 核心风险:会删除所有以 webapp01 开头的 LVM 逻 辑卷
[root@server ~ 17:29:04]# ls /webapp/webapp01/
[root@server ~ 17:29:26]# ls /webapp
webapp01

创建 raid1 逻辑卷

[root@server ~ 17:29:37]# lvcreate --type raid1 -n webapp01 -L 15G webapp
# --type raid1指定逻辑卷类型为 RAID1(镜像),LVM 会自动管理镜像同步,无需额外配置 mdadm
# -n webapp01逻辑卷名称(后续设备路径:/dev/webapp/webapp01)
[root@server ~ 17:32:26]# mkfs.xfs /dev/webapp/webapp01
[root@server ~ 17:32:54]# mount /dev/webapp/webapp01 /usr/share/nginx/html
[root@server ~ 17:33:16]# cp /etc/ho* /usr/share/nginx/html

模拟故障

[root@server ~ 17:33:34]# dd if=/dev/zero of=/dev/sdd bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 0.137858 s, 1.9 GB/s

此时文件系统仍可以正方访问

[root@server ~ 17:34:46]# ls /usr/share/nginx/html
host.conf  hostname  hosts  hosts.allow  hosts.deny
[root@server ~ 17:35:08]# umount /usr/share/nginx/html
[root@server ~ 17:35:33]# mount /dev/webapp/webapp01 /usr/share/nginx/html

修复raid

# 删除丢失的物理卷
[root@server ~ 17:36:57]# vgreduce --removemissing webapp --force 
# vgreduceLVM 命令,用于 “缩减卷组”(移除卷组中 无用的 PV)
# --removemissing核心选项:自动移除卷组中 “无法 访问” 的 PV(如硬盘离线、损坏、已被物理移除)
# --force强制执行:忽略警告(如卷组中存在依赖该 PV 的逻辑卷),直接移除丢失的 PV(风险极高!)

# 扩容回来
[root@server ~ 17:39:52]# vgextend webapp /dev/sdd
  Physical volume "/dev/sdd" successfully created.
  Volume group "webapp" successfully extended
  
# 修复raid1 逻辑卷
[root@server ~ 17:40:11]# lvconvert --repair /dev/webapp/webapp01 
  WARNING: Not using lvmetad because of repair.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  WARNING: Disabling lvmetad cache for repair command.
  Faulty devices in webapp/webapp01 successfully replaced.
# lvconvertLVM(逻辑卷管理)的逻辑卷转换 / 修复 工具,主要用于修改逻辑卷的类型、结构、冗余配置等
# --repair专门用于修复镜像逻辑卷的参数,是该命.的核心作用开关 

# 扫描物理卷变化
[root@server ~ 17:44:55]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdc    VG webapp          lvm2 [<20.00 GiB / 4.99 GiB free]
  PV /dev/sdd    VG webapp          lvm2 [<20.00 GiB / 4.99 GiB free]
  PV /dev/sdb                       lvm2 [20.00 GiB]
  Total: 4 [<78.99 GiB] / in use: 3 [<58.99 GiB] / in no VG: 1 [20.00 GiB]
  
# 验证结果
[root@server ~ 17:45:27]# pvs |grep webap
  /dev/sdc   webapp lvm2 a--  <20.00g  4.99g
  /dev/sdd   webapp lvm2 a--  <20.00g  4.99g

其他示例:创建 raid5 逻辑卷

# Create a RAID5 LV with a usable size of 5GiB, 3 stripes, a stripe
size of 64KiB, using a total of 4 devices (including one for parity).
lvcreate --type raid5 -L 5G -i 3 -I 64 -n mylv vg00
s          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdc    VG webapp          lvm2 [<20.00 GiB / 4.99 GiB free]
  PV /dev/sdd    VG webapp          lvm2 [<20.00 GiB / 4.99 GiB free]
  PV /dev/sdb                       lvm2 [20.00 GiB]
  Total: 4 [<78.99 GiB] / in use: 3 [<58.99 GiB] / in no VG: 1 [20.00 GiB]
  
# 验证结果
[root@server ~ 17:45:27]# pvs |grep webap
  /dev/sdc   webapp lvm2 a--  <20.00g  4.99g
  /dev/sdd   webapp lvm2 a--  <20.00g  4.99g

其他示例:创建 raid5 逻辑卷

# Create a RAID5 LV with a usable size of 5GiB, 3 stripes, a stripe
size of 64KiB, using a total of 4 devices (including one for parity).
lvcreate --type raid5 -L 5G -i 3 -I 64 -n mylv vg00
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐