LVM: Logical Volume Manager
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然后以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對于分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。比如說我增加一個物理硬盤,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。
LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處于最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之后可動態添加物理卷到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用于建立新的邏輯卷,邏輯卷建立后可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬于同一個卷組,也可以屬于不同的多個卷組。
PE(Physical Extent)- 物理塊
LVM 默認使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此默認的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像文件系統里面的block 大小。所以調整PE 會影響到LVM 的最大容量!不過,在 CentOS 6.x 以后,由于直接使用 lvm2 的各項格式功能,因此這個限制已經不存在了。
將pv提供的存儲空間劃分為大小相同的n個存儲塊,pe大小是在pv加入vg之后決定的,
dm:vevice mapper
將一個或多個底層塊設備組織成一個邏輯設備的模塊,存放在:/dev/dm-#
關系圖如下:
lvcreate |
在卷組中創建邏輯卷: # lvcreate -L 100 /dev/vg00 |
lvdisplay |
顯示有關邏輯卷的信息: # lvdisplay -v /dev/vg00/lvol1 |
lvextend |
為邏輯卷添加鏡像 # lvextend -m 1 /dev/vg00/lvol3 |
lvextend |
增加邏輯卷的大小 # lvextend -L 120 /dev/vg00/lvol3 |
lvreduce |
減小邏輯卷的大?。?/span> # lvreduce -L 100 /dev/vg00/lvol3 |
lvremove |
從卷組中刪除邏輯卷: # lvremove /dev/vg00/lvol6 |
pvcreate |
創建用作卷組的一部分的物理卷: # pvcreate /dev/rdisk/disk2 |
pvdisplay |
顯示有關物理卷的信息: # pvdisplay -v /dev/disk/disk2 |
pvmove |
將盤區從一個物理卷移動到另一個物理卷: # pvmove /dev/disk/disk2 /dev/disk/disk3 |
pvremove |
從物理卷中刪除 LVM 數據結構: # pvremove /dev/rdisk/disk2 |
vgcreate |
創建卷組: # vgcreate /dev/vg01 /dev/disk/disk2 /dev/disk/disk3 |
vgdisplay |
顯示有關卷組的信息: # vgdisplay -v /dev/vg00 |
vgextend |
通過添加物理卷來擴充卷組: # vgextend /dev/vg00 /dev/disk/disk2 |
vgexport |
從系統中刪除卷組: # vgexport /dev/vg01 |
vgscan |
掃描卷組的系統磁盤: # vgscan -v |
vgreduce |
通過從卷組中刪除一個或多個物理卷來縮小卷組: # vgreduce /dev/vg00 /dev/disk/disk2 |
vgremove |
從系統和磁盤中刪除卷組定義: # vgremove /dev/vg00 /dev/disk/disk2 |
vgsync |
同步卷組中的所有鏡像邏輯卷: # vgsync vg00 |
VG:Volume Group 卷組
vg管理工具:
vgcreate [-s #[kmgtpe]] volumegroupname physicaldevicepath [physicaldevicepath...]
vgcreate -s pe大小創建卷組的名稱 指定pv路徑(可以多個)
#vgcreate vg1 /dev/sdb
-s:pe大小
擴展vg:(加磁盤)
vgextend volumegroupname physicaldevicepath [physicaldevicepath...]
vgextend 要擴展的vg組名添加的磁盤路徑(可以多個)
#vgextend vg1 /dev/sdc1
縮減vg:(減磁盤)
vgreduce volumegroupname physicaldevicepath [physicaldevicepath…]
vgreduce 要縮減的vg組 縮減的磁盤路徑(可以是多個)
vgreduce參數:
-a:如果命令行中沒有指定要刪除的物理卷,則刪除所有的空物理卷;
–removemissing:刪除卷組中丟失的物理卷,使卷組恢復正常狀態。
#vgreduce myvg /dev/sda5
注:縮減vg時,縮減的是磁盤,所以務必先使用vgmove命令移動磁盤上的數據(將要移除的vg上的數據移動到同一個vg組的pv上)
LV:Logical Volume 邏輯卷管理
lvcreate -L #[mMgGtT] -n NAME VolumeGroup lvcreate -L 指定lv大小 -n 指定lv名稱 指定在哪個vg組里創建lv -L:指定lv大小 (卷組有足夠的空間情況下) -n:name #lvremove /dev/VG_name/lv_name
擴展邏輯卷:
lvextend -L [+]num[mMgGtT] /dev/vg_name/LV_NAME
+:加+號代表在原有基礎上增加多少,不帶+號則代表增加到
如:原有2G,現要擴展到5G
1.加+號,#lvextend -L +3G /dev/vg1/lv1
2.不加+號,#lvextend -L 5G /dev/vg1/lv1
擴展后需要修改邏輯邊界
resize2fs /dev/VG_NAME/LV_NAME
#resize2fs /dev/myvg/mylv
擴展到此lv大小
只針對ext系列文件系統
lv:lvreduce縮減邏輯卷
先縮減內部文件系統大?。ㄟ壿嬤吔纾┑街付ù笮。倏s減物理大小
1.卸載文件系統:
umount /dev/vg_name/lv_name #umount /dev/vg1/lv1
2.文件系統強制檢測
e2fsck -f /dev/VG_NAME/LV_NAME #e2fsck -f /dev/vg1/lv1
3.縮減文件系統邏輯邊界(縮減至多大)
resize2fs /dev/VG_name/LV_NAME #[mMgGtT] resize2fs /dev/vg1/lv1 10G
4.再次執行縮減
lvreduce -L [-]num[mMgGtT] /dev/VG-name/LV-name -:加-號代表在原有基礎上減少多少,不帶-號則代表減少到多少 如:原有5G,現要縮減到2G 1.加-號,#lvextend -L -3G /dev/vg1/lv1 2.不加-號,#lvextend -L 2G /dev/vg1/lv1
5.重新掛載
mount /dev/vg_name/lv_name /path/to/somefile #mount /dev/vg1/lv1 /mnt/lv1
示例:
1.創建一個至少有兩個pv組成的大小為20G的名為testvg的VG,要求PE大小為16MB,而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄
###創建pv和vg:
-s指定pe大小
[root@localhost ~]# vgcreate testvg -s 16M /dev/sd{b,c}1 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdc1" successfully created Volume group "testvg" successfully created
###創建lv
-L:指定lv大小
-n:指定lv名稱
[root@localhost ~]# lvcreate -L 5G -n testlv testvg Logical volume "testlv" created.
###格式化testlv
-t:指定文件系統
-L:指定LABEL
[root@localhost ~]# mke2fs -t ext4 -L testlvm /dev/testvg/testlv
###掛載目錄
[root@localhost ~]# touch /users
[root@localhost ~]# mount /dev/testvg/testlv /users
###創建所有信息;
##物理卷信息(pv)
[root@localhost /]# pvs /dev/sd{b,c}1 PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a--u 10.00g 5.00g /dev/sdc1 testvg lvm2 a--u 10.00g 10.00g
##卷組信息(vg)
[root@localhost /]# vgs /dev/testvg VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 20.00g 15.00g
##邏輯卷信息(lv)
[root@localhost /]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 5.00g
2.新建用戶archlinux,要求其家目錄為/users/archlinux,而后su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄
###新建用戶
-d:指定家目錄
[root@localhost users]# useradd -d /users/archlinux archlinux [root@localhost users]# getent passwd archlinux archlinux:x:501:501::/users/archlinux:/bin/bash
###復制pam.d 目錄到用戶家目錄
[root@localhost ~]# cp -r /etc/pam.d /users/archlinux/ [root@localhost ~]# ls /users/archlinux/ pam.d
3.擴展testlv至7G,要求archlinux用戶的文件不能丟失;
####查看原邏輯分區
[root@localhost ~]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 5.00g
####擴展邏輯分區
-L:指定擴展的大小
+2G:在原有的5G上增加2G
[root@localhost ~]#lvextend -L +2G /dev/testvg/testlv
###發現實際容量并沒有變化,因為我們的系統還不認識剛剛添加進來的磁盤的文件系統,所以還需要對文件系統進行擴容
[root@localhost ~]#resize2fs /dev/testvg/testlv [root@localhost ~]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 7.00g
###查看分區是否增加容量,如我們沒有使用resize2fs 對文件系統進行擴容,此大小還是原有大小5G
[root@localhost pam.d]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg0-root ext4 22G 352M 20G 2% / tmpfs tmpfs 515M 0 515M 0% /dev/shm /dev/sda1 ext4 199M 35M 154M 19% /boot /dev/mapper/vg0-usr ext4 11G 2.1G 7.9G 21% /usr /dev/mapper/vg0-var ext4 22G 122M 20G 1% /var /dev/mapper/testvg-testlv ext4 7.3G 13M 6.9G 1% /users
###驗證
[root@localhost pam.d]# du -sh 204K. [root@localhost pam.d]# pwd /etc/pam.d [root@localhost pam.d]# cd /users/archlinux/pam.d/ [root@localhost pam.d]# du -sh 204K. [root@localhost pam.d]# pwd /users/archlinux/pam.d
4.收縮testlv至3G,要求archlinux用戶的文件不能丟失
縮減邏輯卷(lv)
lvreduce
先縮減內部文件系統大?。ㄟ壿嬤吔纾┑街付ù笮?,再縮減物理大小
1.卸載文件系統:
[root@localhost ~]# umount /dev/testvg/testlv
2.文件系統強制檢測
列如:e2fsck -f /dev/VG_NAME/LV_NAME
[root@localhost ~]# e2fsck -f /dev/testvg/testlv e2fsck 1.41.12 (17-May-2010) .......
3.縮減文件系統邏輯邊界(縮減至多大)
例:resize2fs /dev/VG_name/LV_NAME #[mMgGtT]
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks. The filesystem on /dev/testvg/testlv is now 786432 blocks long.
4).再次執行縮減
lvreduce -L [-]num[mMgGtT] /dev/VG-name/LV-name
-:加-號代表在原有基礎上減少多少,不帶-號則代表減少到多少
如:原有5G,現要縮減到2G
1.加-號,#lvextend -L -3G /dev/vg1/lv1
2.不加-號,#lvextend -L 2G /dev/vg1/lv1
[root@localhost ~]# lvreduce -L 3G /dev/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.
5).mount 重新掛載
[root@localhost ~]# mount /dev/testvg/testlv /users/
###驗證
[root@localhost ~]# du -sh /etc/pam.d 204K/etc/pam.d [root@localhost ~]# du -sh /users/archlinux/pam.d 204K/users/archlinux/pam.d [root@localhost ~]#
5.對testlv創建快照,并嘗試基于快照備份數據,驗證快照的功能
快照:snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
lvcreate -L size -p 權限(r,rw) -s 創建快照卷 -n 快照卷名稱 原lv卷
-L:變化量大小,原卷和快照卷的大小變化
[root@localhost ~]# lvcreate -s -L 1G -p r -n lvsnap /dev/testvg/testlv Logical volume "lvsnap" created. [root@localhost users]# mount /dev/testvg/lvsnap /testdir/snap/ mount: block device /dev/mapper/testvg-lvsnap is write-protected, mounting read-only [root@localhost users]# ls aaa abcd archlinux lost+found [root@localhost users]# ls /testdir/snap/ archlinux lost+found [root@localhost users]# touch abc [root@localhost users]# ls /testdir/snap/ archlinux lost+found
dd命令:convert and copy file
用法:dd if=/path/from/src of=/path/to/dest
bs=num 復制單元大小block size(單位字節)
count=num :復制多少個bs
#dd if=/etc/fstab of=/tmp/fstab #dd if=/etc/fstab of=/tmp/fstab bs=1 count=100
磁盤復制:
dd if=/dev/sda of=/dev/sdb
備份MBR:
dd if=/dev/sda of=/tmp/mbr_bak bs=512 count=1
清除磁盤分區:
# dd if=/dev/zero of=/dev/sda bs=512 count=1
破壞mbr的bootloader:
bs=256
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/41107
文章對lvm知識把我的很全面,同時通過具體操作對此命令進行了練習,但是前面的命令和選項連在一起了,這需要作者多加注意。同時需要注意的是lvm對于數據的物理備份是很關鍵的,需要多加練習,熟練掌握。