邏輯卷管理器(LVM)
容許對捲進行方便操做的抽象層,包括從新設定文件系統的大小
容許在多個物理設備間從新組織文件系統
通常它的操做步驟爲:app
- 將磁盤或者分區指定爲物理卷,分區的話注意修改標籤(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/rootide
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 ... :能夠多個同時建立ui
刪除pv
pvremove /dev/DEVICE ... :能夠多個同時移除url
vg管理工具
顯示卷組
vgs
vgdisplay操作系統
建立卷組
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]code
- 即爲vgcreate 卷組名 物理卷1 物理卷2... 能夠加上其它選項好比-s 指定PE大小等等
管理卷組
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]rem
刪除卷組
先作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 也能夠用百分號的方式來擴展邏輯卷
lvrename 更名字
使用lvrename命令更改邏輯卷名
lvrename /dev/VolGroup00/LogVol00 /dev/VolGroup00/lv_root
lvrename /dev/VolGroup00/LogVol01 /dev/VolGroup00/lv_swap
刪除邏輯卷
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以後要先把物理卷從卷組中移除而後才能刪除這個物理卷,最後再拆除硬盤或者包含分區的硬盤。