Linux之lvm管理

一、簡介

  LVM,即Logical Volume Manager(邏輯卷管理)的縮寫,是Linux環境下對磁盤分區進行管理的一種機制。


二、版本

  LVM1:最初在1998年發佈,在Linux內核2.4版本上實現。

   LVM2:LVM1的升級版,在Linux內核2.6版本上可用。

[root@wsh mysh]# uname -r  #查看內核版本
2.6.32-431.el6.x86_64   
[root@wsh mysh]# rpm -qa | grep lvm    #查看是否安裝lvm
lvm2-2.02.100-8.el6.x86_64


三、LVM的模型:

wKiom1N5y1uic2L1AAFMzEQPblA165.jpg

由上圖可知,lv的創建過程:

磁盤上的若干分區(/dev/[sh]d[a-z]#)創建爲物理卷(physical volume),將多個物理卷組合成卷組(volume group),在卷組上創建若干邏輯卷(logical volume)。


四、lvm2的功能:

   1.便捷的調整文件系統的大小;

   2.支持快照


五、具體操作

  1.查看系統分區

[root@wsh mysh]# fdisk -l    #查看當前系統的分區情況
Disk /dev/sda: 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: 0x0005e677
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      102400   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              13        6387    51200000   83  Linux
/dev/sda3            6387        6910     4194304   82  Linux swap / Solaris
#下面我們以/dev/sdb和/dev/sdc這兩塊磁盤爲例進行演示:
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: 0x896b252c
   Device Boot      Start         End      Blocks   Id  System

Disk /dev/sdc: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 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: 0xf7ef9915
   Device Boot      Start         End      Blocks   Id  System


   2.創建分區:

[root@wsh mysh]# fdisk /dev/sdb    #在/dev/sdb上創建分區
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: 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: 0x896b252c
   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    #選擇1號分區
First cylinder (1-2610, default 1):     #默認從第1個柱面開始
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G    #創建5G大小的分區
Command (m for help): n    #再創建分區
Command action
   e   extended
   p   primary partition (1-4)
p    #創建主分區
Partition number (1-4): 2    #選擇2號分區
First cylinder (655-2610, default 655):     #默認從655柱面開始
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +5G    #創建5G大小的分區
Command (m for help): t    #修改分區的systemID
Partition number (1-4): 1    #選擇修改1號分區的systemID
Hex code (type L to list codes): l    #小寫的L查看對應的格式的systemID
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris       
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx        
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data   
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility  
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt        
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access    
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O       
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor     
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs       
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT           
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor     
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor     
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary 
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS   
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep       
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT           
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e    #選擇Linux LVM對應的systemID
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): p
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: 0x896b252c
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  8e  Linux LVM
/dev/sdb2             655        1308     5253255   8e  Linux LVM
Command (m for help): w    #保存分區
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

   

[root@wsh mysh]# fdisk /dev/sdc
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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +5G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdc: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 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: 0xf7ef9915
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         654     5253223+  8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


   3.讓內核重新探測分區信息

[root@wsh mysh]# partx -a /dev/sdb    #讓內和重新探測系統分區信息
BLKPG: Device or resource busy    #會出現報錯信息
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
[root@wsh mysh]# partx -a /dev/sdc
BLKPG: Device or resource busy
error adding partition 1
[root@wsh mysh]# cat /proc/partitions     #查看內核識別到的分區
major minor  #blocks  name   
   8        0  125829120 sda
   8        1     102400 sda1
   8        2   51200000 sda2
   8        3    4194304 sda3
   8       16   20971520 sdb
   8       17    5253223 sdb1    #可以看出/dev/sdb{1,2}已經被識別
   8       18    5253255 sdb2
   8       32   52428800 sdc
   8       33    5253223 sdc1    #/dev/sdc也被識別


   4.創建pv:

[root@wsh mysh]# pvcreate /dev/sd{b,c}1    #pvcreate命令將此兩個分區創建爲pv
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
[root@wsh mysh]# pvs    #顯示pv
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 a--  5.01g 5.01g
  /dev/sdc1       lvm2 a--  5.01g 5.01g  
 
 [root@wsh ~]# pvdisplay   #pvdisplay可以顯示所有pv的詳細信息
  "/dev/sdb1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               4cAb4A-pt3Q-ffxt-AFsX-fzPZ-ieqe-0PW3Ja
   
  "/dev/sdc1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ZqkCHt-fcxy-2eJa-uEcu-KY62-Ztpe-K0H1j1
  
  [root@wsh ~]# pvdisplay /dev/sdb1    #pvdisplay /path/to/pv可以顯示指定pv的詳細信息
  "/dev/sdb1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               4cAb4A-pt3Q-ffxt-AFsX-fzPZ-ieqe-0PW3Ja

    5.創建卷組VG

