Linux學習之CentOS(二十七)--Linux磁盤管理:LVM邏輯卷的拉伸及縮減



您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。 如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦 如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 501395377@qq.com / lzp501395377@gmail.com 如果需要轉載,請注明出處,謝謝!!

 

 

在上一篇隨筆里面 Linux學習之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的創建及使用 詳細講解了LVM邏輯卷的創建及使用,我們知道創建邏輯卷的步驟是先格式化物理硬盤位PV,然后創建一個VG,再將多個PV加入到VG中,最后基於VG創建我們的LV。在這篇隨筆里,我們將繼續學習LVM邏輯卷的知識,包括邏輯卷的拉伸及縮減...

一、拉伸一個邏輯卷

我們知道相比於傳統磁盤管理方式的各種問題,使用LVM邏輯卷來管理我們的磁盤,我們可以對其進行動態的管理。在傳統的磁盤管理方式中,我們如果出現分區大小不足的情況下,我們此時只能通過加入一塊物理硬盤,然后對其進行分區,因為加入的硬盤作為獨立的文件系統存在,所以對原有分區並沒有影響,如果此時我們需要擴大分區,就只能先將之前的分區先卸載掉,然后將所有的信息轉移到新的分區下,最后再將新的分區掛載上去,如果是在生產環境下,這樣是不可想象的,正因為如此,我們才出現了LVM的磁盤管理方式,可以動態的對我們的磁盤進行管理。

我們首先來看下動態拉伸一個邏輯卷的示意圖:

 

我們從上圖可以看到,我們在對邏輯卷進行拉伸時,其實際就是向邏輯卷中增加PE的數量,而PE的數量是由VG中剩余PE的數量所決定的。

注意:邏輯卷的拉伸操作可以在線進行,不需要卸載掉我們的邏輯卷

這樣的好處就是當我們的邏輯卷的大小不夠用時,我們不需要對其進行卸載,就可以動態的增加我們的邏輯卷的大小,並不會對我們的系統產生任何影響。例如如果我們的服務器上運行着一個重要的服務或者數據庫,並要求我們7*24小時不間斷保持在線,那么這樣的動態增加邏輯卷的大小就非常的有必要了。

接下來我們來看看拉伸邏輯卷的步驟:

因為我們的邏輯卷的拉伸操作是可以在線進行的,所以這里我們先將邏輯卷掛載上,並在使用情況下動態的拉伸我們的邏輯卷

 

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv /mnt
[root@xiaoluo ~]# cd /mnt
[root@xiaoluo mnt]# vi xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt

 

①查看當前VG的信息,保證VG中有足夠的空閑空間  通過 vgdisplay 或者 vgs 命令

 

[root@xiaoluo mnt]# vgdisplay
--- Volume group --- VG Name xiaoluo System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 15.99 GiB PE Size 4.00 MiB Total PE 4094 Alloc PE / Size 512 / 2.00 GiB Free PE / Size 3582 / 13.99 GiB  // 我們的VG當前還有14G,還有足夠的空閑空間 VG UUID Cn2iaV-gkf0-pg3M-5ZpY-Wqx9-C3r2-vmtnpM

 

在我們的VG中還有足夠的空閑空間時,我們就可以動態的對邏輯卷進行拉伸操作了

②擴充邏輯卷  通過 lvextend 命令

 

比如我這里要對 mylv 邏輯卷擴充1G的大小,此時我們就可以使用 lvextend -L +1G /dev/xiaoluo/mylv 命令來執行操作

 

[root@xiaoluo mnt]# lvs
  LV   VG      Attr      LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 2.00g   // 我們之前創建的 mylv 邏輯卷的大小為 2G

[root@xiaoluo mnt]# lvextend -L +1G /dev/xiaoluo/mylv 
  Extending logical volume mylv to 3.00 GiB  
  Logical volume mylv successfully resized

 

③查看完擴充后LV大小  擴充完后我們可以使用 lvdisplay 或者 lvs 命令來查看一下當前lv的信息

[root@xiaoluo mnt]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/xiaoluo/mylv
  LV Name                mylv
  VG Name                xiaoluo
  LV UUID                V8j32N-dTes-vADG-47gj-vSSk-LwdX-k3FPdd
  LV Write Access        read/write
  LV Creation host, time xiaoluo, 2013-05-24 20:42:46 +0800
  LV Status              available
  # open                 0
  LV Size                3.00 GiB  // 擴充以后我們的 mylv 邏輯卷大小變成了3G了
  Current LE             768
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

