LVM
LVM(Logical Volume Manger),是一種磁盤分區管理機制,可以靈活的調整分區的大小。它是將多個硬盤組成卷組的形式實現的。說白了就是通過軟件來實現對分區靈活管理。
LVM是將多塊硬盤組成PV,再由PV組成VG,VG再組成lv,然后在lv上創建文件系統。
物理存儲介:指的就是硬盤等,最基本的存儲單元。
PV(physical volume) 物理卷:這個卷的作用就是將多塊硬盤創建為能被VG卷組直接調用的格式。
VG (volume group) 卷組:卷組就是由多個由磁盤組成的pv構成,并且在內部創建PE,然后多個PE提供給LV,這樣可以靈活的實現擴容和縮減
LV (logical volume )邏輯卷:調用由卷組提供的PE,將其組成一個整體,以便供系統格式化調用。
PE (physical extent),能被LVM調用的最小單元,具有唯一的編號,默認大小4MB。如文件系統中block。
LE?。╨ogical extent),能被系統調用的最小單元,和PE大小一樣
PV,VG,LV 三者關系如圖
一、確定本機是否安裝了LVM軟件。沒有安裝,請自行yum安裝。
[root@localhost bin]# rpm -qa|grep "lvm" mesa-private-llvm-3.6.2-1.el6.x86_64 lvm2-2.02.143-7.el6.x86_64 lvm2-libs-2.02.143-7.el6.x86_64
二、創建使用工具
上面已經說了,是通過軟件來實現對分區的靈活管理。所以創建到使用都是通過一些列命令來來實現的。而這些命令又是按照PV,VG,LV三者的關系區分。三者的命令功能基本相同,方便記憶。不得不說開發人員的心思縝密和用心良苦。
1、lv系列
pvcrate 創建physical volume
e.g. pvcreate /dev/sdb{1,2,3}
pvs,pvdispaly 查看pv簡略或者詳細信息
pvremove 移除physical volume
pvmove 移動數據 (當需要縮減卷組時,首先應該執行這條命令保證數據被移到卷組的其他physical volume )
e.g. pvmove /dev/sdb3(將要被移除的physical volume)
2、vg系列
vgcreate 創建volume group
-s:pe大小,默認4M
e.g.vgcreate 卷組名(必須指定名稱) /dev/sdb{1,2,3}
vgs,vgdispaly 查看vg簡略或者詳細信息
vgextend(擴充)
e.g.vgextend 卷組名 /dev/sdb4 #將pvcreate /dev/sdb4后的添加至vg卷組中
vgremove(刪除)
e.g.vgremove 卷組名 #移除vg整個卷組
vgreduce(移除,縮容)
e.g.vgextend 卷組名 /dev/sdb4 #移除vg卷組的中/dev/sdb4
3、lv系列
lvcreate 創建volume group
-n:指定名稱
-L: 指定大小 -l:%vg|pvs|FREE,打算分配這個vg中的百分比 e.g. lvcreate -n 邏輯卷名 -L 5G 卷組名(上面指定的vg名)
lvs,lvdispaly 查看lv簡略或者詳細信息
lvextend(擴充)
-l:%vg|pvs|FREE,打算分配這個vg中的百分比
-L: 指定大小
vgremove(刪除)
e.g.lvremove 卷組名 #移除lv整個邏輯卷組
vgreduce(移除,縮容)
用法選項同擴容一樣。
三、分區修改步驟及注意事項
邏輯卷擴展的步驟: 1.先確保擴展的大??;并確保所屬的卷組有足夠的剩余空間
2、擴展物理邊界
最好先卸載,然后用e2fsck 檢測一下。
lvextend -L [+]size /path/to/lv_device
3、擴展邏輯邊界
resize2fs /path/to/lv_devive
縮減邏輯卷的步驟:
1、卸載卷,并執行強制檢查
e2fsck -f /path/to/lv_devive
2、縮減邏輯邊界
resize2fs /path/to/lv_device SIZE
3、縮減物理邊界:
lvreduce -L [-]size /path/to/lv_device
4、掛載卷
擴展卷組: 1.準備要添加的物理卷
2 擴展卷組:
添加物理卷至卷組中
vgextend vg_name /path/to/device
縮減卷組:
1.確定要移除的物理卷的總空間大小,要小于VG當前的可用空間大小 2.將要移除的物理卷上的所有pe移動至其他PV
pvmove /path/to/pv_device
3.縮減vg
vgreduce vg_name /path/to/pv/device
快照: 也是邏輯卷的一種,提供過去某一時間的元卷的通道
lvcreate -s -L Size -n name 卷組名 -p r,rw /path/to/lv_devsive -p:訪問權限
四、使用范例及注意事項
下面以圖片中的練習題示例。
1、創建兩個大小為20G的分區,創建方法不懂,自行查看關于創建分區的知識。
NOTE:創建分區是,每個分區的編號一定是8e,創建分區結果如上圖。
2、將兩物理分區創建為PV
[root@localhost bin]# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created
結果顯示,physical volume 由/dev/sdb{1,2}成功創建 ,確保正確,我們在用pvs和pvdisplay查看一下。
[root@localhost bin]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a--u 20.01g 20.01g /dev/sdb2 testvg lvm2 a--u 20.01g 20.01g
上面顯示格式是PV卷名、VG卷名、卷組格式、卷組屬性、PV的大小、PV空閑大小
[root@localhost bin]# pvdisplay --- Physical volume --- PV Name /dev/sdb1 #PV名稱 VG Name testvg #VG名稱 PV Size 20.01 GiB / not usable 1.12 MiB #PV大小 Allocatable yes #是否可以使用 PE Size 4.00 MiB #默認PE的大小,我們再VG的創建的時候可以修改,最小即為默認大小 Total PE 5122 #PE的總個數 Free PE 5122 #空閑PE的個數 Allocated PE 0 #已經被使用的PE個數 PV UUID 8N4eft-2rvg-jbhd-QHgb-e1iM-Oc1O-74NBM2 #PV的UUID --- Physical volume --- PV Name /dev/sdb2 VG Name testvg PV Size 20.01 GiB / not usable 1.15 MiB Allocatable yes PE Size 4.00 MiB Total PE 5122 Free PE 5122 Allocated PE 0 PV UUID 9pTEAr-aPBT-PwDg-BK8D-up0n-Hbn2-P27yVE
3、創建VG,并指定PE的大小
[root@localhost bin]# vgcreate testvg -s 16M /dev/sdb{1,2} #創建命令 Volume group "testvg" successfully created #顯示創建已經成功 [root@localhost bin]# vgs #查看VG的簡略信息 VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 40.00g 40.00g #格式為:VG名稱、使用PV的個數、LV的個數、SN、屬性、VG的大小、空間VG的大小 [root@localhost bin]# vgdisplay #詳細信息關于本機上面的所有VG --- Volume group --- VG Name testvg #VG名 System ID Format lvm2 #VG格式 Metadata Areas 2 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 2 Act PV 2 VG Size 40.00 GiB #VG大小 PE Size 16.00 MiB #PE大小 Total PE 2560 #PE的總個數 Alloc PE / Size 0 / 0 #被使用的PE個數/大小 Free PE / Size 2560 / 40.00 GiB #空閑PE的個數/大小 VG UUID cAK6Jk-b44O-kTEt-eyFH-0h6n-l1er-rBCCE9 #VG的uuid
結果顯示testvg這個vg卷組成功創建,接下來我們就不在需要用物理分區路徑了。這里就將兩個磁盤組成一個包含2560個16M的PE的VG卷組。接下來我們所使用就是這些PE了,根據需要分配一定的PE,就能實現靈活分區。
4、創建LV
[root@localhost bin]# lvcreate -n "testlv" -L 5G testvg #創建命令 Logical volume "testlv" created. #提示創建成功 [root@localhost bin]# lvs #簡略信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g #格式如上 [root@localhost bin]# lvdisplay #詳細信息 --- Logical volume --- LV Path /dev/testvg/testlv #創建成功系統分配的路徑 LV Name testlv #LV名 VG Name testvg #VG名 LV UUID R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj #LV的UUID LV Write Access read/write #可以讀寫 LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 #創建時間,主機 LV Status available #當前狀態 # open 0 LV Size 5.00 GiB #LV的大小 Current LE 320 #當前LE的個數 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
5、(自行增加的要求,目的熟悉掌握文件系統格式化命令)格式化為ext4文件系統,塊大小為4096,預留塊大小1%,文件系統名“testext4”,并開機掛載至/usr目錄
[root@localhost bin]# mke2fs -t ext4 -L "testext4" -m 1 -b 4096 /dev/mapper/testvg-testlv #創建文件系統相關命令, mke2fs 1.41.12 (17-May-2010) Filesystem label=testext4......以下省略 dumpe2fs -h /dev/mapper/testvg-testlv ##查看文件系統相關信息 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: testext4 Last mounted on: <not available> Filesystem UUID: 9e0da4a9-03e3-4392-8188-816b165dddf7 ......以下省略 [root@localhost bin]# echo "/dev/mapper/testvg-testlv /users ext4 defaults 0 0" >>/etc/fstab ##通過echo命令追加至/etc/fstab文件,注意每個參數后面的空格 [root@localhost bin]# mount -a 自動掛載存在于/etc/fstab上面的文件系統 [root@localhost bin]# mount | grep "users" ##檢查是否掛載成功 /dev/mapper/testvg-testlv on /users type ext4 (rw) [root@localhost bin]# cd /users #切換到新掛載的目錄下 [root@localhost users]# ls lost+found ###出現CentOS 6 出現這個文件即代表掛載成功。
6、新新建用戶archlinux,并且家目錄為/users/archlinux,而后切換用戶,并將/etc/pam.d拷貝至家目錄下。
[root@localhost users]# useradd -d /users/archlinux archlinux #創建家目錄為指定家目錄的用戶 [root@localhost users]# su - archlinux #切換用戶 [archlinux@localhost ~]$ ls [archlinux@localhost ~]$ pwd #顯示當前路徑 /users/archlinux [archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux/ #拷貝文件 [archlinux@localhost ~]$ ls #查看文件是否成功 pam.d
7、擴展testlv為7G,要求archliunx的文件不能丟失。
[archlinux@localhost ~]$ su - root #切換為root用戶 [root@localhost users]# lvextend -L 7G /dev/mapper/testvg-testlv #擴張為7G Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized.#顯示已經成功。
為了安全起見,我們最好再用vgs和vgdisplay
[root@localhost users]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 7.00g #成功了 [root@localhost users]# lvdisplay --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 LV Status available # open 1 LV Size 7.00 GiB #成功了。 Current LE 448 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
在切換至archliunx用戶,到自己的家目錄下面查看。。這里就不展示結果,因為擴張損壞數據的可能性幾乎為0,我也在本機查看了,未損失。若你的不行損失,請檢查步驟和自己的RP。
8、收縮至3G,要求數據不損失。
在收縮時一定需要先取消掛載,并且 e2fsck -f 強制檢查,收縮完畢后再一次強行檢查。注意查看檢測結果
[root@localhost ~]# e2fsck -f /dev/mapper/testvg-testlv 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 testext4: 76/327680 files (0.0% non-contiguous), 55962/1310720 blocks
下面開始縮減文件系統大小,此操作慎重。(縮減)
[root@localhost ~]# resize2fs /dev/mapper/testvg-testlv 3G #縮減文件系統 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/testvg-testlv to 786432 (4k) blocks. The filesystem on /dev/mapper/testvg-testlv is now 786432 blocks long.
繼續縮減lv的大小,先執行上面的操作,不然會造成不可恢復的錯誤,不相信你可試試。
[root@localhost ~]# lvreduce -L 3G /dev/mapper/testvg-testlv WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testvg/testlv? [y/n]: y Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume testlv successfully resized.
自行查看用lvs和lvdisply查看修改后的LV大小
再次強制檢查此分區
e2fsck -f /dev/mapper/testvg-testlv 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/mapper/testvg-testlv: 75/196608 files (0.0% non-contiguous), 47863/786432 blocks
檢查無錯誤,若出現錯誤請仔細對照每一步的操作。然后進行掛載和查看數據是否還在。
[root@localhost pam.d]# ls abrt-cli-root eject other runuser-l su-l atd fingerprint-auth passwd setup system-auth authconfig fingerprint-auth-ac password-auth smartcard-auth system-auth-ac authconfig-gtk gdm password-auth-ac smartcard-auth-ac system-config-authentication authconfig-tui gdm-autologin polkit-1 smtp system-config-date chfn gdm-fingerprint poweroff smtp.postfix system-config-kdump chsh gdm-password ppp sshd system-config-keyboard config-util gnome-screensaver reboot ssh-keycat system-config-network crond halt remote su system-config-network-cmd cups login run_init sudo system-config-users cvs newrole
一切正常。
9、創建快照,并備份,和驗證快照的功能。因為前面VG還有空間沒有完,因此這里直接就用VG剩余的大小。
[root@localhost ~]# lvcreate -s -L 3G -n testlv.backup -p r /dev/testvg/testlv #創建一個大小和原文件相同備份分區 Logical volume "testlv.backup" created. ##提示成功 [root@localhost ~]# mke2fs -t ext4 /dev/mapper/testvg-testlv.backup 掛載分區 mke2fs 1.41.12 (17-May-2010) /dev/mapper/testvg-testlv.backup: Operation not permitted while setting up superblock [root@localhost ~]# mount /dev/mapper/testvg-testlv.backup /mnt mount: block device /dev/mapper/testvg-testlv.backup is write-protected, mounting read-only [root@localhost ~]# cd /mnt [root@localhost mnt]# ls archlinux lost+found #查看文件存在
原創文章,作者:fighter,如若轉載,請注明出處:http://www.www58058.com/41802
文章思路清晰,層次命令,先總結,再通過示例操作展示自己學過的知識,很好,建議能有一些自己獨到的理解和實驗部分,來加深自己對lvm的理解,同時lvm快照功能也是數據物理被封很重要的一部分,希望下來也能總結好。