邏輯卷的拉伸及縮減

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



一、拉伸一個邏輯卷

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

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

24203450-e7004c094af84838b88e2c032227969


我們從上圖可以看到,我們在對邏輯捲進行拉伸時,其實際就是向邏輯卷中增加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]# lslost+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-2420: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]# lslost+found  xiaoluo.txt[root@xiaoluo mnt]# cat xiaoluo.txt I am xiaoluo

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

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

[root@xiaoluo mnt]# df -hFilesystem            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 requiredold desc_blocks = 1, new_desc_blocks = 1Performing 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 -hFilesystem            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   210 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 requiredold desc_blocks = 1, new_desc_blocks = 1Performing 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
複製代碼

三、縮小一個邏輯卷

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

24212929-12f3d63d3abe455592b43b9c566ae00

我們看到縮小邏輯卷其實就是從當前的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  // 這條命令的作用就是縮小我們的文件系統,將我們的文件系統縮小到10Gresize2fs 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 sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 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 命令來縮小我們的文件系統,縮小爲10Gresize2fs 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]# lslost+found  xiaoluo.txt[root@xiaoluo mnt]# cat xiaoluo.txt I am xiaoluo

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

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

四、縮小卷組

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

24215714-8c9f2b682d9e490199319c8cbb2d043

比如說我們這裏需要將物理卷/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


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