[root@wsh ~]# vgcreate myvg /dev/sd{b,c}1    #用vgcreate創建名爲myvg的卷組,並將/dev/sdb1,/dev/sdc1加入此卷組
  Volume group "myvg" successfully created
[root@wsh ~]# vgs    #vgs查看vg的簡要信息
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   0   0 wz--n- 10.02g 10.02g    #兩個5G的PV創建爲一個10G的VG
[root@wsh ~]# vgdisplay     #查看全部vg的詳細信息,vgdisplay VG_NAME可以查看某個vg的詳細信息
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               10.02 GiB
  PE Size               4.00 MiB    #在使用vgcreate創建vg時可以使用-s PE選項指定PE的大小,默認爲4MB。當後面創建LV時,其大小肯定爲PE的整數倍。
  Total PE              2564
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2564 / 10.02 GiB
  VG UUID               BlbIst-Nkwf-Ipu4-TZFr-0U8L-jfNz-wcLlP

    6.創建邏輯卷LV

[root@wsh ~]# lvcreate -L 7G -n lv1 myvg    #創建大小爲7G,名爲lv1的LV,也可以-l指定PE的個數
  Logical volume "lv1" created    #顯示簡要的LV信息
[root@wsh ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-a----- 7.00g                                             
[root@wsh ~]# lvdisplay     #顯示全部的LV詳細信息
  --- Logical volume ---
  LV Path                /dev/myvg/lv1
  LV Name                lv1
  VG Name                myvg
  LV UUID                cf3Y8v-PZES-BHal-mLen-EkC7-zAXN-qsMXs9
  LV Write Access        read/write
  LV Creation host, time wsh.example.com, 2014-05-19 21:16:43 +0800
  LV Status              available
  # open                 0
  LV Size                7.00 GiB
  Current LE             1792
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

    7.邏輯卷設備文件路徑:

[root@wsh ~]# ls /dev/mapper/myvg-lv1     #/dev/mapper/VG_NAME-lv_name
/dev/mapper/myvg-lv1
[root@wsh ~]# ls /dev/myvg/lv1     #/dev/VG_NAME/lv_name
/dev/myvg/lv1


    8.創建文件系統

[root@wsh ~]# mke2fs -t ext4 /dev/mapper/myvg-lv1 #必須使用LV的設備文件路徑,而選其一即可
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
458752 inodes, 1835008 blocks
91750 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1879048192
56 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 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

    9.掛載文件系統

[root@wsh ~]# mount /dev/mapper/myvg-lv1 /mnt/    #掛載至/mnt
[root@wsh ~]# df -lh    #查看lv1大小爲7G
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              49G  3.6G   43G   8% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1              97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1  6.9G  144M  6.4G   3% /mnt

    10.擴展lv1的大小:

[root@wsh ~]# vgs    #查看VG還有3G未使用
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   2   1   0 wz--n- 10.02g 3.02g
[root@wsh ~]# lvextend -L 10G /dev/mapper/myvg-lv1 #將lv1的物理邊界擴展到10G
  Extending logical volume lv1 to 10.00 GiB
  Logical volume lv1 successfully resized
[root@wsh ~]# lvs    #lv1的物理邊界爲10G
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-ao---- 10.00g                                             
[root@wsh ~]# df -lh    #此時,lv1的邏輯邊界依然爲7G
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              49G  3.6G   43G   8% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1              97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1  6.9G  144M  6.4G   3% /mnt
[root@wsh ~]# umount /dev/mapper/myvg-lv1 #卸載掛載的lv1
[root@wsh ~]# e2fsck -f /dev/mapper/myvg-lv1  #強行檢測lv1文件系統
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-lv1: 11/458752 files (0.0% non-contiguous), 65599/1835008 blocks
[root@wsh ~]# resize2fs /dev/mapper/myvg-lv1    #使用resize2fs將lv1的邏輯邊界擴展到10G,如果沒有指定擴展到多大,則其邏輯邊界自動適應其物理邊界
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-lv1 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/myvg-lv1 is now 2621440 blocks long.

[root@wsh ~]# mount /dev/mapper/myvg-lv1 /mnt/    #掛載
[root@wsh ~]# df -lh    #查看其大小已爲10G
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              49G  3.6G   43G   8% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1              97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1  9.9G  144M  9.3G   2% /mnt


    11.擴展VG大小,並擴展LV大小:

#由於VG的空間已被全部佔用,如果還需擴展LV的大小,就需要創建其他PV,並將其加入VG,擴展VG,再擴展LV的物理邊界,進而擴展LV的邏輯邊界:
[root@wsh ~]# pvcreate /dev/sdb2    #將/dev/sdb2創建爲PV
  Physical volume "/dev/sdb2" successfully created
[root@wsh ~]# pvs    #查看PV
  PV         VG   Fmt  Attr PSize PFree 
  /dev/sdb1  myvg lvm2 a--  5.01g     0 
  /dev/sdb2       lvm2 a--  5.01g  5.01g
  /dev/sdc1  myvg lvm2 a--  5.01g 16.00m
[root@wsh ~]# vgextend myvg /dev/sdb2    #將/dev/sdb2加入VG
  Volume group "myvg" successfully extended
[root@wsh ~]# vgs    #查看VG,增加了5G
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   3   1   0 wz--n- 15.02g 5.02g
[root@wsh ~]# umount /dev/mapper/myvg-lv1 #卸載lv1,爲以後擴展作準備
[root@wsh ~]# lvextend -L 15G /dev/mapper/myvg-lv1    #擴展lv1的物理邊界
  Extending logical volume lv1 to 15.00 GiB
  Logical volume lv1 successfully resized
[root@wsh ~]# lvs    #查看LV,物理邊界已擴展至15G
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-a----- 15.00g                                             
[root@wsh ~]# e2fsck -f /dev/mapper/myvg-lv1 #強行檢測lv1的文件系統
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-lv1: 11/655360 files (0.0% non-contiguous), 77935/2621440 blocks
[root@wsh ~]# resize2fs /dev/mapper/myvg-lv1 #上面檢測無問題,擴展其邏輯邊界至物理邊界
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-lv1 to 3932160 (4k) blocks.
The filesystem on /dev/mapper/myvg-lv1 is now 3932160 blocks long.

[root@wsh ~]# mount /dev/mapper/myvg-lv1 /mnt/    #掛載
[root@wsh ~]# fd -lh    #查看其大小,已擴展爲15G
-bash: fd: command not found
[root@wsh ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              49G  3.6G   43G   8% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1              97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1   15G  146M   14G   2% /mnt


    12.縮減LV大小

#縮減LV的前提:至少能夠容納原來的數據
#步驟:
#    1.縮減LV的邏輯邊界
#    2.縮減LV的物理邊界
[root@wsh ~]# cp /etc/fstab /mnt/    #複製fstab至/mnt下
[root@wsh ~]# ls /mnt/  #查看/mnt下文件
fstab  lost+found
[root@wsh ~]# umount /dev/mapper/myvg-lv1   #卸載/lv1 
[root@wsh ~]# e2fsck -f /dev/mapper/myvg-lv1    #強行檢測lv1文件系統
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-lv1: 12/983040 files (0.0% non-contiguous), 98945/3932160 blocks
[root@wsh ~]# resize2fs /dev/mapper/myvg-lv1 10G    #檢測無問題,將lv1邏輯邊界縮減至10G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-lv1 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/myvg-lv1 is now 2621440 blocks long.

[root@wsh ~]# mount /dev/mapper/myvg-lv1 /mnt/    #掛載lv1,大小爲10G
[root@wsh ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              49G  3.6G   43G   8% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1              97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1  9.9G  144M  9.3G   2% /mnt
[root@wsh ~]# lvs    #查看lv1物理邊界,依然爲15G
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-ao---- 15.00g                                             
[root@wsh ~]# lvreduce -L 10G /dev/mapper/myvg-lv1 #縮減lv1的物理邊界至10G
  WARNING: Reducing active and open logical volume to 10.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y    #提示是否確認縮減
  Reducing logical volume lv1 to 10.00 GiB
  Logical volume lv1 successfully resized
[root@wsh ~]# lvs    #lv1物理邊界已縮減至10G,至此縮減完成
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1  myvg -wi-ao---- 10.00g                                             
[root@wsh ~]# cat /mnt/fstab #查看fstab文件正常

#
# /etc/fstab
# Created by anaconda on Wed Apr 30 18:22:17 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6229f8ea-4270-43c5-b5cf-0df08f0613e6 /                       ext4    defaults        1 1
UUID=9cded63a-de55-49d5-9bf5-3a023619dc22 /boot                   ext4    defaults        1 2
UUID=97c1673e-18b8-4d3f-b443-14b3074e51f1 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/myvg/lv1		/users			ext4	defaults	0 0

    13.縮減VG

    #    1.確認要移除的pv

    #    2.將該pv中的數據轉移至同組vg的其他pv中

    #    3.從vg中移除該pv,實現vg的縮減

    #下面以移除/dev/sdb2爲例:

[root@wsh ~]# pvs    #查看/dev/sdb2剩餘空間爲0
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  5.01g 5.01g
  /dev/sdb2  myvg lvm2 a--  5.01g    0 
  /dev/sdc1  myvg lvm2 a--  5.01g 4.00m
[root@wsh ~]# pvmove /dev/sdb2    #轉移/dev/sdb2的數據
  /dev/sdb2: Moved: 0.2%
  /dev/sdb2: Moved: 12.8%
  /dev/sdb2: Moved: 25.9%
  /dev/sdb2: Moved: 39.0%
  /dev/sdb2: Moved: 52.0%
  /dev/sdb2: Moved: 65.6%
  /dev/sdb2: Moved: 78.9%
  /dev/sdb2: Moved: 91.6%
  /dev/sdb2: Moved: 100.0%
[root@wsh ~]# pvs    #查看數據已全部轉移
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  5.01g    0 
  /dev/sdb2  myvg lvm2 a--  5.01g 5.01g
  /dev/sdc1  myvg lvm2 a--  5.01g 4.00m
[root@wsh ~]# vgs    
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   3   2   1 wz--n- 15.02g 5.01g
[root@wsh ~]# vgreduce myvg /dev/sdb2    #移除/dev/sdb2
  Removed "/dev/sdb2" from volume group "myvg"
[root@wsh ~]# vgs    #VG已成功縮減
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   2   2   1 wz--n- 10.02g 4.00m
[root@wsh ~]# mount /dev/mapper/myvg-lv1 /mnt/
[root@wsh ~]# cat /mnt/fstab #文件訪問正常
#
# /etc/fstab
# Created by anaconda on Wed Apr 30 18:22:17 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6229f8ea-4270-43c5-b5cf-0df08f0613e6 /                       ext4    defaults        1 1
UUID=9cded63a-de55-49d5-9bf5-3a023619dc22 /boot                   ext4    defaults        1 2
UUID=97c1673e-18b8-4d3f-b443-14b3074e51f1 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/myvg/lv1		/users			ext4	defaults	0 0


    14.刪除不用的PV

[root@wsh ~]# pvs    #查看所有pv,/dev/sdb2依然存在
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  5.01g    0 
  /dev/sdb2       lvm2 a--  5.01g 5.01g
  /dev/sdc1  myvg lvm2 a--  5.01g 4.00m
[root@wsh ~]# pvremove /dev/sdb2    #刪除該pv
  Labels on physical volume "/dev/sdb2" successfully wiped
[root@wsh ~]# pvs    #查看/dev/sdb2已從PV中刪除
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  5.01g    0 
  /dev/sdc1  myvg lvm2 a--  5.01g 4.00m


    15.創建快照卷

#前提:
#    1.快照卷和原卷在同一卷組,要確認創建的快照卷大小不能大於卷組的剩餘空間
#    2.生命週期爲整個數據的時長,在這段時間內,數據的增量不能超過快照卷的大小
#    3.快照卷應該是隻讀的
[root@wsh ~]# lvcreate -L 10M -s -p r -n lv1-snap /dev/mapper/myvg-lv1 
                      #-s指定創建快照卷,-p r指定快照卷爲只讀,-n指定快照卷名稱
  Rounding up size to full physical extent 12.00 MiB
  Logical volume "lv1-snap" created
[root@wsh ~]# lvs    #查看LV
  LV       VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv1      myvg owi-aos--- 10.00g                                             
  lv1-snap myvg sri-a-s--- 12.00m      lv1      0.10                           
[root@wsh ~]# mount -o ro /dev/myvg/lv1-snap /media/
[root@wsh ~]# df -lh    #查看掛載的文件系統使用信息
Filesystem                  Size  Used Avail Use% Mounted on
/dev/sda2                    49G  3.6G   43G   8% /
tmpfs                       495M     0  495M   0% /dev/shm
/dev/sda1                    97M   30M   63M  32% /boot
/dev/mapper/myvg-lv1        9.9G  144M  9.3G   2% /mnt
/dev/mapper/myvg-lv1--snap  9.9G  144M  9.3G   2% /media#創建的10M的快照卷顯示的大小和原卷大小一樣
[root@wsh ~]# ls /media/    #查看快照卷有哪些文件
fstab  lost+found
[root@wsh ~]# ls /mnt/    #查看原卷有哪些文件
fstab  lost+found
[root@wsh ~]# cp /etc/inittab /mnt/    #複製文件至原卷
[root@wsh ~]# ls /mnt/    #查看原卷文件
fstab  inittab  lost+found
[root@wsh ~]# ls /media/    #查看快照卷文件
fstab  lost+found
#snapshot簡述:
#   1.snapshot僅對LVM有效
#    2.用於保證數據狀態的一致性,進而對數據進行備份
#    3.簡單原理描述:原卷中將要改變的數據,在改變之前複製一份到快照卷,未改變的數據依然存#放在原卷,這樣,通過快照卷可以訪問改變前的數據,而且如果通過快照訪問未改變的數據時,是通#過重定向到原卷訪問的(這樣通過snapshot就保持了數據改變前的狀態的一致性);通過原卷只能訪#問改變後的數據和未改變的數據。

 #更過詳細原理,請參照:http://blog.chinaunix.net/uid-8650524-id-6166.html


    16.歸檔備份lv1數據

#我們先移除lv1-snap,然後演示將快照卷的數據歸檔壓縮備份
[root@wsh /]# umount /dev/myvg/lv1-snap #卸載快照卷
[root@wsh /]# lvremove /dev/myvg/lv1-snap #lvremove命令刪除快照卷
Do you really want to remove active logical volume lv1-snap? [y/n]: y
  Logical volume "lv1-snap" successfully removed
[root@wsh /]# cp /etc/{fstab,inittab} /mnt/  #複製文件至原卷                             
[root@wsh /]# lvcreate -L 10M -s -p r -n lv1-snap /dev/myvg/lv1  #對原卷創建快照
  Rounding up size to full physical extent 12.00 MiB
  Logical volume "lv1-snap" created
[root@wsh /]# mount /dev/myvg/lv1-snap /media/   #掛載快照卷至/media
mount: block device /dev/mapper/myvg-lv1--snap is write-protected, mounting read-only
[root@wsh /]# cd /media/
[root@wsh media]# ls
fstab  inittab  lost+found
[root@wsh media]# tar -Jcf /tmp/backup.tar.xz fstab inittab #歸檔壓縮數據做備份
[root@wsh media]# ls /tmp/ | grep "backup.tar.xz"  #確認備份數據
backup.tar.xz
[root@wsh media]# tar -tf /tmp/backup.tar.xz  #備份內容正確
fstab
inittab

#快照卷中數據備份完成之後,快照卷就可以用lvremove命令刪除了。

    17.刪除不用的lv,vg及pv

[root@wsh /]# lvremove /dev/myvg/lv1 #刪除lv
Do you really want to remove active logical volume lv1? [y/n]: y
  Logical volume "lv1" successfully removed
[root@wsh /]# lvs
[root@wsh /]# vgremove myvg    #刪除vg
  Volume group "myvg" successfully removed
[root@wsh /]# vgs
  No volume groups found
[root@wsh /]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 a--  5.01g 5.01g
  /dev/sdc1       lvm2 a--  5.01g 5.01g
[root@wsh /]# pvremove /dev/sdb1    #刪除pv
  Labels on physical volume "/dev/sdb1" successfully wiped
[root@wsh /]# pvremove /dev/sdc1    #刪除pv
  Labels on physical volume "/dev/sdc1" successfully wiped


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章