這個時候我們發現拉伸以后我們的邏輯卷大小變成了3G了,此時我們正在使用我的邏輯卷,並沒有卸載掉該邏輯卷,同時我們查看邏輯卷里面的內容,發現其里面的文件還在,並且沒有受到一點損害

[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo

④更新文件系統  通過 resize2fs 命令

我們在對邏輯卷進行拉伸以后,我們通過 df -h 命令可以查看一下當前的文件系統信息

[root@xiaoluo mnt]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.8G   12G  25% /
tmpfs                 249M  560K  248M   1% /dev/shm
/dev/mapper/xiaoluo-mylv
                      2.0G   68M  1.9G   4% /mnt  

我們發現我們當前的掛載的邏輯卷的文件系統大小還是2G,並沒有變成3G,其原因就是我們的文件系統是在創建完LV以后就馬上格式化的,此后我們對邏輯卷進行拉伸以后,其並不會改變當前的文件系統,所以我們這個時候必須更新我們的文件系統,通過使用 resize2fs 命令

[root@xiaoluo mnt]# resize2fs /dev/xiaoluo/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/xiaoluo/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/xiaoluo/mylv to 786432 (4k) blocks.
The filesystem on /dev/xiaoluo/mylv is now 786432 blocks long.

[root@xiaoluo mnt]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.8G   12G  25% /
tmpfs                 249M  560K  248M   1% /dev/shm
/dev/mapper/xiaoluo-mylv
                      3.0G   68M  2.8G   3% /mnt  // 這個時候我們的文件系統已經更新了,大小也變成了3G

此時我們發現,我們這時的文件系統也已經更新了,大小變成了3G.

我們通過上面的步驟可以發現,拉伸一個邏輯卷的其實是非常簡單的,首先就是保持VG中有足夠的空閑空間,其次就是對我們的邏輯卷進行動態的拉伸,最后在拉伸完邏輯卷以后我們還必須要更新我們的文件系統。同時我們可以發現,在對邏輯卷進行拉伸時我們並不需要先卸載掉邏輯卷,可以在線進行,並且邏輯卷里面的文件內容都不會發生變化。

二、拉伸一個卷組

上面介紹了如何拉伸一個邏輯卷,如果說此時我們的VG中PE的數量已經不足了,此時我們如果需要拉伸我們的邏輯卷,發現卷組中的空間已經不夠用了,這個時候我們就必須對我們的卷組進行拉伸,使得卷組中有足夠的空閑空間,最后再來拉伸我們的邏輯卷。我們知道卷組其實就是將多塊PV加入到VG當中,所以卷組的拉伸也非常的簡單,我們只需要增加一塊物理硬盤,將其格式化成PV,然后再將這個PV加入到該卷組中即可。

這里我們首先模擬一下將VG中的剩余空間全部拉伸到我們的邏輯卷當中,然后我們通過增加一塊物理硬盤,來對我們的卷組進行拉伸操作

[root@xiaoluo mnt]# vgs  // 查看當前vg的空閑空間大小
  VG      #PV #LV #SN Attr   VSize  VFree 
  xiaoluo   2   1   0 wz--n- 15.99g 12.99g
[root@xiaoluo mnt]# lvextend -L +11G /dev/xiaoluo/mylv   // 我們將11G的空間拉伸給當前的邏輯卷 Extending logical volume mylv to 14.00 GiB   Logical volume mylv successfully resized
[root@xiaoluo mnt]# resize2fs
/dev/xiaoluo/mylv   // 更新文件系統 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/xiaoluo/mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/xiaoluo/mylv to 3670016 (4k) blocks. The filesystem on /dev/xiaoluo/mylv is now 3670016 blocks long. [root@xiaoluo mnt]# df -h  // 查看當前文件系統信息 Filesystem Size Used Avail Use% Mounted on /dev/sda2 16G 3.8G 12G 25% / tmpfs 249M 560K 248M 1% /dev/shm /dev/mapper/xiaoluo-mylv 14G 69M 14G 1% /mnt

這個時候我們如果還要對邏輯卷進行擴充,但是此時我們的VG中空閑空間的大小已經不太夠用了,我們這個時候就需要對我們的卷組進行動態的拉伸了

①將要添加到VG的硬盤格式化成PV  通過 pvcreate 命令

 

[root@xiaoluo mnt]# pvcreate /dev/sdd 
  Physical volume "/dev/sdd" successfully created

[root@xiaoluo mnt]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 1.99g
  /dev/sdd           lvm2 a--  8.00g 8.00g  // 此時我們新加入的一塊硬盤還沒有添加到VG當中

 

②將新的PV添加到指定的VG當中  通過 vgextend 命令

[root@xiaoluo mnt]# vgextend xiaoluo /dev/sdd 
  Volume group "xiaoluo" successfully extended

[root@xiaoluo mnt]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 1.99g
  /dev/sdd   xiaoluo lvm2 a--  8.00g 8.00g

③查看當前VG的信息  通過 vgdisplay 或者 vgs 命令

[root@xiaoluo mnt]# vgdisplay 
  --- Volume group ---
  VG Name               xiaoluo
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  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               23.99 GiB
  PE Size               4.00 MiB
  Total PE              6141
  Alloc PE / Size       3584 / 14.00 GiB
  Free  PE / Size       2557 / 9.99 GiB  // 此時我們發現我們VG的大小以及得到拉伸了
  VG UUID               h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb

三、縮小一個邏輯卷

上面講的都是如何對邏輯卷進行拉伸以及對卷組進行拉伸,其實邏輯卷還可以動態的對其進行縮小,雖然在實際情況中,我們幾乎不會遇到縮小一個邏輯卷的這種情況,不過還是有必要學習一下如何縮小一個邏輯卷,首先我們也是先來看看縮小邏輯卷的一個示意圖

我們看到縮小邏輯卷其實就是從當前的LV中拿出指定的PE數量放回到VG當中。

注意:邏輯卷的縮小操作必須離線執行,要先卸載掉邏輯卷才可以

上面在講的邏輯卷的拉伸操作時我們可以在線執行,不需要卸載掉邏輯卷,但是在進行邏輯卷的縮小操作時,我們必須要先卸載掉邏輯卷才行,否則就可能造成邏輯卷里的文件發生損害。接下來我們來看一下對邏輯卷進行縮小操作的步驟

①卸載已經掛載的邏輯卷  通過 umount 命令

[root@xiaoluo mnt]# cd
[root@xiaoluo ~]# umount /mnt  // 先將我們的邏輯卷卸載掉

②縮小文件系統(會提示需要運行fsck來檢查文件系統)  通過 resize2fs 命令

我們在講到對邏輯卷進行拉伸的時候,其順序是先對邏輯卷進行拉伸操作,然后再更新我們的文件系統,但是在對邏輯卷進行縮小操作時,我們必須先執行縮小文件系統這個操作!!!這個順序必須要記清楚!!!

[root@xiaoluo ~]# lvs  // 首先我們看下我們當前的邏輯卷大小,此時為14G,我們這里假設要將其縮減為10G的大小
  LV   VG      Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 14.00g                 
[root@xiaoluo
~]# resize2fs /dev/xiaoluo/mylv 10G  // 這條命令的作用就是縮小我們的文件系統,將我們的文件系統縮小到10G resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/xiaoluo/mylv' first.  // 提示我們首先需要運行 e2fsck 命令來對我們的文件系統進行檢查 [root@xiaoluo ~]# e2fsck -f /dev/xiaoluo/mylv   // 使用 e2fsck 命令來檢查我們的文件系統 e2fsck 1.41.12 (17-May-2010) 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/xiaoluo/mylv: 12/917504 files (0.0% non-contiguous), 75249/3670016 blocks
[root@xiaoluo
~]# resize2fs /dev/xiaoluo/mylv 10G  // 此時再使用 resize2fs 命令來縮小我們的文件系統,縮小為10G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/xiaoluo/mylv to 2621440 (4k) blocks. The filesystem on /dev/xiaoluo/mylv is now 2621440 blocks long.

這個時候我們的邏輯卷的文件系統已經被縮小為10G了,接下來我們就可以縮小我們的邏輯卷的大小了

③縮小LV  通過 lvreduce 命令

因為我們之前的LV大小為14G,我們通過縮小文件系統將其縮減為10G,所以此時我們需要縮小4G大小的邏輯卷

[root@xiaoluo ~]# lvreduce -L -4G /dev/xiaoluo/mylv   // 縮小4G大小的邏輯卷
  WARNING: Reducing active logical volume to 10.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)  // 這里會提示一個警告可能會損壞我們的文件,這種情況會出現在 當我們需要縮小的文件大小與實際操作時縮小的文件大小不一致時,比如這里我如果多縮小了1個G大小的邏輯卷,這個時候就會出現文件損壞的情況
