1. 程式人生 > >Linux磁碟管理之LVM

Linux磁碟管理之LVM

  一、LVM介紹

  在我們管理Linux磁碟的時候,通常會遇到這麼一種情況。在最初規劃Linux的磁碟的時候,我們給某個分區劃分了一定量的磁碟空間,使用一段時間後,發現我們規劃的磁碟空間不足了,這個時候怎麼辦?我們肯定要想辦法給擴容呀,找一塊磁碟分割槽,格式化,然後掛載,然後把資料拷貝到新加的磁碟上,然後把原有的磁碟解除安裝掉,通常我們是這樣做的。這樣一來雖然達到了擴容的目的,但是費時費力;如果第二次擴容,空間還是不夠,我們又要重複上面的步驟;如果分配的磁碟空間過大,使用了很久才發現它根本用不到那麼多空間,這個時候是不是又要調整呀,聽著就感覺很繁瑣。這時候你肯定要想有沒有那種可掛載上一塊盤,我們利用某種管理手段,可以線上的調整磁碟的空間,這樣有節約了時間,也可實現彈性管理磁碟。對,lvm就有這樣的功能。

  LVM(logical volume manager)邏輯卷管理,它可以彈性的管理檔案系統的容量,LVM的工作原理是將一個或多個底層塊裝置組織成一個邏輯裝置,這個邏輯裝置可以在未來新增或移除其他的分割槽到這個邏輯裝置中,從而實現了彈性管理磁碟。

  PV:物理卷(physical volume);物理卷就是指硬碟分割槽或從邏輯上與磁碟分割槽具有同樣功能的裝置(如raid),是LVM的基本儲存邏輯塊,但和基本的物理儲存介質(如分割槽,磁碟等)比較,卻包含有與LVM相關的管理引數

  VG:卷組(volume group)LVM卷組類似於非LVM系統中的物理硬碟,尤其物理卷組成,可以在卷組上建立一個或多個LVM分割槽(邏輯卷),LVM卷組由一個或多個物理卷組成

  LV:邏輯卷(logical volume)LVM的邏輯卷類似非LVM系統中的硬碟分割槽,在邏輯卷之上可以建立檔案系統。

  LVM就是將一些零碎的磁碟分割槽(PV)合併成一個較大的磁碟(VG),然後在根據需要對這個較大的磁碟(VG)進行劃分成不同的大小分割槽(LV),這些小的分割槽(LV)是可以動態的擴充套件和縮小的,這就是LVM的邏輯卷管理過程。所謂LVM的大磁碟就是將許多PV整合成的VG,那麼這個大磁碟最大可達到多少容量呢?我們知道在檔案系統裡面資料儲存的最小單位是塊(block),不過在LVM當中資料儲存的最小單位是PE,PE的的作用同block的作用一樣,需要注意到是LVM預設使用的PE大小是4M,而LVM的VG最多能包含65534個PE,也就是說預設LVM的VG會有4×65534M/1024M=256G,所以PE的大小決定了VG的最大容量,當然我們在建立VG的時候可指定PE大小,從而來決定VG的大小。

  二、LVM實現

  1)前期準備幾塊硬碟或者分割槽來模擬PV

