LVM
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好之后就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,LVM的重點在于可以彈性調整文件系統的容量!LVM可以整合多個物理分區在一起,讓這些分區看起來就想是一個磁盤一樣,而且,還可以在將來其他的物理分區或將其從這個LVM管理的磁盤當中刪除。
LVM的特性
?允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小
?允許在多個物理設備間重新組織文件系統
?將設備指定為物理卷
?用一個或者多個物理卷來創建一個卷組
?物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的
?在物理卷上創建的邏輯卷是由物理區域(PE)組成
?可以在邏輯卷上創建文件系統
LVM的組成結構
dm:device mapper :強一個或多個底層塊設備組織成一個邏輯的模塊
注意:內核必須支持此模塊,否則無法使用lvm功能
Physical Volume,PV,物理卷
PV卷時LVM機制的基本存儲設備,通常對應一個普通分區或整個硬盤,創建物理卷時,會在分區的頭部創建一個保留區塊,用于記錄LVM屬性,并把存儲空間分割成默認大小為4MB的基本單元PE,從而構成物理卷。
pv管理工具:
pvs [PhysicalVolume [PhysicalVolume…]] 簡要pv信息顯示
pvdisplay [PhysicalVolumePath…] 詳細顯示pv信息
pvcreate [PhysicalVolume…] 創建pv卷
pvscan DevicePath 掃描所有磁盤上的物理卷
pvremove [PhysicalVolume] [PhysicalVolume…] 移除pv卷
例如: pvremove /dev/DEVICE[N] pvremove /dev/sdb1..
Volume,Group,VG,卷用戶組
所謂的LVM大磁盤就是將許多PV整合成這個VG,所以VG就是LVM組合起來的大磁盤。
vg管理工具:
vgs [VolumeGroupName [VolumeGroupName…]]:簡要的vg信息顯示
vgdisplay [VolumeGroupName…]:顯示vg的詳細信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] :創建vg組
-s 指定PE大小
vgreduce vgreduce VolumeGroupName [PhysicalVolumePath…] 從卷組中刪除物理卷
vgextend VolumeGroupName PhysicalDevicePath [Physi-calDevicePath…] 向卷組中添加物理卷
vgremove [VolumeGroup‐Name…]刪除卷組
vgremove VGNAME
Logic Volume ,LV,邏輯卷
最終的VG還會被且成LV,這個LV就是最后可以被格式化使用的類似分區。
邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分為可被尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,并且一一對應。
lv管理工具:
lvs [VolumeGroupName] 簡要lv信息
lvdisplay [VolumeGroupName|LogicalVolume{Name|Path} …] 查看邏輯卷詳細信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup 創建邏輯卷
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME :擴展邏輯卷
lvremove Logicname :刪除邏輯卷
例如:lvremove LVNAME lvremove testlv
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME : [-]:減少多少,和減至多少
resize2fs /dev/myvg/mylv
縮減邏輯卷:
umount /dev/VG_NAME/LV_NAME 必須先縮減
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
示例
[root@Cloud ~]#lsblk #查看磁盤分區 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 60G 0 part │ ├─vg0-root (dm-0) 253:0 0 20G 0 lvm / │ ├─vg0-swap (dm-1) 253:1 0 2G 0 lvm [SWAP] │ ├─vg0-usr (dm-2) 253:2 0 10G 0 lvm /usr │ └─vg0-var (dm-3) 253:3 0 20G 0 lvm /var └─sda3 8:3 0 1G 0 part sdb 8:16 0 15G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 3.7G 0 rom
[root@Cloud ~]#fdisk /dev/sdb #給/dev/sdb分區 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1958, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1958, default 1958): +2G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e#必須改成8e格式(LVM的標識符) Changed system type of partition 1 to 8e (Linux LVM)
[root@Cloud ~]#fdisk -l |grep '/dev/[sh]d[a-z]' #創建的LVM卷分區 Disk /dev/sda: 214.7 GB, 214748364800 bytes /dev/sda1 * 1 26 204800 83 Linux /dev/sda2 26 7859 62914560 8e Linux LVM /dev/sda3 7859 7990 1059291 83 Linux Disk /dev/sdb: 16.1 GB, 16106127360 bytes /dev/sdb1 1 262 2104483+ 8e Linux LVM /dev/sdb2 263 524 2104515 8e Linux LVM /dev/sdb3 525 786 2104515 8e Linux LVM Disk /dev/sdc: 21.5 GB, 21474836480 bytes /dev/sdc1 1 262 2104483+ 8e Linux LVM /dev/sdc2 263 524 2104515 8e Linux LVM /dev/sdc3 525 786 2104515 8e Linux LVM
[root@Cloud ~]#pvcreate /dev/sdb{1,2,3} /dev/sdc{1,2,3} #創建pv卷 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created Physical volume "/dev/sdc3" successfully created [root@Cloud ~]#pvs #簡要顯示 PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a--u 59.99g 7.99g /dev/sdb1 lvm2 ---- 2.01g 2.01g /dev/sdb2 lvm2 ---- 2.01g 2.01g /dev/sdb3 lvm2 ---- 2.01g 2.01g /dev/sdc1 lvm2 ---- 2.01g 2.01g /dev/sdc2 lvm2 ---- 2.01g 2.01g /dev/sdc3 lvm2 ---- 2.01g 2.01g [root@Cloud ~]#pvscan #掃描pv卷 PV /dev/sda2 VG vg0 lvm2 [59.99 GiB / 7.99 GiB free] PV /dev/sdb1 lvm2 [2.01 GiB] PV /dev/sdb2 lvm2 [2.01 GiB] PV /dev/sdb3 lvm2 [2.01 GiB] PV /dev/sdc1 lvm2 [2.01 GiB] PV /dev/sdc2 lvm2 [2.01 GiB] PV /dev/sdc3 lvm2 [2.01 GiB] Total: 7 [72.03 GiB] / in use: 1 [59.99 GiB] / in no VG: 6 [12.04 GiB] [root@Cloud ~]#pvdisplay /dev/sdb1 #顯示pv詳細信息 ,,也可以選擇多個pv卷 "/dev/sdb1" is a new physical volume of "2.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 #卷名 VG Name PV Size 2.01 GiB #pv卷大小 Allocatable NO PE Size 0 #尚未分配PE大小 Total PE 0 Free PE 0 Allocated PE 0 PV UUID Oa62B4-4jmr-CZ34-Xx9t-aXeE-2Xwr-2uaQ0o 由于PE是在創建VG時才給予的參數,因此在這里看的pv里面的PE都會時0
[root@Cloud ~]#vgcreate -s 16M VGone /dev/sdb{1,2,3} #創建VG組為VGone PE為16M Volume group "VGone" successfully created [root@Cloud ~]#vgs #簡要顯示 VG #PV #LV #SN Attr VSize VFree VGone 3 0 0 wz--n- 6.00g 6.00g vg0 1 4 0 wz--n- 59.99g 7.99g [root@Cloud ~]#vgscan #掃描查看 Reading all physical volumes. This may take a while... Found volume group "VGone" using metadata type lvm2 Found volume group "vg0" using metadata type lvm2 [root@Cloud ~]#vgdisplay VGone #詳細顯示vg組VGone信息 --- Volume group --- VG Name VGone #VG名 System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 6.00 GiB #VG整體大小 PE Size 16.00 MiB #PE大小 Total PE 384 Alloc PE / Size 0 / 0 Free PE / Size 384 / 6.00 GiB VG UUID Iv022h-Gayu-nOBU-HTZg-dXjm-MPCW-2ytSLe
[root@Cloud ~]#vgreduce VGone /dev/sdb1 #刪除VGone中的/dev/sdb1 Removed "/dev/sdb1" from volume group "VGone" [root@Cloud ~]#vgdisplay VGone #顯示VGone信息 --- Volume group --- VG Name VGone System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 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 4.00 GiB #少了2G了 PE Size 16.00 MiB Total PE 256 Alloc PE / Size 0 / 0 Free PE / Size 256 / 4.00 GiB VG UUID ZJzg4M-W3OM-MDFc-ldww-Xgku-13Jj-GPse8n 注:縮減時注意,如果組中有數據,空間必須要比VG中的文件要大,不然容易導出數據丟失或不完整!??!
[root@Cloud ~]#vgextend VGone /dev/sdb1 #拓展VGone大小 Volume group "VGone" successfully extended [root@Cloud ~]#vgdisplay VGone |grep ' VG Size' VG Size 6.00 GiB #顯示增加為6G
[root@Cloud ~]#lvcreate -L 4G -n log1 /dev/VGone 創建/dev/VGone下為log1的邏輯卷 Logical volume "log1" created. [root@Cloud ~]#lvs #簡要顯示lv卷 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert log1 VGone -wi-a----- 4.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g [root@Cloud ~]#lvscan #掃描lv卷 ACTIVE '/dev/VGone/log1' [4.00 GiB] inherit ACTIVE '/dev/vg0/root' [20.00 GiB] inherit ACTIVE '/dev/vg0/swap' [2.00 GiB] inherit ACTIVE '/dev/vg0/usr' [10.00 GiB] inherit ACTIVE '/dev/vg0/var' [20.00 GiB] inherit [root@Cloud ~]#lvdisplay /dev/VGone/log1 #詳細顯示lv卷 --- Logical volume --- LV Path /dev/VGone/log1 LV Name log1 VG Name VGone LV UUID ACCmAR-Iu9k-IWk4-CGPS-rk7V-BwU7-otfOD0 LV Write Access read/write LV Creation host, time Cloud.GO, 2016-09-08 22:40:28 +0800 LV Status available # open 0 LV Size 4.00 GiB #lv總大小 Current LE 256 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
[root@Cloud ~]#lvextend -L +1G /dev/VGone/log1 #加1G的lv卷 Size of logical volume VGone/log1 changed from 4.00 GiB (256 extents) to 5.00 GiB (320 extents). Logical volume log1 successfully resized. [root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' LV Size 5.00 GiB #增加了1G [root@Cloud ~]#resize2fs /dev/VGone/log1 #重設lv大小 resize2fs 1.41.12 (17-May-2010) resize2fs: Bad magic number in super-block while trying to open /dev/VGone/log1 Couldn't find valid filesystem superblock.
注意:如果lv卷已經掛載,那么必須先卸載再檢查才能縮減。有數據必須指定為比存儲的數據空間大!
縮減邏輯卷:
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 : [-]:減少多少,和減至多少
[root@Cloud ~]#lvreduce -L 2G /dev/VGone/log1 #壓縮lv卷至2G WARNING: Reducing active logical volume to 2.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce VGone/log1? [y/n]: y #交互式 Size of logical volume VGone/log1 changed from 5.00 GiB (320 extents) to 2.00 GiB (128 extents). Logical volume log1 successfully resized. [root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' #顯示大小 LV Size 2.00 GiB
快照:snapshot
就是將當時的系統信息記錄下來,就好像照相機記錄一般。將來若有任何數據改動了,則原始數據會被移到快照去,沒有被改動的區域則由快照區與文件系統共享。
lvcreate -L # [mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name 創建快照
-s 指定是快照卷
-n 指定卷名字
-p r 指定只讀
lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv
創建快照
mount /dev/myvg/mylv-snap /mnt
掛載快照
umount /mnt
卸載快照
[root@Cloud /snap]#mount /dev/VGone/log1 /media/ #掛載LV卷 [root@Cloud /media]#cp /etc/fstab /etc/issue ./ #復制文件到lv卷中 [root@Cloud /media]#ls fstab issue lost+found [root@Cloud /]#lvcreate -s -L 512M -n my-lv-snap -p r /dev/VGone/log1 #創建快照 Logical volume "my-lv-snap" created. [root@Cloud /]#mount /dev/VGone/my-lv-snap /mnt/ #掛載快照 mount: block device /dev/mapper/VGone-my--lv--snap is write-protected, mounting read-only [root@Cloud /]#ll /mnt/ #查看快照的內容 total 24 -rw-r--r-- 1 root root 921 Sep 8 23:21 fstab -rw-r--r-- 1 root root 103 Sep 8 23:21 issue drwx------ 2 root root 16384 Sep 8 23:12 lost+found [root@Cloud /]#umount /mnt #卸載 [root@Cloud /]#lvremove /dev/VGone/ #卸載快照 /dev/VGone/log1 /dev/VGone/my-lv-snap [root@Cloud /]#lvremove /dev/VGone/my-lv-snap Do you really want to remove active logical volume my-lv-snap? [y/n]: yes Logical volume "my-lv-snap" successfully removed
原創文章,作者:ladsdm,如若轉載,請注明出處:http://www.www58058.com/44671