大綱node
1、簡介bash
2、LVM 模塊app
3、具體操做ide
對添加的硬盤進行分區(fdisk /dev/[hs]d[a-z])ui
對建立的分區建立物理卷(pvcreate)spa
給邏輯卷建立邏輯容器(卷組)命令行
在卷組建立大小不一樣的邏輯卷(lvcreate)orm
給以存在的卷組擴大容量blog
實如今線擴大LVM容量ip
實現縮減LVM容量(不支持在線縮減)
減少卷組容量
利用給LVM建立快照,並完成備份並還原數據
1、簡介
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,於1998年發佈到Linux社區中,它容許你在Linux系統上用簡單的命令行管理一個完整的邏輯卷管理環境。
2、LVM 模塊
Physical volume (PV)、Volume group (VG)、Logical volume(LV)、 Physical extent (PE),下面咱們用一個簡單的圖來講明下物理卷、卷組、邏輯卷他們之間的關係(此圖只是我的理解,僅供參考)
簡而言之:
邏輯卷的建立,就是將多塊硬盤建立物理卷,而將這些物理卷以邏輯的形式總成一個容器,而後從這個容器裏面建立大小不一樣的分區文件,而這個容器就是所謂的邏輯卷,而從這個容器裏建立大小不一樣的分區文件,這個分區文件就叫作邏輯卷。三、具體操做
1. 分區
[root@ha-node2 ~]# 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: 0x000b08b2 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 281 2048000 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 281 2611 18717696 83 Linux Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 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: 0x00097443 Device Boot Start End Blocks Id System /dev/sdb1 1 1045 8393931 83 Linux /dev/sdb2 1046 1305 2088450 83 Linux 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 #使用fdisk -l對/dev/sdc進行分區後的結果 [root@ha-node2 ~]# fdisk -l |grep sdc Disk /dev/sdc: 21.5 GB, 21474836480 bytes /dev/sdc1 1 654 5253223+ 8e Linux LVM /dev/sdc2 655 1308 5253255 8e Linux LVM /dev/sdc3 1309 2610 10458315 8e Linux LVM [root@ha-node2 ~]# partprobe /dev/sdc #通知內核從新讀取硬盤信息2. 將物理分區與硬盤建立爲物理卷(pvcreate)
[root@ha-node2 ~]# pvcreate /dev/sdc[1-3] #將/dev/sdc[1-3所有作成pv] Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created Physical volume "/dev/sdc3" successfully created [root@ha-node2 ~]# pvs #查看建立的pv PV VG Fmt Attr PSize PFree /dev/sdc1 lvm2 a-- 5.01g 5.01g /dev/sdc2 lvm2 a-- 5.01g 5.01g /dev/sdc3 lvm2 a-- 9.97g 9.97g #這裏顯示的是每一個pv的大小3. 將物理卷(pv)建立爲卷組(vgcreate),名爲myvg
[root@ha-node2 ~]# vgcreate myvg /dev/sdc[1-3] #將/dev/sdc[1-3建立成vg] Volume group "myvg" successfully created [root@ha-node2 ~]# vgs #查看vg信息 VG #PV #LV #SN Attr VSize VFree myvg 3 0 0 wz--n- 19.99g 19.99g #顯示myvg一共有19.99G的空間 [root@ha-node2 ~]# vgdisplay --- Volume group --- VG Name myvg #卷組名 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 19.99 GiB PE Size 4.00 MiB #物理盤的基本單位:默認4MB Total PE 5117 Alloc PE / Size 0 / 0 Free PE / Size 5117 / 19.99 GiB VG UUID bbGOB5-i8vP-s1AV-twoR-D0XU-UWeF-A6UNMz4. 在卷組裏建立邏輯卷並格式化、掛載使用
[root@ha-node2 ~]# lvcreate -L 2G -n mylv1 myvg #在卷組myvg中建立一個大小爲2G,名爲mylv1的邏輯卷 Logical volume "mylv1" created [root@ha-node2 ~]# lvs #查看邏輯卷 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv1 myvg -wi-a---- 2.00g [root@ha-node2 ~]# mke2fs -j /dev/myvg/mylv1 #格式化新建立的邏輯卷mylv1 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 32 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@ha-node2 ~]# mkdir /mydata #建立掛載目錄 [root@ha-node2 ~]# mount /dev/myvg/mylv1 /mydata/ #將mylv1掛載到/mydata下 [root@ha-node2 ~]# mount #查看掛載結果 /dev/sda3 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) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/myvg-mylv1 on /mydata type ext3 (rw) [root@ha-node2 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 2.0G 68M 1.9G 4% /mydata #查看mylv1的容量5. 發現卷組空間不夠,咱們擴大卷組空間
[root@ha-node2 ~]# pvcreate /dev/sdb1 #將sdb作成pv Physical volume "/dev/sdb1" successfully created [root@ha-node2 ~]# pvs #查看pv信息 PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 10.00g 10.00g /dev/sdc1 myvg lvm2 a-- 5.01g 3.01g /dev/sdc2 myvg lvm2 a-- 5.01g 5.01g /dev/sdc3 myvg lvm2 a-- 9.97g 9.97g [root@ha-node2 ~]# vgextend myvg /dev/sdb1 #對卷組myvg進行擴展 Volume group "myvg" successfully extended [root@ha-node2 ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 4 1 0 wz--n- 29.98g 27.98g #這裏咱們能看到myvg的大小從原來的19.99變成27.98G了6. 擴展邏輯卷 (支持在線擴展)
#將/dev/myvg/mylv1 擴展到4G,而且要求數據能夠正常訪問 首先咱們在/mydata下建立一個文件test.txt [root@ha-node2 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 2.0G 68M 1.9G 4% /mydata [root@ha-node2 ~]# touch /mydata/test.txt [root@ha-node2 ~]# ls /mydata/ lost+found test.txt [root@ha-node2 ~]# lvextend -L +2G /dev/myvg/mylv1 #將邏輯卷mylv1擴展到4G Extending logical volume mylv1 to 4.00 GiB Logical volume mylv1 successfully resized [root@ha-node2 ~]# resize2fs -p /dev/myvg/mylv1 #經過resize2fs擴展容量 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv1 is mounted on /mydata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv1 to 1048576 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 1048576 blocks long. [root@ha-node2 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv1 myvg -wi-ao--- 4.00g #這裏能看到邏輯卷mylv1已經成功的擴展到了4G [root@ha-node2 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 4.0G 69M 3.7G 2% /mydata #成功增長了2G [root@ha-node2 ~]# ls /mydata/ #以前建立的文件還存在 lost+found test.txt
7. 縮減邏輯卷
查看邏輯卷使用空間情況
不能在線縮減,得先卸載
確保縮減後的空間大小依然能存儲原有的全部數據
在縮減以前應該先強行檢查文件,以確保文件系統處於一至性狀態
#將/dev/myvg/mylv1 縮減到1G,而且要求數據能夠正常訪問 (因此咱們就按上面的提示在操做) [root@ha-node2 ~]# df -h #查看已使用空間 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 4.0G 69M 3.7G 2% /mydata #這裏顯示只使用了69M [root@ha-node2 ~]# umount /mydata/ #卸載分區 [root@ha-node2 ~]# e2fsck -f /dev/myvg/mylv1 #強制檢查文件系統 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/mylv1: 12/262144 files (0.0% non-contiguous), 33887/1048576 blocks [root@ha-node2 ~]# resize2fs /dev/myvg/mylv1 1G #將邏輯捲縮小到1G,縮減邏輯大小 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv1 to 262144 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 262144 blocks long. [root@ha-node2 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv1 myvg -wi-a---- 4.00g #這裏仍是4G [root@ha-node2 ~]# lvreduce -L 1G /dev/myvg/mylv1 #縮減物理邊界大小到1G WARNING: Reducing active logical volume to 1.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1? [y/n]: y Reducing logical volume mylv1 to 1.00 GiB Logical volume mylv1 successfully resized [root@ha-node2 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mylv1 myvg -wi-a---- 1.00g #已成功縮減邏輯卷mylv1大小到1G [root@ha-node2 ~]# mount /dev/myvg/mylv1 /mydata/ [root@ha-node2 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 1008M 67M 891M 7% /mydata [root@ha-node2 ~]# ls /mydata/ lost+found test.txt8. 縮減磁盤空間
發現物理磁盤空間使用不足,將其中一塊硬盤或分區拿掉
pvmove /dev/sdc1 #將/dev/sdc1上存儲的數據移到其它物理卷中
vgreduce myvg /dev/sdc1 #將/dev/sdc1從myvg卷組中移除
pvremove /dev/sdc1 #將/dev/sdc1從物理捲上移除
[root@ha-node2 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 myvg lvm2 a-- 9.99g 9.99g #這裏咱們將/dev/sdb1拿掉 /dev/sdc1 myvg lvm2 a-- 5.01g 4.01g /dev/sdc2 myvg lvm2 a-- 5.01g 5.01g /dev/sdc3 myvg lvm2 a-- 9.97g 9.97g [root@ha-node2 ~]# pvmove /dev/sdb1 #將/dev/sdb1上的數據移到其餘的pv中 No data to move for myvg [root@ha-node2 ~]# vgreduce myvg /dev/sdb1 #將/dev/sdb1從myvg中移除 Removed "/dev/sdb1" from volume group "myvg" [root@ha-node2 ~]# pvremove /dev/sdb1 #將/dev/sdb1從物理卷中移除 Labels on physical volume "/dev/sdb1" successfully wiped [root@ha-node2 ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 19.99g 18.99g #最後的結果是myvg只有18.99G [root@ha-node2 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdc1 myvg lvm2 a-- 5.01g 4.01g /dev/sdc2 myvg lvm2 a-- 5.01g 5.01g /dev/sdc3 myvg lvm2 a-- 9.97g 9.97g [root@ha-node2 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 2.6G 14G 16% / tmpfs 495M 0 495M 0% /dev/shm /dev/sda1 190M 48M 133M 27% /boot /dev/mapper/myvg-mylv1 1008M 67M 891M 7% /mydata [root@ha-node2 ~]# ls /mydata/ lost+found test.txt9. 實現快照,進行備份還原
在/mnt/lvm目錄上,咱們將原始的目錄文件進行快照,而後將/mydata目錄中的內容清空,並進行還原
[root@ha-node2 ~]# cat /mydata/test.txt lvm [root@ha-node2 ~]# lvcreate -L 30M -n backup -s -p r /dev/myvg/mylv1 #-L 快照大小 –n:快照名稱 –p 權限只讀 –s 建立快照 Rounding up size to full physical extent 32.00 MiB Logical volume "backup" created [root@ha-node2 ~]# ll /mydata/ total 20 drwx------ 2 root root 16384 Jun 23 15:41 lost+found -rw-r--r-- 1 root root 4 Jun 23 16:12 test.txt [root@ha-node2 ~]# mkdir /tmp/backup #建立掛載目錄 [root@ha-node2 ~]# mount /dev/myvg/backup /tmp/backup/ #掛載 mount: block device /dev/mapper/myvg-backup is write-protected, mounting read-only [root@ha-node2 ~]# cd /tmp/backup/ [root@ha-node2 backup]# ls lost+found test.txt [root@ha-node2 backup]# mkdir /tmp/lvmbackup #建立備份目錄 [root@ha-node2 backup]# tar zcf /tmp/lvmbackup/test.tar.gz test.txt #將text.txt文件打包 [root@ha-node2 backup]# ll /tmp/lvmbackup/ #查看備份 total 4 -rw-r--r-- 1 root root 124 Jun 23 16:17 test.tar.gz [root@ha-node2 backup]# rm -rf /mydata/* #刪除/mydata目錄下的全部文件 [root@ha-node2 backup]# ls /mydata/ [root@ha-node2 backup]# tar xf /tmp/lvmbackup/test.tar.gz -C /mydata/ [root@ha-node2 backup]# ls /mydata/ test.txt