LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好之后就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶在無需停機的情況下可以方便地調整各個分區大小。分為lvm,lvm2兩個版本。
lvm2使用dm(device mapper模塊),將一個或多個底層設備組織成一個邏輯的工具
底層可以是任何塊設備,可以是分區、raid
pe:物理盤區,pysical extent
存儲空間邊界:
物理邊界:
邏輯邊界:
邏輯卷:
擴展:先物理,后邏輯
縮減:先邏輯,后物理
縮減不能少于已經存儲的數據空間大小
快照卷也可以掛載到某個訪問點
快照卷在剛創建時沒有數據,訪問快照卷其實是映射到原卷上了,其實是訪問原卷的第二個通路。
如果改變原卷的數據,原卷上的數據在改之前,會復制到快照卷,所以快照卷不必和原卷一樣大
快照卷沒有永存的目的,只是備份
pv:
pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan,
vg:
vgcreate,vgs,vgdisplay,vgremove,vgextend,vgreduce,vgscan
lv:
lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvscan
實驗:創建10G的vg
[root@node1 ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x6f1459ef. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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): p Disk /dev/sdb: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 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: 0x6f1459ef Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-15665, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +3G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (394-15665, default 394): Using default value 394 Last cylinder, +cylinders or +size{K,M,G} (394-15665, default 15665): +7G Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
查看分區:
[root@node1 ~]# cat /proc/partitions major minor #blocks name 8 0 125829120 sda 8 1 204800 sda1 8 2 10240000 sda2 8 3 512000 sda3 8 4 1 sda4 8 5 114870272 sda5 8 16 125829120 sdb 8 17 3156741 sdb1 8 18 7349737 sdb2
創建pv:
[root@node1 ~]# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created [root@node1 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 3.01g 3.01g /dev/sdb2 lvm2 --- 7.01g 7.01g [root@node1 ~]# pvdisplay "/dev/sdb1" is a new physical volume of "3.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 3.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm "/dev/sdb2" is a new physical volume of "7.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 7.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID KsP0wm-X0KJ-ZkwP-3l3G-lVAA-peS0-UjmRoN
創建vg:
vgcreate [-s N[mgt]] VG名稱 物理設備路徑,-s指定pe大小
[root@node1 ~]# vgcreate myvg /dev/sdb1 Volume group "myvg" successfully created [root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 1 0 0 wz--n- 3.01g 3.01g [root@node1 ~]# pvdisplay /dev/sdb1 --- Physical volume --- PV Name /dev/sdb1 VG Name myvg PV Size 3.01 GiB / not usable 2.75 MiB Allocatable yes PE Size 4.00 MiB Total PE 770 Free PE 770 Allocated PE 0 PV UUID f3ko3z-2YZ8-ghkh-jPOE-C3RI-AKVi-Z5Hjkm
擴展vg:
[root@node1 ~]# vgextend myvg /dev/sdb2 Volume group "myvg" successfully extended [root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 10.02g 10.02g
lvcreate:
-n:lv_name
-L:size[mMgGtT]
VG_NAME
[root@node1 ~]# lvcreate -L 2G -n mylv myvg Logical volume "mylv" created [root@node1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 2.00g
邏輯卷被映射為一個設備:
[root@node1 ~]# ll /dev/mapper/ total 0 crw-rw---- 1 root root 10, 58 Dec 17 17:52 control lrwxrwxrwx 1 root root 7 Dec 17 18:09 myvg-mylv -> ../dm-0
邏輯卷的2個訪問路徑:
/dev/vg_name/lv_name
/dev/mapper/vg_name-lv_name
此二者均為符號鏈接,指向的文件為/dev/dm-#
[root@node1 ~]# ll /dev/mapper/myvg-mylv lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/mapper/myvg-mylv -> ../dm-0 [root@node1 ~]# ll /dev/myvg/mylv lrwxrwxrwx 1 root root 7 Dec 17 18:09 /dev/myvg/mylv -> ../dm-0
分區、格式化:
[root@node1 ~]# mke2fs -t ext4 /dev/myvg/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 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@node1 ~]# mkdir /data [root@node1 ~]# mount /dev/myvg/mylv /data [root@node1 ~]# cd /data [root@node1 data]# ls lost+found [root@node1 data]# mount /dev/sda5 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1 on /boot type ext4 (rw) /dev/sda2 on /home type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/myvg-mylv on /data type ext4 (rw)
查看:
[root@node1 data]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 2.00g [root@node1 data]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 10.02g 8.02g
復制數據:
[root@node1 data]# cp /etc/rc.d/rc.sysinit /data [root@node1 data]# ls lost+found rc.sysinit
擴展:
1、先確定擴展的目標大小,并確保對應的卷組中有足夠的空閑空間可用
2、擴展物理邊界lvextend
3、擴展邏輯邊界resize2fs
[root@node1 data]# lvextend -L 4G /dev/myvg/mylv Size of logical volume myvg/mylv changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume mylv successfully resized [root@node1 data]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda5 108G 1.3G 101G 2% / tmpfs 84M 0 84M 0% /dev/shm /dev/sda1 190M 25M 156M 14% /boot /dev/sda2 9.5G 22M 9.0G 1% /home /dev/mapper/myvg-mylv 2.0G 3.1M 1.9G 1% /data [root@node1 data]# resize2fs /dev/myvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv to 1048576 (4k) blocks. The filesystem on /dev/myvg/mylv is now 1048576 blocks long.
縮減:很危險,生產環境一般不縮減,縮減不能在線縮減。
1、先確定縮減后的目標大小,并確保對應的目標邏輯卷大小中有足夠的空間可容納原所有數據
2、先卸載文件系統,并要執行強制檢測(e2fsck -f)
3、縮減邏輯邊界resize2fs device 3G
4、縮減物理邊界lvreduce
[root@node1 data]# cd [root@node1 ~]# umount /data [root@node1 ~]# e2fsck -f /dev/myvg/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/myvg/mylv: 12/262144 files (0.0% non-contiguous), 33875/1048576 blocks [root@node1 ~]# resize2fs /dev/myvg/mylv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv to 786432 (4k) blocks. The filesystem on /dev/myvg/mylv is now 786432 blocks long. [root@node1 ~]# lvreduce -L 3G /dev/myvg/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 myvg/mylv changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents). Logical volume mylv successfully resized [root@node1 ~]# mount /dev/myvg/mylv /data [root@node1 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda5 108G 1.3G 101G 2% / tmpfs 84M 0 84M 0% /dev/shm /dev/sda1 190M 25M 156M 14% /boot /dev/sda2 9.5G 22M 9.0G 1% /home /dev/mapper/myvg-mylv 2.9G 3.1M 2.8G 1% /data [root@node1 ~]# cd /data [root@node1 data]# ls lost+found rc.sysinit
快照卷:
一般只能讀
lvcreate:
-L:size
-n:name
-s:
-p:r
快照卷是對某邏輯卷進行的,因此必須跟目標邏輯卷在同一卷組中,所以無須指明卷組
注意:確保創建時,原卷沒有修改
[root@node1 data]# mount -o remount,ro /dev/myvg/mylv /data [root@node1 data]# lvcreate -L 512M -n mylv-snap -p r -s /dev/myvg/mylv Logical volume "mylv-snap" created [root@node1 data]# mount -o remount,rw /dev/myvg/mylv /data [root@node1 data]# mkdir /snap [root@node1 data]# mount /dev/myvg/mylv-snap /snap mount: block device /dev/mapper/myvg-mylv--snap is write-protected, mounting read-only
修改原卷:
[root@node1 data]# vim rc.sysinit [root@node1 data]# tail -5 rc.sysinit if [ -x /bin/plymouth ]; then /bin/plymouth --sysinit fi new line
快照卷:
[root@node1 data]# cd /snap [root@node1 snap]# ls lost+found rc.sysinit [root@node1 snap]# tail -5 rc.sysinit # Let rhgb know that we're leaving rc.sysinit if [ -x /bin/plymouth ]; then /bin/plymouth --sysinit fi
復制文件到原卷并查看:
[root@node1 data]# cp /etc/fstab /data [root@node1 data]# ls fstab lost+found rc.sysinit
查看快照卷:
[root@node1 snap]# ls lost+found rc.sysinit
移除快照卷、lv、vg、pv:
[root@node1 snap]# cd [root@node1 ~]# umount /snap [root@node1 ~]# lvremove /dev/myvg/mylv-snap Do you really want to remove active logical volume mylv-snap? [y/n]: y Logical volume "mylv-snap" successfully removed [root@node1 ~]# umount /data [root@node1 ~]# lvremove myvg Do you really want to remove active logical volume mylv? [y/n]: y Logical volume "mylv" successfully removed [root@node1 ~]# vgremove myvg Volume group "myvg" successfully removed [root@node1 ~]# pvremove /dev/sdb{1,2} Labels on physical volume "/dev/sdb1" successfully wiped Labels on physical volume "/dev/sdb2" successfully wiped
做快照卷備份時,即把快照卷內的數據和原卷中的數據一起備份,然后再卸載、移除快照卷,卸載原卷并格式化它,重新掛載原卷,并還原備份。
原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/63914