目錄:node
1、概述安全
2、LVM的相關概念bash
3、概念圖app
4、LVM基本操做dom
1.建立PVide
2.查看PV信息測試
3.建立VGui
4.查看VG信息this
5.建立LVspa
6.查看LV信息
7.掛載LV
8.擴展卷組
9.縮減卷組
10.擴展邏輯卷
11.縮減邏輯卷
12.移除邏輯卷
13.移除卷組
14.移除物理卷
5、LVM快照實現
6、總結
—————————————————————————————————————————————————
1、概述
LVM全稱是Logical Volume Manager,即邏輯卷管理器。它是Linux環境下對磁盤分區進行管理的一種機制;它能夠將多個物理分區整合在一塊兒,而且能夠根據實際須要動態調整文件系統空間。另外,它還能夠提供快照,快照在剛建立的時候,其內容是和原卷如出一轍的,只有數據在原卷中發生變化的時候,快照會將被改動數據的原數據保存起來。
2、LVM的相關概念
1.物理卷(Physical Volume)
物理卷是組成LVM的最底層的元素,即Linux上的物理分區。
2.卷組(Volume Group)
將各個獨立的PV組合起來造成的一個存儲空間就稱爲VG,VG的大小就是整個LVM的大小。
3.邏輯卷(Logical Volume)
能夠被用戶格式化、掛載並提供數據存儲的對象就是LV。
4.物理擴展塊(Physical Extent)
PE至關於Linux分區中的block,它是LVM的最小存儲單位,默認爲4M。
3、概念圖
4、LVM基本操做
1.建立PV
首先得先建立分區,並將分區的類型改成8e。在這裏,咱們能夠按照如下方式分別建立/dev/sdb一、/dev/sdb二、/dev/sdc一、/dev/sdc2.
建立PV使用如下命令格式:
pvcreate device_name
例如: pvcreate /dev/sdb1
[root@localhost ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x05ff7b5d Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 8e Linux LVM [root@localhost ~]# pvcreate /dev/sdb{1,2} /dev/sdc{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created
2.查看PV信息
使用的命令:
(1)pvs 簡要查看PV信息
(2)pvsdisplay 詳細查看PV信息。
A.pvsdisplay 直接使用該命令,查看全部PV的信息。
B.pvsdisplay device_name 表示查看device_name這個PV的信息。
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 5.01g 5.01g /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 lvm2 --- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g [root@localhost ~]# pvdisplay /dev/sdb1 "/dev/sdb1" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID rZsvZG-nMf0-To7I-3k2X-fzEL-jkvk-eNFd6h
3.建立VG
在有了PV以後,接下來咱們要建立VG,建立VG使用如下命令:
vgcreate VG_NAME PV_NAME
-s PE:指定PE的大小
[root@localhost ~]# vgcreate testvg /dev/sd{b,c}1 Volume group "testvg" successfully created
4.查看VG信息
查看VG使用如下命令:
(1)vgs:簡要查看VG信息。
(2)vgdisplay:詳細查看VG信息。
A.vgdisplay: 直接使用該命令,查看全部VG的信息。
B.vgdisplay VG_NAME: 表示查看這個VG的信息。
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 10.02g 10.02g [root@localhost ~]# vgdisplay testvg --- Volume group --- VG Name testvg System ID Format lvm2 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 10.02 GiB PE Size 4.00 MiB Total PE 2564 Alloc PE / Size 0 / 0 Free PE / Size 2564 / 10.02 GiB VG UUID zmjsxc-4KPf-LEcC-96zL-BBDY-N0Cs-buSQ6n
5.建立LV
使用的命令:
lvcreate -L SIZE -n LV_NAME VG_NAME
-L 指定邏輯卷的大小
-n 指定邏輯卷的名稱
-l PE的個數
[root@localhost ~]# lvcreate -L 5G -n mylv testvg Logical volume "mylv" created
6.查看LV信息
查看LV使用如下命令:
(1)lvs: 簡要查看LV信息
(2)lvdisplay 邏輯卷的設備文件名稱: 詳細查看LV信息
邏輯卷的設備文件名稱路徑:/dev/VG_NAME/LV_NAME 或者 /dev/mapper/VG_NAME-LV_NAME
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg -wi-a----- 5.00g [root@localhost ~]# ll /dev/testvg/mylv lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/testvg/mylv -> ../dm-0 [root@localhost ~]# ll /dev/mapper/testvg-mylv lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/mapper/testvg-mylv -> ../dm-0 [root@localhost ~]# lvdisplay /dev/testvg/mylv --- Logical volume --- LV Path /dev/testvg/mylv LV Name mylv VG Name testvg LV UUID cgrPIG-Zavs-GH9Z-55sR-MtSt-SFzg-SVETpG LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-07-24 01:19:20 +0800 LV Status available # open 0 LV Size 5.00 GiB Current LE 1280 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
7.掛載LV
在掛載LV以前,咱們要對LV進行格式化後再掛載,而後存放文件看是否正常。
# 格式化LV [root@localhost ~]# mke2fs -t ext4 /dev/testvg/mylv mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 掛載LV [root@localhost ~]# mount /dev/testvg/mylv /mnt # 查看掛載的分區信息 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 5.0G 138M 4.6G 3% /mnt # 測試存放文件 [root@localhost ~]# cp /etc/inittab /mnt/ [root@localhost mnt]# tail -4 /mnt/inittab # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
8.擴展卷組
步驟:
(1)準備好一個PV
(2)使用vgextend命令完成擴展,命令格式:vgextend VG_NAME /PATH/TO/PV
#查看使用和未使用的PV,其中/dev/sdb2和/dev/sdc2都還未使用 [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a-- 5.01g 8.00m /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 testvg lvm2 a-- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g #未擴展前的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g #擴展VG [root@localhost ~]# vgextend testvg /dev/sdb2 Volume group "testvg" successfully extended #擴展後的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 3 1 0 wz--n- 15.02g 10.02g
9.縮減卷組
步驟:
(1)肯定要移除的PV
(2)將此PV上的數據轉移至其餘的PV
命令:pvmove PV_NAME
(3)從卷組中將此PV移除
命令:vgreduce /PATH/TO/PV
# 查看已經使用在卷組中的PV [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a-- 5.01g 8.00m /dev/sdb2 testvg lvm2 a-- 5.01g 5.01g /dev/sdc1 testvg lvm2 a-- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g # 如今肯定要移除/dev/sdb1,在移除前須要將數據轉移到其餘PV [root@localhost ~]# pvmove /dev/sdb1 /dev/sdb1: Moved: 0.0% /dev/sdb1: Moved: 100.0% # 將PV從卷組中移除 [root@localhost ~]# vgreduce testvg /dev/sdb1 Removed "/dev/sdb1" from volume group "testvg" # 查看移除後的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g
10.擴展邏輯卷
步驟:
(1)先肯定擴展的LV大小,並確保對應卷組有足夠的空間
(2)擴展物理邊界
使用lvextend命令:lvextend -L [+]SIZE /PATH/TO/LV
參數說明:
-L [+]SIZE: 指定擴展的容量;若是帶+號,表示擴展的容量是在原來的基礎上加上SIZE的容量;若是不帶,表示擴展容量到SIZE,單位爲"kKmMgGtT"
-l [+]SIZE: 指定擴展的容量;若是帶+號,表示擴展的容量是在原來的基礎上加上SIZE個PE的容量;不帶+號,表示擴展到SIZE個PE的容量
SIZE: 表示數字
(3)擴展邏輯邊界
使用resize2fs /PATH/TO/DEVICE
# 肯定VG的容量 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g # 未擴展前的LV容量 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg -wi-ao---- 5.00g # 擴展LV到8G,即物理邊界 [root@localhost ~]# lvextend -L +3G /dev/testvg/mylv Size of logical volume testvg/mylv changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents). Logical volume mylv successfully resized # 查看掛載的LV大小,發覺仍是5G,由於還沒擴展邏輯邊界 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 5.0G 139M 4.6G 3% /mnt # 擴展邏輯邊界 [root@localhost ~]# resize2fs /dev/testvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testvg/mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testvg/mylv to 2097152 (4k) blocks. The filesystem on /dev/testvg/mylv is now 2097152 blocks long. # 查看分區大小,文件系統大小也擴展了 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 7.9G 140M 7.4G 2% /mnt
11.縮減邏輯卷
步驟:
(1)肯定縮減後的大小,至少確保縮減後能容納原來的全部數據
(2)執行縮減:
A.由於縮減有風險,因此必須卸載並檢測文件系統,使用e2fsck -f命令
B.縮減邏輯邊界,使用resize2fs命令
resize2fs /path/to/device SIZE
C.縮減物理邊界,使用lvreduce命令
lvreduce -L [-]SIZE /path/to/lv
# 卸載並強行檢測 [root@localhost ~]# umount /mnt/ [root@localhost ~]# e2fsck -f /dev/testvg/mylv 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/testvg/mylv: 12/524288 files (0.0% non-contiguous), 68623/2097152 blocks # 縮減LV至3G,即邏輯邊界 [root@localhost ~]# resize2fs /dev/testvg/mylv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/mylv to 786432 (4k) blocks. The filesystem on /dev/testvg/mylv is now 786432 blocks long. # 縮減物理邊界 [root@localhost ~]# lvreduce -L 3G /dev/testvg/mylv WARNING: Reducing active logical volume to 3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y Size of logical volume testvg/mylv changed from 8.00 GiB (2048 extents) to 3.00 GiB (768 extents). Logical volume mylv successfully resized # 爲確保安全,再次檢測 [root@localhost ~]# e2fsck -f /dev/testvg/mylv 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/testvg/mylv: 12/196608 files (0.0% non-contiguous), 47100/786432 blocks # 掛載,查看分區大小並查看分區裏面的文件是否正常 [root@localhost ~]# mount /dev/testvg/mylv /mnt/ [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 3.0G 136M 2.7G 5% /mnt [root@localhost ~]# cd /mnt/ [root@localhost mnt]# tail -4 /mnt/inittab # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
12.移除邏輯卷
移除邏輯卷以前,確保已經沒有被掛載。此時使用lvremove /path/to/lv命令便可
# 查看邏輯卷 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert hello_lv testvg -wi-a----- 1.00g mylv testvg owi-aos--- 3.00g # 移除hello_lv [root@localhost ~]# lvremove /dev/testvg/hello_lv Do you really want to remove active logical volume hello_lv? [y/n]: y Logical volume "hello_lv" successfully removed # 再次查看邏輯卷信息 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg owi-aos--- 3.00g
13.移除卷組
使用vgremove VG_NAME
# 查看卷組信息 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 10.02g 10.02g # 移除testvg [root@localhost ~]# vgremove testvg Volume group "testvg" successfully removed
14.移除物理卷
使用pvremove PV_NAME命令
# 查看物理卷 [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 lvm2 --- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g # 移除物理卷 [root@localhost ~]# pvremove /dev/sdb2 Labels on physical volume "/dev/sdb2" successfully wiped [root@localhost ~]# pvremove /dev/sdc1 Labels on physical volume "/dev/sdc1" successfully wiped [root@localhost ~]# pvremove /dev/sdc2 Labels on physical volume "/dev/sdc2" successfully wiped
5、LVM快照實現
建立出來的快照卷是已經記錄了原卷某個時刻全部文件的狀態,在原卷沒有作出修改以前,快照卷只是做爲訪問原卷的一個入口;一旦原卷中的文件發生改變的時候,系統會將原卷的文件複製一份到快照卷,這時的快照卷就不能做爲訪問原卷的入口了,快照卷裏面只有原卷沒有發生改變以前複製過來的文件。這時,咱們就能夠對快照卷裏面的文件進行打包備份。
建立快照使用lvcreate命令,使用如下參數
-L SIZE: 指定快照卷的大小
-s: 表示建立快照卷
-p r: 限制快照卷爲只讀訪問
-n LV_NAME: 指定快照卷的名稱
示例:lvcreate -L SIZE -s -p r -n LV_NAME /path/to/lv
# 建立快照卷 [root@localhost mnt]# lvcreate -L 50M -s -p r -n mylv-snap /dev/testvg/mylv Rounding up size to full physical extent 52.00 MiB Logical volume "mylv-snap" created [root@localhost mnt]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg owi-aos--- 3.00g mylv-snap testvg sri-a-s--- 52.00m mylv 0.02 # 掛載快照卷 [root@localhost ~]# mount -o ro /dev/testvg/mylv-snap /media/ # 查看快照卷,此時的快照卷只是做爲原卷的入口,因此內容和快照卷的是同樣的 [root@localhost mnt]# cd /media/ [root@localhost media]# ls inittab lost+found # 修改原卷的內容 [root@localhost mnt]# cp /etc/fstab /mnt/ [root@localhost mnt]# echo "Hello World" >> /mnt/inittab # 查看快照卷及裏面的內容,發現沒有新增的文件fstab,並且inittab的文件內容是和建立快照時同樣 [root@localhost ~]# cd /media/ [root@localhost media]# ls inittab lost+found [root@localhost media]# tail -3 inittab # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # 打包備份 [root@localhost media]# tar zcf /tmp/backup.tar.gz /media/inittab tar: Removing leading `/' from member names [root@localhost media]# ls /tmp/backup.tar.gz /tmp/backup.tar.gz # 卸載快照卷 [root@localhost ~]# umount /media/
6、總結
建立LV的過程:
建立PV --> 建立VG --> 建立LV --> 格式化 --> 掛載
擴展卷組的過程:
準備PV --> 完成擴展
縮減卷組的過程:
肯定移除的PV --> 轉移移除PV的數據到別的PV --> 從卷組中移除PV
擴展邏輯卷的過程:
肯定擴展大小 --> 擴展物理邊界 --> 擴展邏輯邊界
縮減邏輯卷的過程:
肯定縮減大小 --> 卸載邏輯卷 --> 縮減邏輯邊界 --> 縮減物理邊界