Linux磁盤管理:LVM邏輯卷的拉伸及縮減

轉自  http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3097785.html

在上一篇隨筆裏面 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的心得、體會!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章