Do you really want to reduce mylv? [y/n]: y  
  Reducing logical volume mylv to 10.00 GiB
  Logical volume mylv successfully resized
[root@xiaoluo
~]# lvs  // 此時我們的邏輯卷已經被縮小為10G了 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv xiaoluo -wi-a---- 10.00g

縮小邏輯卷的操作是個危險的操作,稍不注意就可能損壞我們的邏輯卷,造成文件的丟失或損害,所以我們一般不要對邏輯卷進行縮減操作!!!

縮小完邏輯卷以后,我們再將邏輯卷掛載到 /mnt 下,看看里面的文件是否還在

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv /mnt/
[root@xiaoluo ~]# cd /mnt/
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo

我們發現,我們之前創建的文件,以及文件里的內容都沒有發生改變。

最后再強調一點:縮小邏輯卷的操作必須要先卸載掉邏輯卷,然后先縮小文件系統,最后再來縮小我們的邏輯卷才行!!

四、縮小卷組

我們既然可以動態的拉伸邏輯卷、拉伸卷組以及縮小邏輯卷,那么我們當然也可以縮小我們的卷組。什么時候我們需要來縮小我們的卷組呢?比如說我有一塊硬盤,這個時候我們需要將這塊硬盤拆下來,或者說不想將這塊硬盤再作為邏輯卷了,這個時候我們就需要執行縮小卷組的操作了,縮小卷組的操作可以通過下面這個示意圖來展示:

