1、邏輯卷管理器(LVM)
(1)邏輯卷管理器(LVM,logical volume manager)可以整合多個物理分區在一起,讓這些分區看起來就像一個磁盤一樣,而且,還可以在將來其他的物理分區或將其從這個LVM管理的磁盤中刪除。這樣可以實現磁盤空間的動態管理,相對于普通的磁盤分區有很大的靈活性,同時LVM還有快照功能。
(2)邏輯卷管理器的基本術語 物理卷(PV):簡單說,物理卷就是磁盤或者是磁盤分區,由pvcreate命令創建。 物理擴展塊(PE):LVM默認使用4MB的PE塊,在LVM的卷組總最多只能含有65534個PE,因此默認的PE大小是256G。PE是整個LVM最小的存儲塊。 卷組(VG):將多個物理卷,使用vgcreate命令整合成一個大的磁盤,即為卷組,卷組的大小有物理卷的數量和大小決定。 邏輯卷(LG):邏輯卷是在卷組的基礎上可以被格式化為文件系統的分區,大小有PE的塊數決定。使用lvcreate命令創建。
2、創建物理卷(physical volume)
pvcreate:將物理分區新建成PV -f:強制創建物理卷,不需要用戶確認; -u:指定設備的UUID; -y:所有的問題都回答“yes”; -Z:是否利用前4個扇區。 pvdisplay:顯示當前系統上的PV狀態 pvdisplay命令顯示的物理卷信息包括:物理卷名稱、所屬的卷組、物理卷大小、PE大小、總PE數、可用PE數、已分配的PE數和UUID pvscan:查詢磁盤上所有具有PV的磁盤 -d:調試模式 -e:僅顯示屬于輸出卷組的物理卷 -n:僅顯示不屬于任何卷組的物理卷 -s:短格式輸出 -u:顯示UUID pvremove:將PV刪除,讓該分區不具有PV屬性 pvmove:用來將一塊盤上的數據移到另一塊盤,可以移動整塊盤的數據,也可以移動指定 extent 范圍的數據 eg:pvmove /dev/sdb /dev/sdc
3、創建卷組(volume group)
vgcreate:創建一個VG -l:卷組上允許創建的最大邏輯卷數; -p:卷組中允許添加的最大物理卷數; -s:卷組上的物理卷的PE大?。▎挝?nbsp;M G T大小都可)。 vgscan:查找系統上是否有VG vgdisplay:顯示目前系統的VG狀態 -A:僅顯示活動卷組的屬性; -s:使用短格式輸出的信息。 vgextend:增加VG的額外PV -t:僅測試。 vgreduce:減少(刪除)VG的PV -a:如果命令行中沒有指定要刪除的物理卷,則刪除所有的空物理卷; --removemissing:刪除卷組中丟失的物理卷,使卷組恢復正常狀態。 vgchange:設置卷組是處于活動狀態還是非活動狀態 -a:設置卷組的活動狀態 vgremove:刪除一個VG(先做pvmove ,再做vgremove) -f:強制刪除
4、創建邏輯卷(logical volume)
lvcreate:新建一個LV -L:指定邏輯卷的大小,后接容量,此容量需是PE的整數倍,單位為“kKmMgGtT” -l:指定邏輯卷的大小,后接PE個數 -n:后接LV的名稱 -s:創建快照 lvscan:查詢系統上的LV -b:顯示邏輯卷的主設備和次設備號 lvdisplay:顯示系統上的LV狀態 lvextend:在LV里面增加容量 lvreduce:在LV里面減少容量 lvremove:刪除一個LV lvresize:調整LV的大小 resize2fs:調整ext系列系統LV大小 xfs_growfs:調整xfs格式LV大小
5、示例 (虛擬機環境)
[root@localhost ~]# fdisk /dev/sdb (使用fdisk命令創建了四個分區) [root@localhost ~]# lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 200G 0 disk ├─sdb1 8:17 0 5G 0 part ├─sdb2 8:18 0 5G 0 part ├─sdb3 8:19 0 20G 0 part ├─sdb4 8:20 0 1K 0 part (擴展分區) └─sdb5 8:21 0 10G 0 part (邏輯分區) [root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@localhost ~]# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created [root@localhost ~]# pvcreate /dev/sdb3 Physical volume "/dev/sdb3" successfully created [root@localhost ~]# pvcreate /dev/sdb5 Physical volume "/dev/sdb5" successfully created [root@localhost ~]# pvs (建立了4個PV,可以用pvdisplay命令查看更詳細信息) PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.01g 5.01g /dev/sdb2 lvm2 ---- 5.01g 5.01g /dev/sdb3 lvm2 ---- 20.01g 20.01g /dev/sdb5 lvm2 ---- 10.00g 10.00g [root@localhost ~]# vgcreate vgtest /dev/sdb{1,2,3,5} (創建名為vgtest的卷組) Volume group "vgtest" successfully created [root@localhost ~]# vgdisplay (vgtest卷組的詳細信息) --- Volume group --- VG Name vgtest System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 40.02 GiB PE Size 4.00 MiB (此例子用默認的PE大小) Total PE 10246 Alloc PE / Size 0 / 0 Free PE / Size 10246 / 40.02 GiB VG UUID Xe9pMF-tyCN-Bk5z-ZPub-TVHA-DCVm-hRVyqd [root@localhost ~]# lvcreate -n lvtest -L 15G vgtest Logical volume "lvtest" created. (在vgtest卷組創建了一個15G的邏輯卷lvtestS) [root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/vgtest/lvtest LV Name lvtest VG Name vgtest LV UUID qZcbaO-EX0V-QUhw-oDig-Ldoc-5Amp-X8jyUB LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-08-29 22:15:31 +0800 LV Status available # open 0 LV Size 15.00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 [root@localhost ~]# mkfs.ext4 /dev/vgtest/lvtest (將lvtest格式化為ext4系統) [root@localhost ~]# mount /dev/vgtest/lvtest /mnt/lvtest(掛載,若/mnt/lvtest目錄需事先存在) [root@localhost ~]# df -h /mnt/lvtest (已經創建好一個15G的LV) Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 15G 38M 14G 1% /mnt/lvtest 如果要每次啟動系統時自動掛載,需將以下字符寫到/etc/fstab文件中 /dev/vgtest/lvtest(建議用UUID) /mnt/lvtest ext4 defaults 0 0
至此一個完整的LVM已經創建好了,接下來補充一下邏輯卷的擴展和壓縮
[root@localhost ~]# lvextend -L +5G /dev/vgtest/lvtest (增加5G空間,“+n”表示增加n空間;直接給定一個數字n,則表示增加到n空間,單位 M G T ) Size of logical volume vgtest/lvtest changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents). Logical volume lvtest successfully resized. (成功在lvtest中增加了5G) [root@localhost ~]# df -h /dev/vgtest/lvtest Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 15G 38M 14G 1% /mnt/lvtest (但是沒顯示,為什么?因為在線增加容量存在同步問題) [root@localhost ~]# resize2fs /dev/vgtest/lvtest (使增加的5G容量生效) resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vgtest/lvtest is mounted on /mnt/lvtest; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/vgtest/lvtest to 5242880 (4k) blocks. The filesystem on /dev/vgtest/lvtest is now 5242880 blocks long. [root@localhost ~]# df -h /mnt/lvtest/ (可以看到已經擴展為20G了) Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 20G 42M 19G 1% /mnt/lvtest
注意:LVM的擴展可以不用卸載而在線進行,但是壓縮卻不能支持的。一般情況下文件系統都會存有數據,如果直接壓縮空間的話,很容易造成數據的丟失、損壞。因此壓縮空間前需要將已經掛載的系統卸載?,F在我們繼續接著上面的例子來進行壓縮操作吧(壓縮操作很危險,要注意做好備份)。
[root@localhost ~]# umount /mnt/lvtest (卸載) [root@localhost ~]# e2fsck -f /dev/vgtest/lvtest (強制檢測lvtest,此步必須有) 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/vgtest/lvtest: 11/1310720 files (0.0% non-contiguous), 122065/5242880 blocks [root@localhost ~]# resize2fs /dev/vgtest/lvtest 10G (降低文件系統的10G容量) resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/vgtest/lvtest to 2621440 (4k) blocks. The filesystem on /dev/vgtest/lvtest is now 2621440 blocks long. [root@localhost ~]# lvreduce -L -10G /dev/vgtest/lvtest (壓縮邏輯卷的10G空間) WARNING: Reducing active logical volume to 10.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vgtest/lvtest? [y/n]: y Size of logical volume vgtest/lvtest changed from 20.00 GiB (5120 extents) to 10.00 GiB (2560 extents). Logical volume lvtest successfully resized. [root@localhost ~]# mount /dev/vgtest/lvtest /mnt/lvtest (掛載壓縮后的lvtest) [root@localhost ~]# lvscan (可以看到lvtest已經被壓縮了10G空間了) ACTIVE '/dev/vgtest/lvtest' [10.00 GiB] inherit
至此,邏輯卷的壓縮也已經完成,以上壓縮步驟順序千萬不能亂,否則很容易造成文件損壞。既然說到這了,那么就順便也來聊聊卷組(VG)壓縮吧,壓縮卷組前需要確認你要移出卷組的磁盤(或分區)是不包含數據的(避免數據丟失),可以用pvdisplay命令查看。
[root@localhost ~]# pvdisplay (查看那個分區是沒有數據的,此例要移除/dev/sdb1,以每個人的實際情況確定刪除的PV) --- Physical volume --- PV Name /dev/sdb1 VG Name vgtest PV Size 5.01 GiB / not usable 2.10 MiB Allocatable yes PE Size 4.00 MiB Total PE 1282 Free PE 1282 Allocated PE 0 PV UUID 9ccUO2-yK1I-zYPP-FQJi-yP2e-t1gQ-FZXLkL [root@localhost ~]# vgreduce vgtest /dev/sdb1 (將/dev/sdb1移出vgtest卷組) Removed "/dev/sdb1" from volume group "vgtest" [root@localhost ~]# vgs (查看VG大小,可以看到已經少了5G) VG #PV #LV #SN Attr VSize VFree vgtest 3 1 0 wz--n- 35.02g 25.02g [root@localhost ~]# pvs (可以看到/dev/sdb1已經移出了) PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.01g 5.01g /dev/sdb2 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb3 vgtest lvm2 a--u 20.01g 10.01g /dev/sdb5 vgtest lvm2 a--u 10.00g 10.00g 現在我們再把/dev/sdb1添加回vgtest吧,看下面: [root@localhost ~]# vgextend vgtest /dev/sdb1 Volume group "vgtest" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree vgtest 4 1 0 wz--n- 40.02g 30.02g [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb2 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb3 vgtest lvm2 a--u 20.01g 10.01g /dev/sdb5 vgtest lvm2 a--u 10.00g 10.00g 如果添加新的設備到VG中,需要先用pvcreate命令創建PV,再用vgextend命令將創建好的PV加入VG中。
6、快照功能
(1)快照相關介紹
1)快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝 2)對于需要備份或者復制的現有數據集臨時拷貝以及其它操作來說,快照是最合適的選擇。 3)快照只有在它們和原來的邏輯卷不同時才會消耗空間。 在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變才會使用這些空間。 當原來的邏輯卷中有所改變時,會將舊的數據復制到快照中。 快照中只含有原來的邏輯卷中更改的數據或者自生成快照后的快照中更改的數據。 建立快照的卷大小只需要原始邏輯卷的15% ~20% 就夠了。也可以使用lvextend 放大快照。
由于快照區與原本的LV 共用很多PE 的區塊,因此快照區與 被快照的LV 必須要要在同一個VG 上!系統恢復的時候的文 件數量不能高于快照區的實際容量。
7、快照示例
[root@localhost ~]# vgdisplay (確認可用PE的數量) --- Volume group --- VG Name vgtest System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 16 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 40.02 GiB PE Size 4.00 MiB Total PE 10246 Alloc PE / Size 2560 / 10.00 GiB Free PE / Size 7686 / 30.02 GiB (如果不夠的話需要添加額外的PV哦) VG UUID Xe9pMF-tyCN-Bk5z-ZPub-TVHA-DCVm-hRVyqd [root@localhost ~]# lvcreate -l 524 -s -n testss /dev/vgtest/lvtest (創建一個PE數量為524個名字為testss的快照,詳細屬性可用lvdisplay查看。其中–s表示要創建快照,-n表示快照的名稱,-L 表示快照的大小。) Logical volume "testss" created. [root@localhost ~]# mkdir /mnt/snapshot [root@localhost ~]# mount /dev/vgtest/testss /mnt/snapshot (掛載快照) [root@localhost ~]# df (可以看到快照和原文件屬性一樣) Filesystem 1K-blocks Used Available Use% Mounted o /dev/mapper/vgtest-lvtest 10190136 23028 9642884 1% /mnt/lvtest /dev/mapper/vgtest-testss 10190136 23028 9642884 1% /mnt/snapshot [root@localhost ~]# umount /mnt/snapshot/ (卸載快照) [root@localhost ~]# cp -r /boot /root /mnt/lvtest [root@localhost ~]# df /mnt/lvtest (可以看到原系統已經有所改變) Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgtest-lvtest 10190136 197800 9468112 3% /mnt/lvtest [root@localhost ~]# rm -rf /mnt/lvtest/. (將/lvtest里的問都刪,也可重新格式化成原格式) [root@localhost ~]# cp -a /mnt/snapshot/. /mnt/lvtest/ (用快照恢復原文件系統) [root@localhost ~]# df /mnt/lvtest/ (可以看到已經恢復了) Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgtest-lvtest 10190136 23012 9642900 1% /mnt/lvtest
建議:最好將快照卷也備份一下。
原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/42503
從原理到實戰,圖文并茂,詳略得當,細心亮點頗多,贊