[root@test-centos7-node1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   46G  0 part /
sdb      8:16   0   50G  0 disk 
sr0     11:0    1  792M  0 rom  
[root@test-centos7-node1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6180123f.

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6180123f

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-104857599, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): +10G
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6180123f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 
First sector (20973568-104857599, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-104857599, default 104857599): +10G
Partition 2 of type Linux and of size 10 GiB is set

Command (m for help): t
Partition number (1,2, default 2): 
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 
First sector (41945088-104857599, default 41945088): 
Using default value 41945088
Last sector, +sectors or +size{K,M,G} (41945088-104857599, default 104857599): +10G
Partition 3 of type Linux and of size 10 GiB is set

Command (m for help): t
Partition number (1-3, default 3): 
Hex code (type L to list all codes): 8e 
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6180123f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    41945087    10485760   8e  Linux LVM
/dev/sdb3        41945088    62916607    10485760   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@test-centos7-node1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   46G  0 part /
sdb      8:16   0   50G  0 disk 
├─sdb1   8:17   0   10G  0 part 
├─sdb2   8:18   0   10G  0 part 
└─sdb3   8:19   0   10G  0 part 
sr0     11:0    1  792M  0 rom  
[root@test-centos7-node1 ~]# 

  說明:這裡是用的分割槽來模擬硬碟當作PV,這裡需要注意一點,就是我們分割槽完儲存後,可能存在不同不到問題,就是我們分割槽完用lsblk看不到分割槽,可用 partprobe來同步分割槽資訊。centos6 使用partx  -a /dev/sdb來增加分割槽同步到記憶體,如果是刪除某個分割槽,就需要執行partx -d -nr # /dev/sdb  此命令表示從/dev/sdb的分割槽資訊中刪除sdb#分割槽資訊,並同步到記憶體中。這裡還需要注意一點的是我們分割槽的型別要選8e 表示Linux LVM

  2)裝lvm2這個包

[root@test-centos7-node1 ~]# lvs
-bash: lvs: command not found
[root@test-centos7-node1 ~]# yum info  lvm2  
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Available Packages
Name        : lvm2
Arch        : x86_64
Epoch       : 7
Version     : 2.02.185
Release     : 2.el7_7.2
Size        : 1.3 M
Repo        : updates/7/x86_64
Summary     : Userland logical volume management tools
URL         : http://sources.redhat.com/lvm2
License     : GPLv2
Description : LVM2 includes all of the support for handling read/write operations on
            : physical volumes (hard disks, RAID-Systems, magneto optical, etc.,
            : multiple devices (MD), see mdadm(8) or even loop devices, see
            : losetup(8)), creating volume groups (kind of virtual disks) from one
            : or more physical volumes and creating one or more logical volumes
            : (kind of logical partitions) in volume groups.

