在上一篇隨筆里面Linux學(xué)習(xí)之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的創(chuàng)建及使用詳細(xì)講解了LVM邏輯卷的創(chuàng)建及使用,我們知道創(chuàng)建邏輯卷的步驟是先格式化物理硬盤位PV,然后創(chuàng)建一個VG,再將多個PV加入到VG中,最后基于VG創(chuàng)建我們的LV。在這篇隨筆里,我們將繼續(xù)學(xué)習(xí)LVM邏輯卷的知識,包括邏輯卷的拉伸及縮減...
一、拉伸一個邏輯卷
我們知道相比于傳統(tǒng)磁盤管理方式的各種問題,使用LVM邏輯卷來管理我們的磁盤,我們可以對其進(jìn)行動態(tài)的管理。在傳統(tǒng)的磁盤管理方式中,我們?nèi)绻霈F(xiàn)分區(qū)大小不足的情況下,我們此時只能通過加入一塊物理硬盤,然后對其進(jìn)行分區(qū),因為加入的硬盤作為獨立的文件系統(tǒng)存在,所以對原有分區(qū)并沒有影響,如果此時我們需要擴(kuò)大分區(qū),就只能先將之前的分區(qū)先卸載掉,然后將所有的信息轉(zhuǎn)移到新的分區(qū)下,最后再將新的分區(qū)掛載上去,如果是在生產(chǎn)環(huán)境下,這樣是不可想象的,正因為如此,我們才出現(xiàn)了LVM的磁盤管理方式,可以動態(tài)的對我們的磁盤進(jìn)行管理。
我們首先來看下動態(tài)拉伸一個邏輯卷的示意圖:
我們從上圖可以看到,我們在對邏輯卷進(jìn)行拉伸時,其實際就是向邏輯卷中增加PE的數(shù)量,而PE的數(shù)量是由VG中剩余PE的數(shù)量所決定的。
【注意:】邏輯卷的拉伸操作可以在線進(jìn)行,不需要卸載掉我們的邏輯卷
這樣的好處就是當(dāng)我們的邏輯卷的大小不夠用時,我們不需要對其進(jìn)行卸載,就可以動態(tài)的增加我們的邏輯卷的大小,并不會對我們的系統(tǒng)產(chǎn)生任何影響。例如如果我們的服務(wù)器上運行著一個重要的服務(wù)或者數(shù)據(jù)庫,并要求我們7*24小時不間斷保持在線,那么這樣的動態(tài)增加邏輯卷的大小就非常的有必要了。
接下來我們來看看拉伸邏輯卷的步驟:
因為我們的邏輯卷的拉伸操作是可以在線進(jìn)行的,所以這里我們先將邏輯卷掛載上,并在使用情況下動態(tài)的拉伸我們的邏輯卷
[root@xiaoluo ~]#mount/dev/xiaoluo/mylv /mnt
[root@xiaoluo~]# cd /mnt
[root@xiaoluo mnt]#vixiaoluo.txt
[root@xiaoluo mnt]#catxiaoluo.txt
I am xiaoluo
[root@xiaoluo mnt]#lslost+found? xiaoluo.txt
①查看當(dāng)前VG的信息,保證VG中有足夠的空閑空間
通過vgdisplay或者vgs命令
[root@xiaoluo mnt]#vgdisplay
--- Volume group ---VG Name? ? ? ? ? ? ? xiaoluo
System ID
Format? ? ? ? ? ? ? ? lvm2
Metadata Areas2Metadata Sequence No2VG Access? ? ? ? ? ? read/writeVG Status? ? ? ? ? ? resizable
MAX LV0Cur LV1Open LV0Max PV0Cur PV2Act PV2VG Size15.99GiB
PE Size ? ?4.00MiB
Total ?PE ? ?4094 ? ?Alloc ? PE/ Size512/2.00GiB
Free? PE/ Size3582/13.99GiB //我們的VG當(dāng)前還有14G,還有足夠的空閑空間VG UUID? ? ? ? ? ? ? Cn2iaV-gkf0-pg3M-5ZpY-Wqx9-C3r2-vmtnpM
在我們的VG中還有足夠的空閑空間時,我們就可以動態(tài)的對邏輯卷進(jìn)行拉伸操作了
②擴(kuò)充邏輯卷通過lvextend命令
比如我這里要對 mylv 邏輯卷擴(kuò)充1G的大小,此時我們就可以使用lvextend -L +1G /dev/xiaoluo/mylv命令來執(zhí)行操作
[root@xiaoluo mnt]#lvs
LV? VG? ? ? Attr? ? ? LSize Pool Origin Data%? Move Log Cpy%Sync Convert
mylv xiaoluo-wi-a----2.00g//我們之前創(chuàng)建的 mylv 邏輯卷的大小為 2G
[root@xiaoluo mnt]#lvextend -L +1G?/dev/xiaoluo/mylv
Extending logical volume mylv to3.00GiBLogical volume mylv successfully resized
③查看完擴(kuò)充后LV大小
擴(kuò)充完后我們可以使用lvdisplay或者lvs命令來查看一下當(dāng)前l(fā)v的信息
[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/writeLV Creation host,timexiaoluo,2013-05-2420:42:46+0800LV Status? ? ? ? ? ? ? available
# open0LV Size3.00GiB // 擴(kuò)充以后我們的 mylv 邏輯卷大小變成了3G了
Current LE768Segments1Allocation? ? ? ? ? ? inherit
Read ahead sectors? ? auto- currently set to256Block device253:0
這個時候我們發(fā)現(xiàn)拉伸以后我們的邏輯卷大小變成了3G了,此時我們正在使用我的邏輯卷,并沒有卸載掉該邏輯卷,同時我們查看邏輯卷里面的內(nèi)容,發(fā)現(xiàn)其里面的文件還在,并且沒有受到一點損害
[root@xiaoluo mnt]#ls
lost +found? xiaoluo.txt
[root@xiaoluo mnt]#catxiaoluo.txt
I am xiaoluo
④更新文件系統(tǒng)通過resize2fs命令
我們在對邏輯卷進(jìn)行拉伸以后,我們通過df -h命令可以查看一下當(dāng)前的文件系統(tǒng)信息
[root@xiaoluo mnt]#?df-h
Filesystem? ? ? ? ? ? Size? Used Avail Use%Mounted on/dev/sda2? ? ? ? ? ? ? 16G3.8G? 12G25% /tmpfs? ? ? ? ? ? ? ? 249M? 560K? 248M1% /dev/shm/dev/mapper/xiaoluo-mylv2.0G? 68M1.9G4% /mnt
我們發(fā)現(xiàn)我們當(dāng)前的掛載的邏輯卷的文件系統(tǒng)大小還是2G,并沒有變成3G,其原因就是我們的文件系統(tǒng)是在創(chuàng)建完LV以后就馬上格式化的,此后我們對邏輯卷進(jìn)行拉伸以后,其并不會改變當(dāng)前的文件系統(tǒng),所以我們這個時候必須更新我們的文件系統(tǒng),
通過使用 resize2fs 命令
[root@xiaoluo mnt]#resize2fs /dev/xiaoluo/mylv
resize2fs1.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 =1Performing an on-line resize of /dev/xiaoluo/mylv to786432(4k) blocks.
The filesystem on/dev/xiaoluo/mylv is now786432blockslong.
[root@xiaoluo mnt]#df-h
Filesystem? ? ? ? ? ? Size? Used Avail Use%Mounted on/dev/sda2? ? ? ? ? ? ? 16G3.8G? 12G25% /tmpfs? ? ? ? ? ? ? ? 249M? 560K? 248M1% /dev/shm/dev/mapper/xiaoluo-mylv3.0G? 68M2.8G3% /mnt // 這個時候我們的文件系統(tǒng)已經(jīng)更新了,大小也變成了3G
此時我們發(fā)現(xiàn),我們這時的文件系統(tǒng)也已經(jīng)更新了,大小變成了3G.
我們通過上面的步驟可以發(fā)現(xiàn),拉伸一個邏輯卷的其實是非常簡單的,首先就是保持VG中有足夠的空閑空間,其次就是對我們的邏輯卷進(jìn)行動態(tài)的拉伸,最后在拉伸完邏輯卷以后我們還必須要更新我們的文件系統(tǒng)。同時我們可以發(fā)現(xiàn),在對邏輯卷進(jìn)行拉伸時我們并不需要先卸載掉邏輯卷,可以在線進(jìn)行,并且邏輯卷里面的文件內(nèi)容都不會發(fā)生變化。
二、拉伸一個卷組
上面介紹了如何拉伸一個邏輯卷,如果說此時我們的VG中PE的數(shù)量已經(jīng)不足了,此時我們?nèi)绻枰煳覀兊倪壿嬀恚l(fā)現(xiàn)卷組中的空間已經(jīng)不夠用了,這個時候我們就必須對我們的卷組進(jìn)行拉伸,使得卷組中有足夠的空閑空間,最后再來拉伸我們的邏輯卷。我們知道卷組其實就是將多塊PV加入到VG當(dāng)中,所以卷組的拉伸也非常的簡單,我們只需要增加一塊物理硬盤,將其格式化成PV,然后再將這個PV加入到該卷組中即可。
這里我們首先模擬一下將VG中的剩余空間全部拉伸到我們的邏輯卷當(dāng)中,然后我們通過增加一塊物理硬盤,來對我們的卷組進(jìn)行拉伸操作
?[root@xiaoluo mnt]# vgs // 查看當(dāng)前vg的空閑空間大小
VG? ? ? #PV #LV #SN Attr? VSize? VFree
xiaoluo210wz--n-15.99g12.99g
[root@xiaoluo mnt]# lvextend -L +11G /dev/xiaoluo/mylv // 我們將11G的空間拉伸給當(dāng)前的邏輯卷
Extending logical volume mylv to14.00GiB ? Logical volume mylv successfully resized
[root@xiaoluo mnt]# resize2fs ?/dev/xiaoluo/mylv // 更新文件系統(tǒng)
resize2fs1.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 =1Performing an on-line resize of /dev/xiaoluo/mylv to3670016(4k) blocks.
The filesystem on/dev/xiaoluo/mylv is now3670016blockslong.
[root@xiaoluo mnt]#df-h // 查看當(dāng)前文件系統(tǒng)信息
Filesystem? ? ? ? ? ? Size? Used Avail Use%Mounted on/dev/sda2? ? ? ? ? ? ? 16G3.8G? 12G25% /tmpfs? ? ? ? ? ? ? ? 249M? 560K? 248M1% /dev/shm/dev/mapper/xiaoluo-mylv
14G? 69M? 14G1% /mnt
?這個時候我們?nèi)绻€要對邏輯卷進(jìn)行擴(kuò)充,但是此時我們的VG中空閑空間的大小已經(jīng)不太夠用了,我們這個時候就需要對我們的卷組進(jìn)行動態(tài)的拉伸了
①將要添加到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.00g0/dev/sdc? xiaoluo lvm2 a--8.00g1.99g/dev/sdd? ? ? ? ? lvm2 a--8.00g8.00g // 此時我們新加入的一塊硬盤還沒有添加到VG當(dāng)中
?②將新的PV添加到指定的VG當(dāng)中
通過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.00g0/dev/sdc? xiaoluo lvm2 a--8.00g1.99g/dev/sdd? xiaoluo lvm2 a--8.00g8.00g
?③查看當(dāng)前VG的信息
通過vgdisplay或者vgs命令
?[root@xiaoluo mnt]# vgdisplay
--- Volume group ---VG Name? ? ? ? ? ? ? xiaoluo
System ID
Format? ? ? ? ? ? ? ? lvm2
Metadata Areas3Metadata Sequence No5VG Access? ? ? ? ? ? read/writeVG Status? ? ? ? ? ? resizable
MAX LV0Cur LV1Open LV1Max PV0Cur PV3Act PV3VG Size23.99GiB
PE Size4.00MiB
Total PE6141Alloc PE/ Size3584/14.00GiB
Free? PE/ Size2557/9.99GiB // 此時我們發(fā)現(xiàn)我們VG的大小以及得到拉伸了
VG UUID? ? ? ? ? ? ? h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb
?三、縮小一個邏輯卷
上面講的都是如何對邏輯卷進(jìn)行拉伸以及對卷組進(jìn)行拉伸,其實邏輯卷還可以動態(tài)的對其進(jìn)行縮小,雖然在實際情況中,我們幾乎不會遇到縮小一個邏輯卷的這種情況,不過還是有必要學(xué)習(xí)一下如何縮小一個邏輯卷,首先我們也是先來看看縮小邏輯卷的一個示意圖
我們看到縮小邏輯卷其實就是從當(dāng)前的LV中拿出指定的PE數(shù)量放回到VG當(dāng)中。
【注意:】邏輯卷的縮小操作必須離線執(zhí)行,要先卸載掉邏輯卷才可以
上面在講的邏輯卷的拉伸操作時我們可以在線執(zhí)行,不需要卸載掉邏輯卷,但是在進(jìn)行邏輯卷的縮小操作時,我們必須要先卸載掉邏輯卷才行,否則就可能造成邏輯卷里的文件發(fā)生損害。接下來我們來看一下對邏輯卷進(jìn)行縮小操作的步驟
①卸載已經(jīng)掛載的邏輯卷通過umount命令
[root@xiaoluo mnt]# cd
[root@xiaoluo~]#umount/mnt // 先將我們的邏輯卷卸載掉
②縮小文件系統(tǒng)(會提示需要運行fsck來檢查文件系統(tǒng))通過resize2fs命令
我們在講到對邏輯卷進(jìn)行拉伸的時候,其順序是先對邏輯卷進(jìn)行拉伸操作,然后再更新我們的文件系統(tǒng),但是在對邏輯卷進(jìn)行縮小操作時,我們必須先執(zhí)行縮小文件系統(tǒng)這個操作!!!這個順序必須要記清楚!!!
[root@xiaoluo ~]#lvs// 首先我們看下我們當(dāng)前的邏輯卷大小,此時為14G,我們這里假設(shè)要將其縮減為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
//這條命令的作用就是縮小我們的文件系統(tǒng),將我們的文件系統(tǒng)縮小到10Gresize2fs1.41.12(17-May-2010)
Please run'e2fsck -f /dev/xiaoluo/mylv'first. // 提示我們首先需要運行 e2fsck 命令來對我們的文件系統(tǒng)進(jìn)行檢查
[root@xiaoluo~]#e2fsck -f /dev/xiaoluo/mylv// 使用 e2fsck 命令來檢查我們的文件系統(tǒng)e2fsck1.41.12(17-May-2010)
Pass1: Checking inodes, blocks, and sizes
Pass2: Checking directory structure
Pass3: Checking directory connectivity
Pass4: Checking reference counts
Pass5: Checking group summary information/dev/xiaoluo/mylv:12/917504files (0.0% non-contiguous),75249/3670016blocks
[root@xiaoluo~]#resize2fs /dev/xiaoluo/mylv 10G// 此時再使用 resize2fs 命令來縮小我們的文件系統(tǒng),縮小為10Gresize2fs1.41.12(17-May-2010)
Resizing the filesystem on/dev/xiaoluo/mylv to2621440(4k) blocks.
The filesystem on/dev/xiaoluo/mylv is now2621440blockslong.
?這個時候我們的邏輯卷的文件系統(tǒng)已經(jīng)被縮小為10G了,接下來我們就可以縮小我們的邏輯卷的大小了
③縮小LV通過lvreduce命令
因為我們之前的LV大小為14G,我們通過縮小文件系統(tǒng)將其縮減為10G,所以此時我們需要縮小4G大小的邏輯卷
?[root@xiaoluo ~]#lvreduce -L -4G /dev/xiaoluo/mylv
// 縮小4G大小的邏輯卷? WARNING: Reducing active logical volume to10.00GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.) // 這里會提示一個警告可能會損壞我們的文件,這種情況會出現(xiàn)在 當(dāng)我們需要縮小的文件大小與實際操作時縮小的文件大小不一致時,比如這里我如果多縮小了1個G大小的邏輯卷,這個時候就會出現(xiàn)文件損壞的情況
Do you really want to reduce mylv? [y/n]: y
Reducing logical volume mylv to10.00GiB? Logical volume mylv successfully resized
[root@xiaoluo~]#lvs
// 此時我們的邏輯卷已經(jīng)被縮小為10G了? LV? VG? ? ? Attr? ? ? LSize? Pool Origin Data%? Move Log Cpy%Sync Convert
mylv xiaoluo-wi-a----10.00g
?縮小邏輯卷的操作是個危險的操作,稍不注意就可能損壞我們的邏輯卷,造成文件的丟失或損害,所以我們一般不要對邏輯卷進(jìn)行縮減操作
!!!
縮小完邏輯卷以后,我們再將邏輯卷掛載到 /mnt 下,看看里面的文件是否還在
[root@xiaoluo ~]#mount/dev/xiaoluo/mylv /mnt/
[root@xiaoluo~]# cd /mnt/[root@xiaoluo mnt]#lslost+found? xiaoluo.txt
[root@xiaoluo mnt]#catxiaoluo.txt
I am xiaoluo
我們發(fā)現(xiàn),我們之前創(chuàng)建的文件,以及文件里的內(nèi)容都沒有發(fā)生改變。
最后再強(qiáng)調(diào)一點:縮小邏輯卷的操作必須要先卸載掉邏輯卷,然后先縮小文件系統(tǒng),最后再來縮小我們的邏輯卷才行!!
四、縮小卷組
我們既然可以動態(tài)的拉伸邏輯卷、拉伸卷組以及縮小邏輯卷,那么我們當(dāng)然也可以縮小我們的卷組。什么時候我們需要來縮小我們的卷組呢?比如說我有一塊硬盤,這個時候我們需要將這塊硬盤拆下來,或者說不想將這塊硬盤再作為邏輯卷了,這個時候我們就需要執(zhí)行縮小卷組的操作了,縮小卷組的操作可以通過下面這個示意圖來展示:
比如說我們這里需要將物理卷/sdd這塊硬盤拿走,那么縮小卷組的步驟如下:
①首先必須也要卸載掉我們的邏輯卷通過 umount 命令
[root@xiaoluo mnt]# cd
[root@xiaoluo~]#umount/dev/xiaoluo/mylv
②將一個PV從指定卷組中移除掉通過vgreduce命令
?[root@xiaoluo ~]#pvs
// 首先我們需要看下我們當(dāng)前有哪些PV正在使用中,因為縮小一個卷組其實就是從卷組中移除一個PV,如果PV正在使用中,那么PV就移除不了? PV? ? ? ? VG? ? ? Fmt? Attr PSize PFree/dev/sdb? xiaoluo lvm2 a--8.00g0/dev/sdc? xiaoluo lvm2 a--8.00g5.99g/dev/sdd? xiaoluo lvm2 a--8.00g8.00g // 當(dāng)前只有 sdd 這個PV可以移除掉
[root@xiaoluo~]# vgreduce xiaoluo /dev/sdd
// 我們將 /dev/sdd 這個PV從指定卷組 xiaoluo 中移除掉
Removed"/dev/sdd"from volume group"xiaoluo"
?③查看當(dāng)前卷組的信息
通過vgdisplay或者vgs命令
?[root@xiaoluo ~]# vgdisplay
--- Volume group ---VG Name? ? ? ? ? ? ? xiaoluo
System ID
Format? ? ? ? ? ? ? ? lvm2
Metadata Areas2Metadata Sequence No7VG Access? ? ? ? ? ? read/writeVG Status? ? ? ? ? ? resizable
MAX LV0Cur LV1Open LV0Max PV0Cur PV2 // 當(dāng)前PV也變成了2塊了Act PV2VG Size15.99GiB//我們發(fā)現(xiàn)這時我們的卷組大小只有16G了PE Size4.00MiB
Total PE4094Alloc PE/ Size2560/10.00GiB
Free? PE/ Size1534/5.99GiB
VG UUID? ? ? ? ? ? ? h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb
[root@xiaoluo~]#pvsPV? ? ? ? VG? ? ? Fmt? Attr PSize PFree/dev/sdb? xiaoluo lvm2 a--8.00g0/dev/sdc? xiaoluo lvm2 a--8.00g5.99g/dev/sdd? ? ? ? ? lvm2 a--8.00g8.00g // dev/sdd 這個PV已經(jīng)從卷組中移除掉了
?④將PV刪除掉
通過pvremove命令
[root@xiaoluo ~]# pvremove /dev/sdd
Labels on physical volume"/dev/sdd"successfully wiped
至此,本篇隨筆就已經(jīng)告一段落了,在本篇隨筆里詳細(xì)講解了如何動態(tài)的對我們的邏輯卷進(jìn)行拉伸以及縮小操作,同時對LVM的基本概念、基本原理(Linux學(xué)習(xí)之CentOS(二十五)--Linux磁盤管理:LVM邏輯卷基本概念及LVM的工作原理)以及LVM的配置使用(Linux學(xué)習(xí)之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的創(chuàng)建及使用)等知識的總結(jié)也全部結(jié)束了!!!
在以后學(xué)習(xí)Linux當(dāng)中,將繼續(xù)記錄自己學(xué)習(xí)Linux的心得、體會!!!