16.Linux邏輯卷管理與設置
允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小
允許在多個物理設備間重新組織文件系統
一般它的操作步驟為:
- 將磁盤或者分區指定為物理卷,分區的話註意修改標簽(fsidk或gdisk)
- 用一個或者多個物理卷來創建一個卷組
- 物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的
- 在物理卷上創建的邏輯卷是由物理區域(PE)組成,PE是分配邏輯卷的基本單位,在創建卷組時可以指定,類似於普通硬盤分區時的塊大小
- 可以在邏輯卷上創建文件系統
- 用卷組的free的PE空間創建邏輯卷,此邏輯卷便可作為普通硬盤使用。
- 對新創建的邏輯卷(相當於新分區)創建文件系統,掛載(mount和寫入/etc/fstab)使用
LVM介紹
LVM: Logical Volume Manager, Version 2
dm: device mapper,將一個或多個底層塊設備組織成一個邏輯設備的模塊
設備名:/dev/dm-#
軟鏈接:
/dev/mapper/VG_NAME-LV_NAME :mapper名加組名-邏輯卷名
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME : 組名加邏輯卷名
/dev/vol0/root
LVM可以彈性的更改LVM的容量
通過交換PE來進行資料的轉換,將原來LV內的PE轉移到其他的設備中以降低LV的容量,或將其他設備中的PE加到LV中以加大容量
附加描述和註意點:
- 邏輯卷的提出就是為了解決在工作中硬盤分區完畢又無法擴展的空間不足問題(如果硬件上采用raid更加突出了能夠隨時擴展空間的重要性)
- 邏輯卷可以在線(掛載狀態)進行擴展操作,轉移硬盤數據並更換硬盤等等,因此用邏輯卷技術十分方便和效率。抽象的邏輯卷技術其配合硬件raid的容錯性,可以保證數據硬盤空間的各種操作都行雲流水。
- 組成卷組的時候各個物理卷既可以是分區也可以是一整塊硬盤,其大小可以不相同。同時其分區方式(整塊新硬盤的話就沒有分區方式了)MBR或者GPT也可以不同,(註意其文件系統格式(只有分區才有)也可以不同,因為當把它作為物理卷的時候,它的文件系統格式直接就會被改成lvm格式。最後邏輯卷的時候會新創建文件系統)
- 註意將分區創建為物理卷之前最好先修改其標簽(fdisk或gdisk中的t選項),雖然不修改也能使用,不過功能和說明標簽不相符,最好還是標準化提前修改標簽。但如果直接一塊硬盤沒有分區也沒有創建文件格式的時候直接拿來創建物理卷則不需要修改標簽了(因為沒有創建分區所以無法添加標簽)
- 註意創建物理卷的時候會抹掉所有數據,更改文件系統格式,因此要提前備份號裏面的數據,卸載掉掛載點,然後再進行操作。
- 創建線性邏輯卷的時候若指定名稱,會出現 /dev/組名/邏輯卷名 和 /dev/mapper/組名-邏輯卷名 兩個名稱 ,但他們都只是軟鏈接,指向/dev/dm-0 (編號從0開始的邏輯卷文件)
- 等創建完邏輯卷之後(相當於創建了新分區),然後別忘了創建文件系統,和之前物理卷的文件系統lvm註意區別,此時一個邏輯卷就像相當於一個新分區。
- 註意擴展邏輯卷的lvextend 後面也是小寫l +PE數量 和大寫L +空間大小。 需要關註的就是如果不加上+這個符號,則意思是把這個卷擴展到指定的PE數量或者空間大小,而不是增加空間(如果指定的大小比原先還要小,則變成了縮減). 擴展邏輯卷的時候確保卷組剩余的空間夠用,如果不夠用,需要增加物理卷到卷組中增加空間。
- 擴展物理卷到卷組命令為vgextend 卷組名 物理卷1 物理卷2...
- 擴展邏輯卷之後,如果用lvdisplay命令可以看到已經擴展成功,但是df命令仍然顯示的是之前的數據,是因為df顯示的是文件系統的大小,雖然邏輯卷已經擴展,但擴展上去的部分並沒有同步之前lvm已經創建的文件系統,是空的文件系統。因此需要同步一下文件系統。
- xfs_growfs /mnt/vgtest/vgtest1或者/dev/vgtest/lvtest1 : xfs擴展文件系統命令,即為xfs_growfs 掛載點或者設備名
- resize2fs 掛載點或者設備名 :ext4擴展文件系統命令
- 當然擴展的時候 可以加上-r 選項 直接擴展空間的同時同步文件系統,支持xfs和ext4格式,就不需要再兩次操作了
lvextend -r -L +1G /dev/vgtest/lvtest1 - 擴展邏輯卷的時候可以在線(掛載狀態)擴展,同時數據也不會受到影響,從這裏也可以看出lvm的強大和好處。
- xfs文件系統的邏輯卷不支持縮減,但是ext系列的支持縮減(一般很少用),但會有數據丟失的風險(數據比要縮減後的大小要多時,但即使不多於,也有可能丟失數據),因此一定要提前備份。
- 註意擴展的時候可以在線擴展,而縮減的時候必須要先離線卸載掉
- 擴展的時候兩步的話先擴展空間再同步文件系統,縮減的時候剛好相反先縮減文件系統然後再減少空間。
- lvresize 即可以縮減也可以擴展。
pvcreate /dev/sdb2 /dev/sdb3 /dev/sdd
pvdisplay
vgcreate vgtest /dev/sdb{2,3} /dev/sdd
vgdisplay
lvcreate -n lvtest1 -L 3G vgtest #創建線性邏輯卷
lvcreate -n lvtest2 -L 2G vgtest
lvdisplay
# ll /dev/vgtest/lvtest1 或者ll /dev/mapper/vgtest-lvtest1 查看軟鏈接指向的文件
mkfs.xfs /dev/vgtest/lvtest1
mkfs.ext4 /dev/vgtest/lvtest2
blkid
mkdir /mnt/vgtest/lvtest{1,2}
寫掛載文件到fstab上
mount -a #掛載邏輯卷
lvextend -L +1G /dev/vgtest/lvtest1 #擴展邏輯卷1 ,xfs格式的
xfs_growfs /dev/vgtest/lvtest1 #同步文件系統xfs格式
lvextend -L +500M /dev/vgtest/lvtest2 #擴展邏輯卷2 ,ext4格式的
resize2fs /dev/vgtest/lvtest2 #同步文件系統ext4格式
也可以一步到位:
lvextend -r -L +1G /dev/vgtest/lvtest1
縮減ext4格式LVM:
umount /dev/vgtest/lvtest2 :先卸載
fsck -f /dev/vgtest/lvtest2 :再檢查
resize2fs /dev/vgtest/lvtest2 2G :縮減到2G
lvreduce -L 2G /dev/vgtest/lvtest2 :註意大小要和上面寫的一樣
mount /dev/vgtest/lvtest2 /mnt/vgtest/lvtest2 或者mount -a
創建快照:
lvcreate -s -L 1G -n lvtest1_snapshot -p r /dev/vgtest/lvtest1(-pr可加可不加,建議加上,這是以只讀方式創建,掛載mount命令的時候也可再加上。不過經過測試,這裏加上-pr 則mount中即便加上-o nouuid的方式也掛載不上去了)
lvconvert --merge /dev/vgtest/lvtest1_snapshot(還原合並之前都要卸載掉先)
轉移將要損壞的硬盤或者分區的PE塊用於更換:
首先查看卷組中剩余PE空間是否足夠,不夠的話創建新物理卷並加入
pvcreate /dev/sde
vgextend /dev/vgtest /dev/sde
pvmove /dev/sdd
vgreduce /dev/vgtest /dev/sdd
pvremove /dev/sdd
- 邏輯卷的遷移類似硬盤分區的遷移,硬盤分區遷移只能拆掉包含這個分區的硬盤,而邏輯卷的遷移也是將組成這個邏輯卷的所有PE塊的數據遷移到其他機器上,則需要遷移這整個卷組。
- 問題:將原先以普通分區方式分區的硬盤根目錄下某個大文件夾(比如home目錄)遷移到新裝的邏輯卷上,這樣就可以用邏輯卷擴展此文件夾,避免此文件夾繼續增大占滿根目錄。如何操作?
- 首先要新加裝硬盤或者分區,創建邏輯卷(物理卷-標簽-卷組-邏輯卷),(註意增加分區標簽的時候要看清分區格式選擇用fdisk還是gdisk,然後用t修改標簽,如果把一整塊硬盤作為物理卷就沒有標簽這一說了)
- 然後就是將邏輯卷掛載到臨時掛載文件夾下,將home目錄的所有數據拷貝到此邏輯卷中(註意拷貝命令用 cp -av /home/. 臨時掛載點 的方式來拷貝,能夠拷貝所有隱藏非隱藏文件),拷貝之後檢查一下是否完全拷貝成功(用ls ll du 等命令)
- 拷貝完畢後刪除home下的數據(或者穩妥起見,先不刪除試用,不刪除的話跳過這一步)
- 最後將此邏輯卷掛載到根目錄下源文件夾所在地址即為/home處即可,註意將自動掛載寫入fstab文件中。(上一步不刪除的話home內的文件沒有入口被隱藏了,等到邏輯卷經測試能夠穩定使用了之後再刪除掉原先根目錄裏面的文件,這樣最穩妥)
- 註意根分區是不可能遷移的,操作系統裝在根上不能遷移,不如直接重裝。
pv管理工具
顯示pv信息
pvs:簡要pv信息顯示
pvdisplay :現實詳細物理卷信息
創建pv
pvcreate /dev/DEVICE ... :可以多個同時創建
刪除pv
pvremove /dev/DEVICE ... :可以多個同時移除
vg管理工具
顯示卷組
vgs
vgdisplay
創建卷組
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
- 即為vgcreate 卷組名 物理卷1 物理卷2... 可以加上其它選項比如-s 指定PE大小等等
管理卷組
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
刪除卷組
先做pvmove,再做vgremove
lv管理工具
顯示邏輯卷
lvs
Lvdisplay
創建線性邏輯卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup :大寫L後面直接寫大小,小寫l後面跟的是PE的數量
- lvcreate -L 大小 -n 邏輯卷名稱 卷組名
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg - 註意lvextend 也可以用百分號的方式來擴展邏輯卷
刪除邏輯卷
lvremove /dev/VG_NAME/LV_NAME
- 註意不需要加卷組名
重設文件系統大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
xfs_growfs /mountpoint
擴展和縮減邏輯卷
擴展邏輯卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
- 註意擴展邏輯卷的時候只需要寫上邏輯卷的名稱(軟鏈接或者說dm-#),不需要寫卷組名了,但要保證卷組有足夠空間,擴展時也可用 lvextend -l 百分數free 的方式.
縮減邏輯卷:
umount /dev/VG_NAME/LV_NAME :先卸載
e2fsck -f /dev/VG_NAME/LV_NAME :再檢查
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] :縮減文件系統到多大
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME :縮減空間到多大,要和上面的文件系統對應
mount :再次掛載
跨主機遷移卷組
源計算機上
- 在舊系統中,umount此卷組上的所有邏輯卷
- 禁用卷組
vgchange –a n vg0
lvdisplay - 導出卷組
vgexport vg0
pvscan
vgdisplay
拆下舊硬盤
在目標計算機上
- 在新系統中安裝舊硬盤,並導入卷組:vgimport vg0
- vgchange –ay vg0 啟用
- mount所有卷組上的邏輯卷
創建邏輯卷示例
- 創建物理卷
pvcreate /dev/sda3 - 為卷組分配物理卷
vgcreate vg0 /dev/sda3 - 從卷組創建邏輯卷
lvcreate -L 256M -n data vg0
mkfs.xfs /dev/vg0/data - 掛載
mount /dev/vg0/data /mnt/data
邏輯卷管理器快照
- 快照是特殊的邏輯卷,它是在生成快照時對於指定的存在的邏輯卷的準確拷貝
- 對於需要備份或者復制的現有數據臨時拷貝以及其它操作來說,快照是最合適的選擇,
- 快照只有在它們和原來的邏輯卷不同時才會消耗空間
- 在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變才會使用這些空間
- 當原來的邏輯卷中有所改變時,會將舊的數據復制到快照中
- 快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據
- 建立快照的卷大小小於等於原始邏輯卷(大於它沒有意義),也可以使用lvextend擴展快照的卷
使用LVM快照
為現有邏輯卷創建快照(新建邏輯卷並作為快照盤,指向需要備份的邏輯卷)
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
-s 代表快照的標簽 -p r是以只讀方式創建這個快照盤(這裏-p r不加也可以,可以掛載的時候用mount中命令只讀掛載)
掛載快照(快照可以不掛載,就算要掛載也最好用只讀掛載方式)
mkdir -p /mnt/snap
mount -o ro /dev/vg0/data-snapshot /mnt/snap
恢復快照(需要先卸載掉快照區域和對應的邏輯卷區域)
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
刪除快照(先卸載再刪除)
umount /mnt/databackup
lvremove /dev/vg0/databackup
註意點:
- 快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,之後對其進行多次改動甚至刪除也不會再影響快照內的內容了,它只會保留第一次修改前的最初的原數據內容。而沒有改動的數據則由快照區和文件系統共享
- 由於快照區與原本的LV共用很多PE的區塊,因此快照與被快照的LV必須在同一個VG中.系統恢復的時候的文件數量不能高於快照區的實際容量
- 快照創建時就會保留創建時的對應邏輯卷的狀態,如果想要保留多個狀態,則需要再次開辟快照區域並指定好邏輯卷目標
- 創建快照前確保卷組內還有空間,沒有的話需要增加物理卷增加卷組空間
- 快照的大小決定了它最多能保留和恢復原邏輯卷改動的內容,因此不能設置的太小,它的優點就是能夠備份邏輯卷快照時的狀態(比cp速度快),缺點就是會影響讀寫邏輯卷的速度(因為讀寫時將同時將原文件cp送到快照裏面),以及占用卷組的空間。因此快照長期不用或者用完了之後一定要刪除,不僅占用空間還影響原邏輯卷讀寫速率。(先卸載再刪除,如果想要刪除有快照盤的邏輯卷,需要先刪除快照盤才可)
- 按照原理來說如果不更改原邏輯卷內內容,快照內沒有數據,但是掛載快照之後經過測試發現仍然能夠看到裏面存有數據。這個是人為系統設置的功能,為了給人一種快照盤確實已經備份成功的感覺,不然如果查看快照盤內內容空空如也,會給人一種沒有備份成功的錯覺。
- 快照盤和對應邏輯卷UUID相同,因此用mount掛載的時候會報錯,(只在s系列中需要,如果是 ext系列中不需要加-o nouuid)必須加上選項 mount -o nouuid /dev/vgtest/lvtest1_snapshot /mnt/lvtest1_snapshot,如果創建快照盤的時候沒有加上-pr 則此時最好也加上-o ro選項。
- 註意了新建快照邏輯卷時必須指定標簽-s 以及它想要備份的邏輯卷盤(普通盤指定的是卷組,快招盤制定的是想要備份的邏輯卷),創建命令結束之後其實就已經完工了。註意快照盤不需要創建文件系統格式,它會根據對應要備份的邏輯卷自動創建文件格式
- 恢復快照盤的時候必須要卸載mount,原有的邏輯卷以及快照盤都要卸載才能還原。但是註意還原之後,這個快照盤就會被自動刪除並釋放空間。
- 問題:如果一個硬盤或者分區(註意不是邏輯卷)將要損壞,要怎麽辦?
- 先用pvdisplay查看此硬盤(或者包含分區的硬盤,下同,就不再註明了)PE塊使用情況,然後把此硬盤的PE塊(包括PE組成的塊裏的內容)全部轉移到此卷組的剩余物理卷的PE上去,當然前提是這個卷組剩余的free空PE塊要比這個硬盤所占的PE空間塊多。如果不夠用的話,增添硬盤,新創建物理卷並添加進卷組中即可。
- 轉移完此硬盤PE塊(包括裏面的數據)之後,便可卸載掉這個物理卷,然後就可以把這個硬盤拆掉更換新的硬盤了。
- 註意轉移完PE之後要先把物理卷從卷組中移除然後才能刪除這個物理卷,最後再拆除硬盤或者包含分區的硬盤。
16.Linux邏輯卷管理與設置