[root@test-centos7-node1 ~]# yum install lvm2 -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package lvm2.x86_64 7:2.02.185-2.el7_7.2 will be installed
--> Processing Dependency: lvm2-libs = 7:2.02.185-2.el7_7.2 for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: device-mapper-persistent-data >= 0.7.0-0.1.rc6 for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: liblvm2app.so.2.2(Base)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libdevmapper.so.1.02(DM_1_02_141)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02(Base)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: liblvm2app.so.2.2()(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02()(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Running transaction check
---> Package device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2 will be installed
---> Package device-mapper-libs.x86_64 7:1.02.140-8.el7 will be updated
--> Processing Dependency: device-mapper-libs = 7:1.02.140-8.el7 for package: 7:device-mapper-1.02.140-8.el7.x86_64
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2 will be an update
---> Package device-mapper-persistent-data.x86_64 0:0.8.5-1.el7 will be installed
---> Package lvm2-libs.x86_64 7:2.02.185-2.el7_7.2 will be installed
--> Processing Dependency: device-mapper-event = 7:1.02.158-2.el7_7.2 for package: 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.140-8.el7 will be updated
---> Package device-mapper.x86_64 7:1.02.158-2.el7_7.2 will be an update
---> Package device-mapper-event.x86_64 7:1.02.158-2.el7_7.2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================
 Package                                   Arch               Version                             Repository           Size
============================================================================================================================
Installing:
 lvm2                                      x86_64             7:2.02.185-2.el7_7.2                updates             1.3 M
Installing for dependencies:
 device-mapper-event                       x86_64             7:1.02.158-2.el7_7.2                updates             190 k
 device-mapper-event-libs                  x86_64             7:1.02.158-2.el7_7.2                updates             189 k
 device-mapper-persistent-data             x86_64             0.8.5-1.el7                         base                423 k
 lvm2-libs                                 x86_64             7:2.02.185-2.el7_7.2                updates             1.1 M
Updating for dependencies:
 device-mapper                             x86_64             7:1.02.158-2.el7_7.2                updates             294 k
 device-mapper-libs                        x86_64             7:1.02.158-2.el7_7.2                updates             322 k

Transaction Summary
============================================================================================================================
Install  1 Package  (+4 Dependent packages)
Upgrade             ( 2 Dependent packages)

Total download size: 3.8 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/7): device-mapper-event-1.02.158-2.el7_7.2.x86_64.rpm                                             | 190 kB  00:00:00     
(2/7): device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64.rpm                                        | 189 kB  00:00:00     
(3/7): device-mapper-libs-1.02.158-2.el7_7.2.x86_64.rpm                                              | 322 kB  00:00:00     
(4/7): lvm2-2.02.185-2.el7_7.2.x86_64.rpm                                                            | 1.3 MB  00:00:00     
(5/7): device-mapper-1.02.158-2.el7_7.2.x86_64.rpm                                                   | 294 kB  00:00:00     
(6/7): lvm2-libs-2.02.185-2.el7_7.2.x86_64.rpm                                                       | 1.1 MB  00:00:00     
(7/7): device-mapper-persistent-data-0.8.5-1.el7.x86_64.rpm                                          | 423 kB  00:00:00     
----------------------------------------------------------------------------------------------------------------------------
Total                                                                                       4.3 MB/s | 3.8 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : 7:device-mapper-1.02.158-2.el7_7.2.x86_64                                                                1/9 
  Updating   : 7:device-mapper-libs-1.02.158-2.el7_7.2.x86_64                                                           2/9 
  Installing : 7:device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64                                                     3/9 
  Installing : 7:device-mapper-event-1.02.158-2.el7_7.2.x86_64                                                          4/9 
  Installing : 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64                                                                    5/9 
  Installing : device-mapper-persistent-data-0.8.5-1.el7.x86_64                                                         6/9 
  Installing : 7:lvm2-2.02.185-2.el7_7.2.x86_64                                                                         7/9 
Created symlink from /etc/systemd/system/sysinit.target.wants/lvm2-lvmpolld.socket to /usr/lib/systemd/system/lvm2-lvmpolld.socket.
  Cleanup    : 7:device-mapper-1.02.140-8.el7.x86_64                                                                    8/9 
  Cleanup    : 7:device-mapper-libs-1.02.140-8.el7.x86_64                                                               9/9 
  Verifying  : 7:device-mapper-libs-1.02.158-2.el7_7.2.x86_64                                                           1/9 
  Verifying  : 7:device-mapper-1.02.158-2.el7_7.2.x86_64                                                                2/9 
  Verifying  : device-mapper-persistent-data-0.8.5-1.el7.x86_64                                                         3/9 
  Verifying  : 7:lvm2-2.02.185-2.el7_7.2.x86_64                                                                         4/9 
  Verifying  : 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64                                                                    5/9 
  Verifying  : 7:device-mapper-event-1.02.158-2.el7_7.2.x86_64                                                          6/9 
  Verifying  : 7:device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64                                                     7/9 
  Verifying  : 7:device-mapper-1.02.140-8.el7.x86_64                                                                    8/9 
  Verifying  : 7:device-mapper-libs-1.02.140-8.el7.x86_64                                                               9/9 

Installed:
  lvm2.x86_64 7:2.02.185-2.el7_7.2                                                                                          

Dependency Installed:
  device-mapper-event.x86_64 7:1.02.158-2.el7_7.2             device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2         
  device-mapper-persistent-data.x86_64 0:0.8.5-1.el7          lvm2-libs.x86_64 7:2.02.185-2.el7_7.2                        

Dependency Updated:
  device-mapper.x86_64 7:1.02.158-2.el7_7.2                  device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2                 

Complete!
[root@test-centos7-node1 ~]# 

  說明:最小化安裝系統預設系統上沒有安裝這個包的,所以我們需要把這個包裝上才可建立LVM

  3)建立PV

[root@test-centos7-node1 ~]# pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
[root@test-centos7-node1 ~]# pvscan 
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  PV /dev/sdb3                      lvm2 [10.00 GiB]
  PV /dev/sdb2                      lvm2 [10.00 GiB]
  Total: 3 [30.00 GiB] / in use: 0 [0   ] / in no VG: 3 [30.00 GiB]
