Linux RAID存储与逻辑卷

Linux RAID 存储技术

管理软 RAID

Linux 提供 mdadm 实用程序来创建和管理软件RAID。

管理 RAID0

创建 RAID

[root@centos7 ~]# yum install -y mdadm
# 创建一个包含2个块设备的raid0设备/dev/md0
[root@centos7 ~]# mdadm --create /dev/md0 --level 0 --raid-devices 2 
/dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看 RAID

# 查看 raid 概要信息
[root@centos7 ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md0 : active raid0 sdc[1] sdb[0]
      41908224 blocks super 1.2 512k chunks
      
unused devices: <none>
# 查看 raid 设备详细信息
[root@centos7 ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Aug  2 17:03:58 2024
       Raid Level : raid0
       Array Size : 41908224 (39.97 GiB 42.91 GB)
     Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Aug  2 17:03:58 2024
             State : clean
......             

需要关注的属性

  • Raid Level : raid0

  • State : clean

  • Chunk Size : 512K

  • 设备清单

[root@centos7 ~]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0    9:0    0 40G  0 raid0
[root@centos7 ~]# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb     8:16   0 20G  0 disk  
└─md0   9:1    0 20G  0 raid0 
sdc     8:32   0 20G  0 disk  
└─md0   9:1    0 20G  0 raid0

格式化和挂载

[root@centos7 ~]# mkfs.xfs /dev/md0
[root@centos7 ~]# mkdir -p /raid/raid0
[root@centos7 ~]# mount /dev/md0 /raid/raid0
[root@centos7 ~]# df -h /raid/raid0
Filesystem     Size Used Avail Use% Mounted on
/dev/md0         40G 319M   40G   1% /raid/raid0
# 创建数据
[root@centos7 ~]# cp /etc/ho* /raid/raid0
[root@centos7 ~]# ls /raid/raid0/
host.conf hostname hosts

删除 RAID

# 卸载
[root@centos7 ~]# umount /dev/md0
# stop RAID阵列,将删除阵列
[root@centos7 ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 清除原先设备上的 md superblock
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b,c}

补充说明

  • raid0 条带不能增加新成员盘。
[root@centos7 ~]# mdadm --add /dev/md0 /dev/sdd
mdadm: add new device failed for /dev/sdd as 2: Invalid argument
  • raid0 条带不能强制故障成员盘。
[root@centos7 ~]# mdadm --fail /dev/md0 /dev/sdc
mdadm: Cannot remove /dev/sdc from /dev/md0, array will be failed.
管理 RAID1

创建 RAID

# 创建一个包含2个块设备的raid1设备/dev/md1
[root@centos7 ~]# mdadm --create /dev/md1 --level 1 --raid-devices 2 
/dev/sd{b,c}
mdadm: Note: this array has metadata at the start and
   may not be suitable as a boot device. If you plan to
   store '/boot' on this device please ensure that
......

查看 RAID

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Aug  2 17:41:25 2024
       Raid Level : raid1
       Array Size : 20954112 (19.98 GiB 21.46 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
     Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Aug  2 17:41:57 2024
             State : clean, resyncing 
   Active Devices : 2
   Working Devices : 2
   Failed Devices : 0
     Spare Devices : 0
Consistency Policy : resync
     Resync Status : 33% complete
             Name : centos7.linux.fun:1 (local to host 
centos7.linux.fun)
             UUID : f024b6e0:d2a5793c:f8bdebc6:6bcc7027
           Events : 5
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       1       8       32        1     active sync   /dev/sdc

需要关注的属性

  • Raid Level : raid1

  • State : clean, resyncing,正在同步。

  • Consistency Policy : resync

  • Resync Status : 33% complete,同步进度。

  • 设备清单

[root@centos7 ~]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md1    9:1    0 20G  0 raid1
[root@centos7 ~]# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb     8:16   0 20G  0 disk  
└─md1   9:1    0 20G  0 raid1 
sdc     8:32   0 20G  0 disk  
└─md1   9:1    0 20G  0 raid1

格式化和挂载

等待同步完成:直到同步进度达到100%,然后进行格式化和挂载。

[root@centos7 ~]# mkfs.xfs /dev/md1
[root@centos7 ~]# mkdir /raid/raid1
[root@centos7 ~]# mount /dev/md1 /raid/raid1
[root@centos7 ~]# df -h /raid/raid1
Filesystem     Size Used Avail Use% Mounted on
/dev/md1         20G 175M   20G   1% /raid/raid1
# 创建数据
[root@centos7 ~]# cp /etc/ho* /raid/raid1
[root@centos7 ~]# ls /raid/raid1/
host.conf hostname hosts

增加热备盘

[root@centos7 ~]# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd
[root@centos7 ~]# mdadm --detail /dev/md1 |tail -5
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       1       8       32        1     active sync   /dev/sdc
       2       8       48        -     spare   /dev/sdd
# /dev/sdd的状态为spare(备用)

模拟故障

# 强制成员盘故障
[root@centos7 ~]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看成员状态
[root@centos7 ~]# mdadm --detail /dev/md1 |tail -5
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       2       8       48        1     spare rebuilding  /dev/sdd
       1       8       32        -     faulty   /dev/sdc
# /dev/sdd立刻顶替故障磁盘,并进行同步
# 数据依然正常访问
[root@centos7 ~]# ls /raid/raid1/
host.conf hostname hosts
[root@centos7 ~]# cat /raid/raid1/hostname 
centos7.linux.fun

删除故障磁盘

[root@centos7 ~]# mdadm --remove /dev/md1 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
[root@centos7 ~]# mdadm --detail /dev/md1 |tail -5
           Events : 43
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       2       8       48        1     active sync   /dev/sdd

删除 RAID

# 卸载
[root@centos7 ~]# umount /dev/md1
# stop RAID 阵列,将删除阵列
[root@centos7 ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 清除原先设备上的 md superblock
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..d}

补充说明

RAID1的设计初衷是数据冗余和可靠性,而不是为了增加存储容量。因此,即使添加了新的硬盘并进行了扩容操作,由于RAID1的工作方式,其总容量是不会增加的。

管理 RAID5

创建 RAID

# 创建一个包含4个块设备的raid5设备/dev/md2
[root@centos7 ~]# mdadm --create /dev/md5 --level 5 --raid-devices 4 
/dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started

查看 RAID

[root@centos7 ~]# mdadm --detail /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Sat Aug  3 17:16:10 2024
       Raid Level : raid5
       Array Size : 62862336 (59.95 GiB 64.37 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
     Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent
       Update Time : Sat Aug  3 17:16:24 2024
             State : clean, degraded, recovering 
   Active Devices : 3
   Working Devices : 4
   Failed Devices : 0
     Spare Devices : 1
           Layout : left-symmetric
       Chunk Size : 512K
Consistency Policy : resync
   Rebuild Status : 17% complete
             Name : centos7.linux.fun:5 (local to host 
centos7.linux.fun)
             UUID : b1661262:66062c09:76e887ce:fecb1340
           Events : 3
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     spare rebuilding   /dev/sde

需要关注的属性

  • Raid Level : raid5

  • State : clean, resyncing,正在同步。

  • Consistency Policy : resync

  • Resync Status : 17% complete,同步进度。

  • 设备清单

[root@centos7 ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5    9:5    0 60G  0 raid5 /raid/raid5
[root@centos7 ~]# lsblk /dev/sd{b..e}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb     8:16   0 20G  0 disk  
└─md5   9:5    0 60G  0 raid5 
sdc     8:32   0 20G  0 disk  
└─md5   9:5    0 60G  0 raid5 
sdd     8:48   0 20G  0 disk  
└─md5   9:5    0 60G  0 raid5 
sde     8:64   0 20G  0 disk  
└─md5   9:5    0 60G  0 raid5

格式化和挂载

注意:格式化前,等待 raid 构建完成。

[root@centos7 ~]# mkfs.xfs /dev/md5
[root@centos7 ~]# mkdir /raid/raid5
[root@centos7 ~]# mount /dev/md5 /raid/raid5
[root@centos7 ~]# df -h /raid/raid5/
Filesystem     Size Used Avail Use% Mounted on
/dev/md5         60G 461M   60G   1% /raid/raid5
# 创建数据
[root@centos7 ~]# cp /etc/ho* /raid/raid5
[root@centos7 ~]# ls /raid/raid5/
host.conf hostname hosts

增加热备盘

# RAID5 阵列增加一个块热备盘
[root@centos7 ~]# mdadm --add /dev/md5 /dev/sdf
mdadm: added /dev/sdf
[root@centos7 ~]# mdadm --detail /dev/md5 |tail -7
   Number   Major   Minor   RaidDevice State
       0       8       16        0     active sync   /dev/sdb
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     active sync   /dev/sde
       5       8       80        -     spare   /dev/sdf

模拟故障

# 模拟磁盘故障,手动标记/dev/sdb为fail
[root@centos7 ~]# mdadm --fail /dev/md5 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看成员状态
[root@centos7 ~]# mdadm --detail /dev/md5 |tail -7
     Number   Major   Minor   RaidDevice State
       5       8       80        0     spare rebuilding   /dev/sdf
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     active sync   /dev/sde
       0       8       16        -     faulty   /dev/sdb
# /dev/sdf立刻顶替故障磁盘,并进行同步
# 数据依然正常访问
[root@centos7 ~]# ls /raid/raid5/
host.conf hostname hosts
[root@centos7 ~]# cat /raid/raid5/hostname 
centos7.linux.fun

删除故障磁盘

[root@centos7 ~]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@centos7 ~]# mdadm --detail /dev/md5 |tail -5
   Number   Major   Minor   RaidDevice State
       5       8       80        0     active sync   /dev/sdf
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     active sync   /dev/sde

扩容 RAID

对于raid5,只能扩容,不能减容。

注意:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。

[root@centos7 ~]# mdadm --add /dev/md5 /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg
[root@centos7 ~]# mdadm --detail /dev/md5 |tail -8
   Number   Major   Minor   RaidDevice State
       5       8       80        0     active sync   /dev/sdf
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     active sync   /dev/sde
       6       8       16        -     spare   /dev/sdb
       7       8       96        -     spare   /dev/sdg
# 设置成员数量为5,-G是grow(扩展)
[root@centos7 ~]# mdadm --grow /dev/md5 --raid-devices 5
# 等待重组完成
[root@centos7 ~]# mdadm --detail /dev/md5
......
   Reshape Status : 16% complete
     Delta Devices : 1, (4->5)
             Name : centos7.linux.fun:5 (local to host 
centos7.linux.fun)
             UUID : 1d4e3f21:1178a4fd:db214497:593e3353
           Events : 79
   Number   Major   Minor   RaidDevice State
       5       8       80        0     active sync   /dev/sdf
       1       8       32        1     active sync   /dev/sdc
       2       8       48        2     active sync   /dev/sdd
       4       8       64        3     active sync   /dev/sde
       7       8       96        4     active sync   /dev/sdg
       6       8       16        -     spare   /dev/sdb
# 确认 raid 容量:增加了20G
[root@centos7 ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5    9:5    0 80G  0 raid5 /raid/raid5
# 扩展文件系统
[root@centos7 ~]# xfs_growfs /raid/raid5
[root@centos7 ~]# df -h /raid/raid5/
Filesystem     Size Used Avail Use% Mounted on
/dev/md5         80G 604M   80G   1% /raid/raid5

删除 RAID

# 卸载
[root@centos7 ~]# umount /dev/md5
# stop RAID 阵列,将删除阵列
[root@centos7 ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# stop之后、清除superblock之前,如果想构建原先的md5设备,使用以下命令,数据
不会丢失
[root@centos7 ~]# mdadm --assemble /dev/md5 /dev/sd{b..g}
# 清除原先设备上的 md superblock
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..g}

Linux逻辑卷管理

逻辑卷基本管理

逻辑卷管理硬盘方案优点

  • 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。

  • 使用逻辑卷创建的文件系统可以跨多个硬盘,适合创建超大容量文件系统。

  • 使用逻辑卷可以创建镜像卷,保证数据的冗余性。即使单个硬盘损坏,文件系统中数据也会丢失。

  • 使用逻辑卷还可以创建快照,保留某一时刻数据,就像虚拟机快照一样。

创建物理卷
# 创建单个PV
[root@centos7 ~]# pvcreate /dev/sdb
 Physical volume "/dev/sdb" successfully created.
# 此次创建多个PV
[root@centos7 ~]# pvcreate /dev/sd{c,d}
 Physical volume "/dev/sdc" successfully created.
 Physical volume "/dev/sdd" successfully created.
  
# 查看PV列表
[root@centos7 ~]# pvs
 PV         VG     Fmt Attr PSize   PFree 
 /dev/sdb         lvm2 ---   20.00g 20.00g
 /dev/sdc         lvm2 ---   20.00g 20.00g
 /dev/sdd         lvm2 ---   20.00g 20.00g
# 查看单个PV详细信息
[root@centos7 ~]# 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
创建卷组
# 创建包涵单个PV的VG
[root@centos7 ~]# vgcreate webapp /dev/sdb
 Volume group "webapp" successfully created
# 创建包涵多个PV的VG
[root@centos7 ~]# vgcreate dbapp /dev/sd{c,d}
 Volume group "dbapp" successfully created
[root@centos7 ~]# pvs
 PV         VG     Fmt Attr PSize   PFree  
 /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@centos7 ~]# vgs
 VG     #PV #LV #SN Attr   VSize   VFree  
 dbapp    2   0   0 wz--n-   39.99g  39.99g
 webapp   1   0   0 wz--n- <20.00g <20.00g
# 查看单个VG详细信息
[root@centos7 ~]# 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
创建逻辑卷
# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@centos7 ~]# lvcreate -n webapp01 -L 5G webapp
 Logical volume "webapp01" created.
# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@centos7 ~]# lvcreate -n data01 -L 25G dbapp
 Logical volume "data01" created.
# 查看LV列表
[root@centos7 ~]# lvs
 LV     VG     Attr       LSize   Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 data01   dbapp  -wi-a-----  25.00g                                   
            
 webapp01 webapp -wi-a-----   5.00g

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

  • /dev/vname/lvame

  • /dev/mapper/vname-lvame

  • /dev/dm-N

[root@centos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 617 18:26 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 617 18:26 /dev/mapper/dbapp-data01 -> 
../dm-4
# 查看单个LV详细信息
[root@centos7 ~]# lvdisplay /dev/dbapp/data01
  --- Logical volume ---
 LV Path               /dev/dbapp/data01
 LV Name               data02
 VG Name               dbapp
 LV UUID               W8UafB-A7RJ-dBjM-bsA2-8Obc-p8gE-bMZgmm
 LV Write Access       read/write
 LV Creation host, time centos7.linux.com, 2022-12-26 11:42:40 +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:4
# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@centos7 ~]# pvs
 PV             VG     Fmt Attr PSize   PFree  
 /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@centos7 ~]# lsblk /dev/sd{b..d}
NAME             MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb                 8:16   0 20G  0 disk 
└─webapp-webapp01 253:3    0   5G  0 lvm  
sdc                 8:32   0 20G  0 disk 
└─dbapp-data01    253:4    0 25G  0 lvm  
sdd                 8:48   0 20G  0 disk 
└─dbapp-data01    253:4    0 25G  0 lvm
创建文件系统
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件
清理
# 卸载文件系统
[root@centos7 ~]# umount /dev/webapp/webapp01
# 删除LV
[root@centos7 ~]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do 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@centos7 ~]# vgremove webapp dbapp
 Volume group "webapp" successfully removed
 Volume group "dbapp" successfully removed
# 删除PV
[root@centos7 ~]# pvremove /dev/sd{b..d}
 Labels on physical volume "/dev/sdb" successfully wiped.
 Labels on physical volume "/dev/sdc" successfully wiped.
 ......

扩展和缩减卷组

环境准备

# 创建卷组
[root@centos7 ~]# vgcreate webapp /dev/sdb
 Physical volume "/dev/sdb" successfully created.
 Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。
# 创建逻辑卷
[root@centos7 ~]# lvcreate -n webapp01 -L 10G webapp
 Logical volume "webapp01" created.
扩展卷组

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

[root@centos7 ~]# vgextend webapp /dev/sd{c,d}
 Physical volume "/dev/sdc" successfully created.
 Physical volume "/dev/sdd" successfully created.
 Volume group "webapp" successfully extended
缩减卷组

如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。

删除物理卷前确保物理卷不在使用中。

# 查看物理卷使用状态
[root@centos7 ~]# pvs
 PV         VG     Fmt Attr PSize   PFree  
 /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@centos7 ~]# vgreduce webapp /dev/sdb
 Physical volume "/dev/sdb" still in use
# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@centos7 ~]# pvmove /dev/sdb
# 或者移动到卷组中特定物理卷
[root@centos7 ~]# pvmove /dev/sdb /dev/sdd
 /dev/sdb: Moved: 0.51%
 /dev/sdb: Moved: 100.00%
# 查看物理卷使用状态
[root@centos7 ~]# pvs
 PV         VG     Fmt Attr PSize   PFree  
 /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@centos7 ~]# vgreduce webapp /dev/sdb
 Removed "/dev/sdb" from volume group "webapp"
[root@centos7 ~]# pvs
 PV         VG     Fmt Attr PSize   PFree  
 /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@centos7 ~]# 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@centos7 ~]# lvs /dev/webapp/webapp01 
 LV       VG     Attr       LSize Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 webapp01 webapp -wi-a----- 12.00g
