LVM是什么?為什么要使用LVM?
LVM(Logical Volume Manager):邏輯卷管理, 在日常使用或生產環境中, 我們可能會因為在規劃存儲時未考慮到未來數據增長的速度超乎我們的預計而措手不及,因為增加一塊硬盤再將源數據移到新硬盤上很麻煩并且提高了成本還浪費硬盤空間。
在1998年有人在開發了一個基于卷的管理方式, 在HP-UX中使用,這就是LVM,LVM可以無損擴容、縮減空間來達到應對硬盤空間不足的情況。
LVM相關原理
LVM通過內核中的dm(device mapper)模塊實現使用純軟件的方式將一個或多個底層硬件設備組織成一個或多個邏輯設備。
相關術語:
PV:Physical Volume #一般是物理分區 /dev/sd##…
VG:Volume Group #由多個PE組成,創建卷組時可指定PE大小
PE:Physical Extent #默認大小為4M,LVM中的最小單元
LV:Logical Volume #由多個PE組成
LE:Logical Extent #在LV中的PE稱作LE
LVM通過PV組成PV池,基于PV創建VG,VG由若干個PE組成,在VG中由多個PE組成LV,在LV中PE叫做LE。
原理圖:
此圖轉自維基百科
實戰:創建、擴容、縮減、快照
系統環境
當前系統分區信息,當前系統有2塊新硬盤,分別為20G [root@server2 ~]# fdisk -l Disk /dev/sda: 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: 0x0002777c Device Boot Start End Blocks Id System /dev/sda1 * 1 26 208813+ 83 Linux /dev/sda2 27 1985 15735667+ 83 Linux /dev/sda3 1986 2247 2104515 82 Linux swap / Solaris 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: 0xdee177d5 Device Boot Start End Blocks Id System Disk /dev/sdc: 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: 0x00000000
LVM相關命令解釋
vg管理工具: vgs #查看vg簡要信息 vgdisplay #查看vg詳細信息 vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #創建vg vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #擴展vg容量 vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #縮減vg容量 vgremove VolumeGroupName #刪除vg lv管理工具: lvs #查看lv簡要信息 lvdisplay #查看lv詳細信息 lvcreate -L #[mMgGtT] -n NAME VolumeGroup #創建lv lvremove /dev/VG_NAME/LV_NAME #刪除lv 擴展邏輯卷: lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME #擴展邏輯卷 resize2fs /dev/VG_NAME/LV_NAME #重新定義文件系統大小 縮減邏輯卷: umount /dev/VG_NAME/LV_NAME #卸載lv e2fsck -f /dev/VG_NAME/LV_NAME #檢查lv resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #重新定義lv大小 lvreduce -L [-] [mMgGtT] /dev/VG_NAME/LV_NAME #縮減lv
LVM創建
[root@server2 ~]# pvcreate /dev/sdb #將sdb硬盤添加到PV池中 Physical volume "/dev/sdb" successfully created [root@server2 ~]# pvcreate /dev/sdc #將sdc硬盤添加到PV池中 Physical volume "/dev/sdc" successfully created [root@server2 ~]# pvs #查看PV池 PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 20.00g 20.00g /dev/sdc lvm2 --- 20.00g 20.00g [root@server2 ~]# vgcreate myvg /dev/sdb #創建名稱為myvg的卷組,由/dev/sdb提供PE Volume group "myvg" successfully created #提示vg創建成功 [root@server2 ~]# vgs #查看vg簡要信息 VG #PV #LV #SN Attr VSize VFree myvg 1 1 0 wz--n- 20.00g 10.00g [root@server2 ~]# lvcreate -L 10G -n mylv myvg #在myvg下創建容量為10G、名稱為mylv的lv Logical volume "mylv" created. [root@server2 ~]# lvs #查看lv簡要信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 10.00g [root@server2 ~]# mkfs.ext4 /dev/mapper/myvg-mylv #格式化lv為ext4文件系統 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 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 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, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #將mylv掛載到/mnt下 [root@server2 ~]# df -lh #查看mylv分區使用情況 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 9.8G 23M 9.2G 1% /mnt
LVM擴展
我們現在想將mylv擴展到30G該如何操作?
應該先將myvg擴展到30G以上,在將mylv擴展到30G
操作過程
[root@server2 ~]# vgextend myvg /dev/sdc #擴展myvg,將sdc的空間也提供給myvg Volume group "myvg" successfully extended [root@server2 ~]# vgs #查看vg當前信息,myvg大小為40G VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 39.99g 29.99g [root@server2 ~]# umount /mnt/ #卸載mylv [root@server2 ~]# lvextend -L 30G /dev/myvg/mylv #擴展lv到30G Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents). Logical volume mylv successfully resized [root@server2 ~]# lvs #查看當前lv信息,mylv為30G LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-a----- 30.00g [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #掛載mylv到/mnt目錄 [root@server2 ~]# df ##注意:這里顯示mylv大小只有10G,這是因為我們沒有進行重新定義 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15357672 3527844 11043048 25% / tmpfs 502384 0 502384 0% /dev/shm /dev/sda1 198123 36589 151094 20% /boot /dev/mapper/myvg-mylv 10190136 23028 9642820 1% /mnt [root@server2 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 9.8G 23M 9.2G 1% /mnt [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv #使用resize2fs可以重新定義分區的大小 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/myvg-mylv to 7864320 (4k) blocks. The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long. [root@server2 ~]# df -lh #現在mylv大小終于恢復正常了 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 30G 28M 28G 1% /mnt
LVM縮減
縮減mylv到10G
操作過程
[root@server2 ~]# umount /mnt/ #先卸載掛載目錄 [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/mapper/myvg-mylv' first. #提示需先使用e2fsck命令檢查文件系統 [root@server2 ~]# e2fsck -f /dev/mapper/myvg-mylv #檢查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/mapper/myvg-mylv: 11/1966080 files (0.0% non-contiguous), 167409/7864320 blocks [root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G #使用resize2fs命令重新定義mylv分區大小 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/myvg-mylv to 2097152 (4k) blocks. The filesystem on /dev/mapper/myvg-mylv is now 2097152 blocks long. [root@server2 ~]# lvreduce -L 8G /dev/myvg/mylv #將mylv大小縮減成8G WARNING: Reducing active logical volume to 8.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 30.00 GiB (7680 extents) to 8.00 GiB (2048 extents). Logical volume mylv successfully resized [root@server2 ~]# lvs #查看mylv信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 8.00g [root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ 重新掛載 [root@server2 ~]# df -lh #查看分區大小 Filesystem Size Used Avail Use% Mounted on /dev/sda2 15G 3.4G 11G 25% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 36M 148M 20% /boot /dev/mapper/myvg-mylv 7.8G 36M 7.4G 1% /mnt
LVM快照創建
LVM快照簡單來說就是將所快照源分區一個時間點所有文件的元數據進行保存,如果源文件沒有改變,那么訪問快照卷的相應文件則直接指向源分區的源文件,如果源文件發生改變,則快照卷中與之對應的文件不會發生改變??煺站碇饕糜谳o助備份文件。 這里只簡單介紹,點擊查看詳細介紹
操作過程
[root@server2 mnt]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15357672 3527924 11042968 25% / tmpfs 502384 0 502384 0% /dev/shm /dev/sda1 198123 36589 151094 20% /boot /dev/mapper/myvg-mylv 8125880 36852 7669600 1% /mnt [root@server2 mnt]# pwd #當前在mylv的分區中 /mnt [root@server2 mnt]# cp -rf /etc/{grub.conf,sysconfig} ./ #復制/etc/sysconfig,/etc/grub.conf到當前目錄(mylv中) [root@server2 mnt]# ls #查看當前分區中的文件 grub.conf lost+found sysconfig [root@server2 mnt]# lvcreate -s -n mylv-snap -L 8G /dev/myvg/mylv #創建mylv的快照卷mylv-snap Logical volume "mylv-snap" created. [root@server2 mnt]# lvs #查看lv的信息,出現了mylv-snap LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg owi-aos--- 8.00g mylv-snap myvg swi-a-s--- 8.00g mylv 0.00 [root@server2 mnt]# mkdir /mylv-snap #創建mylv-snap目錄 [root@server2 mnt]# mount /dev/myvg/mylv-snap /mylv-snap/ #將mylv-snap掛載到/mylv-snap [root@server2 mnt]# ll /mylv-snap/ #查看分區中的文件,和/mnt下一樣 total 20 lrwxrwxrwx. 1 root root 22 Jan 4 16:01 grub.conf -> ../boot/grub/grub.conf drwx------. 2 root root 16384 Jan 4 15:44 lost+found drwxr-xr-x. 7 root root 4096 Jan 4 16:02 sysconfig [root@server2 mnt]# cp /etc/rc.d/init.d/functions ./ #復制/etc/rc.d/init.d/functions到/mnt目錄中 [root@server2 mnt]# ls #查看當前目錄(/mnt,即是mylv)中的文件 functions grub.conf lost+found sysconfig [root@server2 mnt]# ll /mylv-snap/ #查看/mylv-snap(即是mylv-snap)中的文件,發現并沒有functions total 20 lrwxrwxrwx. 1 root root 22 Jan 4 16:01 grub.conf -> ../boot/grub/grub.conf drwx------. 2 root root 16384 Jan 4 15:44 lost+found drwxr-xr-x. 7 root root 4096 Jan 4 16:02 sysconfig
總結
LVM雖然很好用,但是因為在硬件上使用純軟件方式進行管理,所以誤刪除數據恢復更加困難,LVM縮減分區大小風險較大,況且現在btrfs已經很穩定了,功能更加強大,并不推薦使用LVM對磁盤分區進行管理。
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/12339
16歲文章已經寫成這樣,讓我等汗顏呀~
@stanley:過獎,時間多而已。