比如說我們這里需要將物理卷/sdd這塊硬盤拿走,那么縮小卷組的步驟如下:

①首先必須也要卸載掉我們的邏輯卷  通過 umount 命令

 

[root@xiaoluo mnt]# cd
[root@xiaoluo ~]# umount /dev/xiaoluo/mylv 

 

②將一個PV從指定卷組中移除掉  通過 vgreduce 命令

[root@xiaoluo ~]# pvs  // 首先我們需要看下我們當前有哪些PV正在使用中,因為縮小一個卷組其實就是從卷組中移除一個PV,如果PV正在使用中,那么PV就移除不了
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 5.99g
  /dev/sdd   xiaoluo lvm2 a--  8.00g 8.00g  // 當前只有 sdd 這個PV可以移除掉

[root@xiaoluo ~]# vgreduce xiaoluo /dev/sdd   // 我們將 /dev/sdd 這個PV從指定卷組 xiaoluo 中移除掉
  Removed "/dev/sdd" from volume group "xiaoluo"

查看當前卷組的信息  通過 vgdisplay 或者 vgs 命令

 

[root@xiaoluo ~]# vgdisplay 
  --- Volume group ---
  VG Name               xiaoluo
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2  // 當前PV也變成了2塊了
  Act PV                2
  VG Size               15.99 GiB  // 我們發現這時我們的卷組大小只有16G了
  PE Size               4.00 MiB
  Total PE              4094
  Alloc PE / Size       2560 / 10.00 GiB
  Free  PE / Size       1534 / 5.99 GiB
  VG UUID               h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb

[root@xiaoluo ~]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 5.99g
  /dev/sdd           lvm2 a--  8.00g 8.00g  // dev/sdd 這個PV已經從卷組中移除掉了

 

④將PV刪除掉   通過 pvremove 命令

 

 

[root@xiaoluo ~]# pvremove /dev/sdd 
  Labels on physical volume "/dev/sdd" successfully wiped

 

至此,本篇隨筆就已經告一段落了,在本篇隨筆里詳細講解了如何動態的對我們的邏輯卷進行拉伸以及縮小操作,同時對LVM的基本概念、基本原理(Linux學習之CentOS(二十五)--Linux磁盤管理:LVM邏輯卷基本概念及LVM的工作原理)以及LVM的配置使用(Linux學習之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的創建及使用)等知識的總結也全部結束了!!!

在以后學習Linux當中,將繼續記錄自己學習Linux的心得、體會!!!

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM