LVM 詳解

大綱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),下面咱們用一個簡單的圖來講明下物理卷、卷組、邏輯卷他們之間的關係(此圖只是我的理解,僅供參考)

wKiom1WJC5vwr77rAAGFaotkTls048.jpg

簡而言之:   
邏輯卷的建立,就是將多塊硬盤建立物理卷,而將這些物理卷以邏輯的形式總成一個容器,而後從這個容器裏面建立大小不一樣的分區文件,而這個容器就是所謂的邏輯卷,而從這個容器裏建立大小不一樣的分區文件,這個分區文件就叫作邏輯卷。

、具體操做

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-A6UNMz

4. 在卷組裏建立邏輯卷並格式化、掛載使用

[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.txt

8. 縮減磁盤空間

發現物理磁盤空間使用不足,將其中一塊硬盤或分區拿掉

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.txt

9. 實現快照,進行備份還原

在/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
相關文章
相關標籤/搜索