[root@test-centos7-node1 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g
  /dev/sdb3     lvm2 ---  10.00g 10.00g
[root@test-centos7-node1 ~]# pvdisplay 
  "/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               MsszES-YPdm-YGQl-7rgg-B6gX-Q4xu-T8m1gz
   
  "/dev/sdb3" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               BMMx8p-zu9O-ns61-G9DU-iKMR-NmZO-crCjlR
   
  "/dev/sdb2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               LPynpW-twlu-fxwg-OlCT-jA2A-R5UI-fvqWLj
   
[root@test-centos7-node1 ~]# 

  說明:pvcreate 命令表示建立PV 後面跟硬碟或分割槽對應的裝置檔案,pvscan 命令作用是搜尋系統裡面任何具有PV屬性的磁碟,PV屬性就是通過pvcreate建立過的磁碟,pvs是檢視pv簡要情況,pvdisplay 檢視pv的詳細資訊。當然我們要移除某塊盤,讓其不具備PV屬性,可以用pvremove + 磁碟的裝置檔案路徑

[root@test-centos7-node1 ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped.
[root@test-centos7-node1 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g
[root@test-centos7-node1 ~]# 

  說明:移除pv的前提是它沒有在任何VG裡面才可做移除,否則移除不了

  4)建立VG

[root@test-centos7-node1 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g
[root@test-centos7-node1 ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@test-centos7-node1 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb1     lvm2 ---  10.00g 10.00g
  /dev/sdb2     lvm2 ---  10.00g 10.00g
  /dev/sdb3     lvm2 ---  10.00g 10.00g
[root@test-centos7-node1 ~]# vgcreate test -s 8M /dev/sdb{1,2,3}
  Volume group "test" successfully created
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  test   3   0   0 wz--n- <29.98g <29.98g
[root@test-centos7-node1 ~]# vgscan
  Reading volume groups from cache.
  Found volume group "test" using metadata type lvm2
[root@test-centos7-node1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               test
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               <29.98 GiB
  PE Size               8.00 MiB
  Total PE              3837
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3837 / <29.98 GiB
  VG UUID               31vxAP-L5jb-8Yxm-25m2-LdD0-ee8R-sdTjum
   
[root@test-centos7-node1 ~]# vgreduce test /dev/sdb3
  Removed "/dev/sdb3" from volume group "test"
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   2   0   0 wz--n- 19.98g 19.98g
[root@test-centos7-node1 ~]# vgcreate test2 /dev/sdb3
  Volume group "test2" successfully created
[root@test-centos7-node1 ~]# vgs
  VG    #PV #LV #SN Attr   VSize   VFree  
  test    2   0   0 wz--n-  19.98g  19.98g
  test2   1   0   0 wz--n- <10.00g <10.00g
[root@test-centos7-node1 ~]# vgdisplay test2
  --- Volume group ---
  VG Name               test2
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               rc94SP-JAlk-63Rw-n5xz-qB0d-grnT-ItrMvT
   
[root@test-centos7-node1 ~]# vgremove test2
  Volume group "test2" successfully removed
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   2   0   0 wz--n- 19.98g 19.98g
[root@test-centos7-node1 ~]# 

  說明:同樣的vgcreate 表示建立VG 其用法格式是vgcreate  VGNAME [option] 儲存裝置路徑 其中-s表示指定PE的大小,VGNAME表示VG的名稱,需要說明的是,指定名稱不能和系統現有的VG名稱相同;vgs檢視系統上所有VG的簡要資訊,vgscan搜尋系統上面是否有VG,vgdisplay檢視所有VG的詳細資訊,當然此例中只有一個,我們也可在後面指定檢視某個VG的詳細資訊,只需要指定其VG名稱即可;有關vg的命令有很多其中vgreduce的作用是在VG內移除PV,vgremove的作用是刪除一個VG,這兩個命令都需要在其後指定要操作的VG名稱

  5)建立LV

[root@test-centos7-node1 ~]# lvs
[root@test-centos7-node1 ~]# lvcreate -L 2G -n aaa test
  Logical volume "aaa" created.
[root@test-centos7-node1 ~]# lvcreate -L 3G -n bbb test 
  Logical volume "bbb" created.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 2.00g                                                    
  bbb  test -wi-a----- 3.00g                                                    
[root@test-centos7-node1 ~]# lvscan 
  ACTIVE            '/dev/test/aaa' [2.00 GiB] inherit
  ACTIVE            '/dev/test/bbb' [3.00 GiB] inherit
[root@test-centos7-node1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test/aaa
  LV Name                aaa
  VG Name                test
  LV UUID                R9weh0-D85B-rMcW-oYSM-dAQb-gIQh-RXxITP
  LV Write Access        read/write
  LV Creation host, time test-centos7-node1, 2020-01-06 09:05:23 -0500
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/test/bbb
  LV Name                bbb
  VG Name                test
  LV UUID                LYwvZj-ogpf-nwtF-mja6-xwwl-A24W-BslJOu
  LV Write Access        read/write
  LV Creation host, time test-centos7-node1, 2020-01-06 09:05:34 -0500
  LV Status              available
  # open                 0
  LV Size                3.00 GiB
  Current LE             384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
[root@test-centos7-node1 ~]# lvresize -L +4G /dev/test/aaa 
  Size of logical volume test/aaa changed from 2.00 GiB (256 extents) to 6.00 GiB (768 extents).
  Logical volume test/aaa successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 6.00g                                                    
  bbb  test -wi-a----- 3.00g                                                    
[root@test-centos7-node1 ~]# lvresize -L -1G /dev/test/bbb
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/bbb? [y/n]: y
  Size of logical volume test/bbb changed from 3.00 GiB (384 extents) to 2.00 GiB (256 extents).
  Logical volume test/bbb successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 6.00g                                                    
  bbb  test -wi-a----- 2.00g                                                    
[root@test-centos7-node1 ~]# lvreduce -L 3G /dev/test/aaa   
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/aaa? [y/n]: y
  Size of logical volume test/aaa changed from 6.00 GiB (768 extents) to 3.00 GiB (384 extents).
  Logical volume test/aaa successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 3.00g                                                    
  bbb  test -wi-a----- 2.00g                                                    
[root@test-centos7-node1 ~]# lvreduce -L -1G /dev/test/aaa  
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/aaa? [y/n]: y
  Size of logical volume test/aaa changed from 3.00 GiB (384 extents) to 2.00 GiB (256 extents).
  Logical volume test/aaa successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 2.00g                                                    
  bbb  test -wi-a----- 2.00g                                                    
[root@test-centos7-node1 ~]# lvremove /dev/test/bbb
Do you really want to remove active logical volume test/bbb? [y/n]: y
  Logical volume "bbb" successfully removed
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  aaa  test -wi-a----- 2.00g                                                    
[root@test-centos7-node1 ~]# 

  說明:lvcreate 命令作用是建立LV 其中-L表示指定LV的大小,-n表示lv的名稱 最後跟VG的名稱,表示從那個VG上建立LV;lvs 命令作用是檢視系統所有的lv簡要資訊 ;lvdisplay 檢視LV的詳細資訊,後面可以跟VG的名稱表示檢視指定VG上的所有LV的詳細資訊;lvreduce 命令作用是縮減指定LV裡的空間,如果指定的大小是負數如-3M 表示縮減3M  如果指定的是 3M 則表示縮減至3M ,這個需要注意,還有這個命令指定大小不能以類似+4M來指定;lvresize此命令的作用是調整LV的容量大小,這個命令指定調整大小+表示增加多少,-表示減少多少,若沒有+/-表示調整到指定大小,lvresize和lvreduce這兩個命令後面都是跟的lv對應裝置的路徑(其實不是真的裝置路徑,是裝置的軟連線路徑),不能指定其名稱;lvremove命令作用是刪除指定的LV,若指定的是vg名,表示刪除該VG上的所有LV,若需要刪除某個LV 需要指定其對應裝置路徑。

  到此lvm就已經實現,後續就可以直接格式化,然後掛載使用了

[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   2   0   0 wz--n- 19.98g 19.98g
[root@test-centos7-node1 ~]# lvcreate -l 100%FREE -n xxx test
WARNING: xfs signature detected on /dev/test/xxx at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/test/xxx.
  Logical volume "xxx" created.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  xxx  test -wi-a----- 19.98g                                                    
[root@test-centos7-node1 ~]# mkfs.xfs -f /dev/test/xxx 
meta-data=/dev/test/xxx          isize=512    agcount=4, agsize=1309696 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5238784, 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@test-centos7-node1 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   50G  0 disk 
├─sda1         8:1    0    2G  0 part /boot
├─sda2         8:2    0    2G  0 part [SWAP]
└─sda3         8:3    0   46G  0 part /
sdb            8:16   0   50G  0 disk 
├─sdb1         8:17   0   10G  0 part 
│ └─test-xxx 253:0    0   20G  0 lvm  
├─sdb2         8:18   0   10G  0 part 
│ └─test-xxx 253:0    0   20G  0 lvm  
└─sdb3         8:19   0   10G  0 part 
sr0           11:0    1  792M  0 rom  
[root@test-centos7-node1 ~]# mount /dev/test/xxx /mnt
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   20G   33M   20G   1% /mnt
[root@test-centos7-node1 ~]# 

  三、擴容LV

  1)建立PV,並將其加入到VG中

[root@test-centos7-node1 ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  test lvm2 a--  9.99g    0 
  /dev/sdb2  test lvm2 a--  9.99g    0 
[root@test-centos7-node1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               test
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  28
  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               19.98 GiB
  PE Size               8.00 MiB
  Total PE              2558
  Alloc PE / Size       2558 / 19.98 GiB
  Free  PE / Size       0 / 0   
  VG UUID               31vxAP-L5jb-8Yxm-25m2-LdD0-ee8R-sdTjum
   
[root@test-centos7-node1 ~]# 

  說明:從上面的資訊可以看到VG的大小是19.98G 也就是兩塊PV的大小。現在我們新建立一個pv,然後加到vg裡

[root@test-centos7-node1 ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  test lvm2 a--  9.99g    0 
  /dev/sdb2  test lvm2 a--  9.99g    0 
[root@test-centos7-node1 ~]# pvcreate  /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@test-centos7-node1 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1  test lvm2 a--   9.99g     0 
  /dev/sdb2  test lvm2 a--   9.99g     0 
  /dev/sdb3       lvm2 ---  10.00g 10.00g
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  test   2   1   0 wz--n- 19.98g    0 
[root@test-centos7-node1 ~]# vgextend test /dev/sdb3
  Volume group "test" successfully extended
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  test   3   1   0 wz--n- <29.98g 9.99g
[root@test-centos7-node1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               test
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  31
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <29.98 GiB
  PE Size               8.00 MiB
  Total PE              3837
  Alloc PE / Size       2558 / 19.98 GiB
  Free  PE / Size       1279 / 9.99 GiB
  VG UUID               31vxAP-L5jb-8Yxm-25m2-LdD0-ee8R-sdTjum
   
[root@test-centos7-node1 ~]# 

  說明:vgextend命令作用是將指定pv加入到指定VG中,VG指定其名稱即可,pv需指定其裝置路徑

  2)將新加的VG的PE加入到xxx LV裡

[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  test   3   1   0 wz--n- <29.98g 9.99g
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  xxx  test -wi-ao---- 19.98g                                                    
[root@test-centos7-node1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test/xxx
  LV Name                xxx
  VG Name                test
  LV UUID                ihOo41-gh1L-eSHK-iLXY-UGfF-J6uI-UmVWhF
  LV Write Access        read/write
  LV Creation host, time test-centos7-node1, 2020-01-06 10:00:08 -0500
  LV Status              available
  # open                 1
  LV Size                19.98 GiB
  Current LE             2558
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@test-centos7-node1 ~]# lvextend -l +100%FREE /dev/test/xxx 
  Size of logical volume test/xxx changed from 19.98 GiB (2558 extents) to <29.98 GiB (3837 extents).
  Logical volume test/xxx successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  xxx  test -wi-ao---- <29.98g                                                    
[root@test-centos7-node1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test/xxx
  LV Name                xxx
  VG Name                test
  LV UUID                ihOo41-gh1L-eSHK-iLXY-UGfF-J6uI-UmVWhF
  LV Write Access        read/write
  LV Creation host, time test-centos7-node1, 2020-01-06 10:00:08 -0500
  LV Status              available
  # open                 1
  LV Size                <29.98 GiB
  Current LE             3837
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@test-centos7-node1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  test   3   1   0 wz--n- <29.98g    0 
[root@test-centos7-node1 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   50G  0 disk 
├─sda1         8:1    0    2G  0 part /boot
├─sda2         8:2    0    2G  0 part [SWAP]
└─sda3         8:3    0   46G  0 part /
sdb            8:16   0   50G  0 disk 
├─sdb1         8:17   0   10G  0 part 
│ └─test-xxx 253:0    0   30G  0 lvm  /mnt
├─sdb2         8:18   0   10G  0 part 
│ └─test-xxx 253:0    0   30G  0 lvm  /mnt
└─sdb3         8:19   0   10G  0 part 
  └─test-xxx 253:0    0   30G  0 lvm  /mnt
sr0           11:0    1  792M  0 rom  
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   20G   33M   20G   1% /mnt
[root@test-centos7-node1 ~]# 

  說明:可看到lvs裡的空間已經加上去,lvextend命令作用是將指定VG裡的空間新增到指定的lv中,上面的例子是把VG裡的所有空閒空間新增到/dev/test/xxx裡,當然還有一種情況在VG還有空餘的空間,我們可以用lvresize 來調整lv的大小;從上面的資訊可以看到我們把新的空間加入到VG和Lv中後,df 看掛載點空間卻沒有增加,接下來我們通過resize2fs將檔案系統同步到增大的空間。

[root@test-centos7-node1 ~]# resize2fs /dev/test/xxx 
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/test/xxx
Couldn't find valid filesystem superblock.
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   20G   33M   20G   1% /mnt
[root@test-centos7-node1 ~]# 

  說明:看來用此命令不行,因為resize2fs這個命令針對ext系列的檔案系統,xfs需要用 xfs_growfs來調整

[root@test-centos7-node1 ~]# xfs_growfs /dev/test/xxx 
meta-data=/dev/mapper/test-xxx   isize=512    agcount=4, agsize=1309696 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=5238784, 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 5238784 to 7858176
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   30G   33M   30G   1% /mnt
[root@test-centos7-node1 ~]# 

  四、縮減LV(xfs檔案系統)

  1)解除安裝已經掛好的LV

[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   30G   33M   30G   1% /mnt
[root@test-centos7-node1 ~]# umount /mnt
[root@test-centos7-node1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        46G  1.6G   45G   4% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.6M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1       2.0G  135M  1.9G   7% /boot
tmpfs           378M     0  378M   0% /run/user/0
[root@test-centos7-node1 ~]# 

  2)強制進行磁碟檢測

[root@test-centos7-node1 ~]# xfs_repair -n /dev/test/xxx 
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan (but don't clear) agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.
[root@test-centos7-node1 ~]# 

  說明:ext系列檔案系統可e2fsck命令檢查

  3)調整lv大小

[root@test-centos7-node1 ~]# lvreduce -L -10G /dev/test/xxx 
  WARNING: Reducing active logical volume to <19.98 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/xxx? [y/n]: y
  Size of logical volume test/xxx changed from <29.98 GiB (3837 extents) to <19.98 GiB (2557 extents).
  Logical volume test/xxx successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  xxx  test -wi-a----- <19.98g                                                    
[root@test-centos7-node1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/test/xxx
  LV Name                xxx
  VG Name                test
  LV UUID                uhZZaz-Odd9-ibwY-2Z1Z-ZmNY-eZF7-0lXERT
  LV Write Access        read/write
  LV Creation host, time test-centos7-node1, 2020-01-06 10:32:42 -0500
  LV Status              available
  # open                 0
  LV Size                <19.98 GiB
  Current LE             2557
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@test-centos7-node1 ~]#

  4)掛載

[root@test-centos7-node1 ~]# mount /dev/test/xxx /mnt
mount: /dev/mapper/test-xxx: can't read superblock
[root@test-centos7-node1 ~]# 

  說明:做到這裡發現一個問題,xfs檔案系統是不支援邏輯捲縮減的,為什麼呢?xfs的檔案系統調整命令是xfs_growfs 這個命令只支援增大的操作。我們在調整lv大小的時候實際上是把檔案系統給破壞了,要想縮減空間,就必須重新格式化後在掛載,這樣一來如果原有的盤裡有資料就丟了。所以xfs上做LV的縮減沒有意義

[root@test-centos7-node1 ~]# mkfs.xfs /dev/test/xxx -f
meta-data=/dev/test/xxx          isize=512    agcount=4, agsize=1309184 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5236736, 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@test-centos7-node1 ~]# mount  /dev/test/xxx  /mnt
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   20G   33M   20G   1% /mnt
[root@test-centos7-node1 ~]

  五、縮減LV(ext系列檔案系統)

  1)解除安裝已掛載的LV

[root@test-centos7-node1 ~]# df -Th
Filesystem           Type      Size  Used Avail Use% Mounted on
/dev/sda3            xfs        46G  1.6G   45G   4% /
devtmpfs             devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                tmpfs     1.9G  8.6M  1.9G   1% /run
tmpfs                tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1            xfs       2.0G  135M  1.9G   7% /boot
tmpfs                tmpfs     378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx ext4       20G   45M   19G   1% /mnt
[root@test-centos7-node1 ~]# umount /mnt
[root@test-centos7-node1 ~]# df -Th     
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda3      xfs        46G  1.6G   45G   4% /
devtmpfs       devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs          tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs          tmpfs     1.9G  8.6M  1.9G   1% /run
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1      xfs       2.0G  135M  1.9G   7% /boot
tmpfs          tmpfs     378M     0  378M   0% /run/user/0
[root@test-centos7-node1 ~]# 

  2)強制執行磁碟檢測

[root@test-centos7-node1 ~]# e2fsck -f /dev/test/xxx 
e2fsck 1.42.9 (28-Dec-2013)
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/test/xxx: 11/1310720 files (0.0% non-contiguous), 126322/5236736 blocks
[root@test-centos7-node1 ~]# 

  說明:這一步我們在不執行的話,直接下一步它也會提示我們先做磁碟檢測

  3)調整檔案系統大小

[root@test-centos7-node1 ~]# resize2fs /dev/test/xxx 12G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/test/xxx to 3145728 (4k) blocks.
The filesystem on /dev/test/xxx is now 3145728 blocks long.

[root@test-centos7-node1 ~]# 

  4)調整LV的大小

[root@test-centos7-node1 ~]# lvreduce -L 12G /dev/test/xxx 
  WARNING: Reducing active logical volume to 12.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/xxx? [y/n]: y
  Size of logical volume test/xxx changed from <19.98 GiB (2557 extents) to 12.00 GiB (1536 extents).
  Logical volume test/xxx successfully resized.
[root@test-centos7-node1 ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  xxx  test -wi-a----- 12.00g                                                    
[root@test-centos7-node1 ~]# 

   說明:這裡縮減到的空間需同文件系統的大小一致或者縮減後的空間比檔案系統調整的空間要大才行,這樣才不能損壞檔案系統,切記不能比檔案系統調整的空間還小,小了,在縮減空間的時候就破壞了檔案系統,會導致後續的掛載無法進行。

  5)掛載

[root@test-centos7-node1 ~]# mount /dev/test/xxx /mnt
[root@test-centos7-node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              46G  1.6G   45G   4% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  8.6M  1.9G   1% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1             2.0G  135M  1.9G   7% /boot
tmpfs                 378M     0  378M   0% /run/user/0
/dev/mapper/test-xxx   12G   41M   12G   1% /mnt
[root@test-centos7-node1 ~]#