缩减逻辑卷

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

[root@centos7 ~]# 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@centos7 ~]# 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@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mkdir /var/www/html
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# cp /etc/host* /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@centos7 ~]# lvextend -L 15G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
 LV       VG     Attr       LSize Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 webapp01 webapp -wi-ao---- 15.00g
  
# 第二步:扩展文件系统
[root@centos7 ~]# xfs_growfs /var/www/html
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01   15G 140M   15G    1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 块设备和文件系统一并扩展
[root@centos7 ~]# lvextend -rL 20G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
 LV       VG     Attr       LSize Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 webapp01 webapp -wi-ao---- 20.00g                                     
               
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01   20G 176M   20G    1% /var/www/html
扩展 EXT4 文件系统

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

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

[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# mkfs.ext4 /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01   20G   24K   19G    1% /var/www/html
[root@centos7 ~]# cp /etc/host* /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@centos7 ~]# lvextend -L 25G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
 LV       VG     Attr       LSize Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 webapp01 webapp -wi-ao---- 25.00g 
  
# 第二步:扩展文件系统
[root@centos7 ~]# resize2fs /dev/webapp/webapp01
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01   25G   36K   24G    1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 块设备和文件系统一并扩展
[root@centos7 ~]# lvextend -rL 30G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
 LV       VG     Attr       LSize Pool Origin Data% Meta% Move Log 
Cpy%Sync Convert
 webapp01 webapp -wi-ao---- 30.00g                                     
               
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01   30G   36K   28G    1% /var/www/html
缩减 EXT4 文件系统

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

  • 不支持在线缩减,必须卸载后缩减。

  • 缩减后的容量,不能小于当前使用的容量。

ext4 减容流程:

  1. 卸载文件系统
  2. e2fsck 文件系统
  3. 缩减文件系统
  4. 缩减 lv
  5. 挂载测试

具体操作如下:

# 第一步:卸载文件系统
[root@centos7 ~]# umount /var/www/html 
# 第二步:检测文件系统
[root@centos7 ~]# 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@centos7 ~]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/webapp/webapp01 上的文件系统调整为 2621440 个块(每块 4k)。
/dev/webapp/webapp01 上的文件系统现在为 2621440 个块(每块 4k)。
# 第四步:缩减逻辑卷
[root@centos7 ~]# 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@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# df -h /var/www/html
文件系统                     容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01  9.7G   36K  9.3G    1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts lost+found

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

逻辑卷快照

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

# 创建快照:快照的容量不能小于lv容量
[root@centos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G 
/dev/webapp/webapp01
 Logical volume "webapp01-snap1" created.
# 挂载快照
[root@centos7 ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/
# 查看数据
[root@centos7 ~]# ls /webapp/webapp01/
host.conf hostname hosts hosts.allow hosts.deny
# 创建新数据
[root@centos7 ~]# echo hello world > /webapp/webapp01/hello.txt
[root@centos7 ~]# cat /webapp/webapp01/hello.txt
hello world
raid 逻辑卷

准备环境

[root@centos7 ~]# umount /webapp/webapp0
[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# lvremove /dev/webapp/webapp01*

创建 raid1 逻辑卷

[root@centos7 ~]# lvcreate --type raid1 -n webapp01 -L 15G webapp
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01 
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html/
[root@centos7 ~]# cp /etc/ho* /var/www/html/

模拟故障

[root@centos7 ~]# dd if=/dev/zero of=/dev/sdd bs=1M count=256

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

[root@centos7 ~]# ls /var/www/html/
host.conf hostname hosts hosts.allow hosts.deny
[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html/

修复raid

# 删除丢失的物理卷
[root@centos7 ~]# vgreduce --removemissing webapp --force
# 扩容回来
[root@centos7 ~]# vgextend webapp /dev/sdd
# 修复raid1 逻辑卷
[root@centos7 ~]# lvconvert --repair /dev/webapp/webapp01
# 扫描物理卷变化
[root@centos7 ~]# pvscan
# 验证结果
[root@centos7 ~]# pvs|grep webap
 /dev/sdb   webapp lvm2 a-- <20.00g   4.99g
 /dev/sdc   webapp lvm2 a-- <20.00g   4.99g
 /dev/sdd   webapp lvm2 a-- <20.00g <20.00g

其他示例:创建 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”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