内容:(会在后期继续整理扩充该部分内容;欢迎探讨)

 1. LVM基本创建及管理

 2. LVM快照

 3. LVM与RAID的结合使用:基于RAID的LVM


LVM创建:


  描述:
  LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.
  通过创建LVM,我们可以更轻松的管理磁盘分区,将若干个不同大小的不同形式的磁盘整合为一个整块的卷组,然后在卷组上随意的创建逻辑卷,既避免了大量不同规格硬盘的管理难题,也使逻辑卷容量的扩充缩减不再受限于磁盘规格;并且LVM的snapshot(快照)功能给数据的物理备份提供了便捷可靠的方式;

创建LVM过程;(如图)
1. 在物理设备上创建物理分区,每个物理分区称为一个PE
2. 使用fdisk工具创建物理分区卷标(修改为8e),形成PV(Physical Volume 物理卷)
3. 使用vgcreate 将多个PV添加到一个VG(Volume Group 卷组)中,此时VG成为一个大磁盘;
4. 在VG大磁盘上划分LV(Logical Volume 逻辑卷),将逻辑卷格式化后即可挂载使用; 

 

 

各阶段可用的命令工具:(详细选项信息请be a man)

 

阶段

显示信息

创建

删除组员

扩大大小

缩减大小

PV

pvdisplay

pvcreat

pvremove

-----

-----

VG

vgdisplay

vgcreat

vgremove

vgextend

vgreduce

LV

lvdispaly

lvcreat

lvremove

lvextend

lvreduce

 

创建示例
1. 创建PV

  1.    Device Boot      Start         End      Blocks   Id  System 
  2. /dev/sdb1               1         609     4891761   8e  Linux LVM 
  3. /dev/sdc1               1         609     4891761   8e  Linux LVM 
  4. /dev/sdd1               1         609     4891761   8e  Linux LVM 
  5.  
  6. [root@bogon ~]# pvcreate /dev/sd[bcd]1 
  7.   Physical volume "/dev/sdb1" successfully created 
  8.   Physical volume "/dev/sdc1" successfully created 
  9.   Physical volume "/dev/sdd1" successfully created 

 查看PV信息:

  1. [root@bogon ~]# pvdisplay  
  2.   --- Physical volume --- 
  3.   PV Name               /dev/sda2 
  4.   VG Name               vol0 
  5.   PV Size               40.00 GB / not usable 2.61 MB 
  6.   Allocatable           yes  
  7.   PE Size (KByte)       32768 
  8.   Total PE              1280 
  9.   Free PE               281 
  10.   Allocated PE          999 
  11.   PV UUID               GxfWc2-hzKw-tP1E-8cSU-kkqY-z15Z-11Gacd 
  12.     
  13.   "/dev/sdb1" is a new physical volume of "4.67 GB" 
  14.   --- NEW Physical volume --- 
  15.   PV Name               /dev/sdb1 
  16.   VG Name                
  17.   PV Size               4.67 GB 
  18.   Allocatable           NO 
  19.   PE Size (KByte)       0 
  20.   Total PE              0 
  21.   Free PE               0 
  22.   Allocated PE          0 
  23.   PV UUID               1rrc9i-05Om-Wzd6-dM9G-bo08-2oJj-WjRjLg 
  24.     
  25.   "/dev/sdc1" is a new physical volume of "4.67 GB" 
  26.   --- NEW Physical volume --- 
  27.   PV Name               /dev/sdc1 
  28.   VG Name                
  29.   PV Size               4.67 GB 
  30.   Allocatable           NO 
  31.   PE Size (KByte)       0 
  32.   Total PE              0 
  33.   Free PE               0 
  34.   Allocated PE          0 
  35.   PV UUID               RCGft6-l7tj-vuBX-bnds-xbLn-PE32-mCSeE8 
  36.     
  37.   "/dev/sdd1" is a new physical volume of "4.67 GB" 
  38.   --- NEW Physical volume --- 
  39.   PV Name               /dev/sdd1 
  40.   VG Name                
  41.   PV Size               4.67 GB 
  42.   Allocatable           NO 
  43.   PE Size (KByte)       0 
  44.   Total PE              0 
  45.   Free PE               0 
  46.   Allocated PE          0 
  47.   PV UUID               SLiAAp-43zX-6BC8-wVzP-6vQu-uyYF-ugdWbD 

 2. 创建VG

  1. [[root@bogon ~]# vgcreate myvg -s 16M  /dev/sd[bcd]1 
  2.   Volume group "myvg" successfully created 
  3. ##-s 在创建时指定PE块的大小,默认是4M。 

  4. 查看系统上VG状态 
  5. [root@bogon ~]# vgdisplay  
  6.   --- Volume group --- 
  7.   VG Name               myvg 
  8.   System ID              
  9.   Format                lvm2 
  10.   Metadata Areas        3 
  11.   Metadata Sequence No  1 
  12.   VG Access             read/write 
  13.   VG Status             resizable 
  14.   MAX LV                0 
  15.   Cur LV                0 
  16.   Open LV               0 
  17.   Max PV                0 
  18.   Cur PV                3 
  19.   Act PV                3 
  20.   VG Size               13.97 GB    ##VG总大小 
  21.   PE Size               16.00 MB    ##默认的PE块大小是4M 
  22.   Total PE              894         ##总PE块数 
  23.   Alloc PE / Size       0 / 0       ##已经使用的PE块数目 
  24.   Free  PE / Size       894 / 13.97 GB  ##可用的PE数目及磁盘大小 
  25.   VG UUID               RJC6Z1-N2Jx-2Zjz-26m6-LLoB-PcWQ-FXx3lV 
  26.  

 3. 在VG中划分出LV:

  1. [root@bogon ~]# lvcreate -L 256M -n data1 myvg 
  2.   Logical volume "data1" created 
  3. ## -L指定LV大小 
  4. ## -n 指定lv卷名称 
  5.  
  6. [root@bogon ~]# lvcreate -l 20  -n test myvg 
  7.   Logical volume "test" created 
  8. ## -l 指定LV大小占用多少个PE块;上面大小为:20*16M=320M 
  9.  
  10. [root@bogon ~]# lvdisplay  
  11.   --- Logical volume --- 
  12.   LV Name                /dev/myvg/data 
  13.   VG Name                myvg 
  14.   LV UUID                d0SYy1-DQ9T-Sj0R-uPeD-xn0z-raDU-g9lLeK 
  15.   LV Write Access        read/write 
  16.   LV Status              available 
  17.   # open                 0 
  18.   LV Size                256.00 MB 
  19.   Current LE             16 
  20.   Segments               1 
  21.   Allocation             inherit 
  22.   Read ahead sectors     auto 
  23.   - currently set to     256 
  24.   Block device           253:2 
  25.     
  26.   --- Logical volume --- 
  27.   LV Name                /dev/myvg/test 
  28.   VG Name                myvg 
  29.   LV UUID                os4UiH-5QAG-HqOJ-DoNT-mVeT-oYyy-s1xArV 
  30.   LV Write Access        read/write 
  31.   LV Status              available 
  32.   # open                 0 
  33.   LV Size                320.00 MB 
  34.   Current LE             20 
  35.   Segments               1 
  36.   Allocation             inherit 
  37.   Read ahead sectors     auto 
  38.   - currently set to     256 
  39.   Block device           253:3 
  40.  

 
4. 然后就可以格式化LV,挂载使用:

  1. [root@bogon ~]# mkfs -t ext3 -b 2048 -L DATA /dev/myvg/data 
  2. [root@bogon ~]# mount /dev/myvg/data /data/ 
  3. ## 拷贝进去一些文件,测试后面在线扩展及缩减效果: 
  4. [root@bogon data]# cp /etc/* /data/ 

5. 扩大LV容量:(2.6kernel+ext3filesystem)
  lvextend命令可以增长逻辑卷
  resize2fs可以增长filesystem在线或非在线
  (我的系统内核2.6.18,ext3文件系统,查man文档,现在只有2.6的内核+ext3文件系统才可以在线增容量)
  首先逻辑扩展:

  1. [root@bogon data]# lvextend -L 500M /dev/myvg/data  
  2.   Rounding up size to full physical extent 512.00 MB 
  3.   Extending logical volume data to 512.00 MB 
  4.   Logical volume data successfully resized 
  5. ##-L 500M  :指扩展到500M,系统此时会找最近的柱面进行匹配;    
  6. ##-L +500M :值在原有大小的基础上扩大500M; 
  7. ##-l [+]50 类似上面,但是以Pe块为单位进行扩展; 

 然后文件系统物理扩展:

  1. [root@bogon data]# resize2fs -p /dev/myvg/data  
  2. resize2fs 1.39 (29-May-2006) 
  3. Filesystem at /dev/myvg/data is mounted on /data; on-line resizing required 
  4. Performing an on-line resize of /dev/myvg/data to 262144 (2k) blocks. 
  5. The filesystem on /dev/myvg/data is now 262144 blocks long
  6. ##据上面信息,系统自动识别并进行了在线扩展; 
  7.  
  8. 查看状态: 
  9. [root@bogon ~]# lvdisplay  
  10.   --- Logical volume --- 
  11.   LV Name                /dev/myvg/data 
  12.   VG Name                myvg 
  13.   LV UUID                d0SYy1-DQ9T-Sj0R-uPeD-xn0z-raDU-g9lLeK 
  14.   LV Write Access        read/write 
  15.   LV Status              available 
  16.   # open                 1 
  17.   LV Size                512.00 MB 
  18.   Current LE             32 
  19.   Segments               1 
  20.   Allocation             inherit 
  21.   Read ahead sectors     auto 
  22.   - currently set to     256 
  23.   Block device           253:2 
  24. ##此时查看挂载目录,文件应该完好; 

 6. 缩减LV容量:
  缩减容量是一件危险的操作;缩减必须在离线状态下执行;并且必须先强制检查文件系统错误,防止缩减过程损坏数据;

  1. [root@bogon ~]# umount /dev/myvg/data 
  2. [root@bogon ~]# e2fsck -f /dev/myvg/data  
  3. e2fsck 1.39 (29-May-2006) 
  4. Pass 1: Checking inodes, blocks, and sizes 
  5. Pass 2: Checking directory structure 
  6. Pass 3: Checking directory connectivity 
  7. Pass 4: Checking reference counts 
  8. Pass 5: Checking group summary information 
  9. DATA: 13/286720 files (7.7% non-contiguous), 23141/573440 blocks 
  10.  

先缩减物理大小:

  1. [root@bogon ~]# resize2fs /dev/myvg/data 256M 
  2. resize2fs 1.39 (29-May-2006) 
  3. Resizing the filesystem on /dev/myvg/data to 131072 (2k) blocks. 
  4. The filesystem on /dev/myvg/data is now 131072 blocks long
  5.  

 再缩减逻辑大小:

  1. [root@bogon ~]# lvreduce -L 256M /dev/myvg/data  
  2.   WARNING: Reducing active logical volume to 256.00 MB 
  3.   THIS MAY DESTROY YOUR DATA (filesystem etc.) 
  4. Do you really want to reduce data? [y/n]: y 
  5.   Reducing logical volume data to 256.00 MB 
  6.   Logical volume data successfully resized 
  7.  

 查看状态、重新挂载:

  1. [root@bogon ~]# lvdisplay  
  2.   --- Logical volume --- 
  3.   LV Name                /dev/myvg/data 
  4.   VG Name                myvg 
  5.   LV UUID                d0SYy1-DQ9T-Sj0R-uPeD-xn0z-raDU-g9lLeK 
  6.   LV Write Access        read/write 
  7.   LV Status              available 
  8.   # open                 0 
  9.   LV Size                256.00 MB 
  10.   Current LE             16 
  11.   Segments               1 
  12.   Allocation             inherit 
  13.   Read ahead sectors     auto 
  14.   - currently set to     256 
  15.   Block device           253:2 
  16.  
  17.  
  18. 重新挂载: 
  19. [root@bogon ~]# mount /dev/myvg/data  /data/ 
  20. [root@bogon data]# df /data/ 
  21. Filesystem           1K-blocks      Used Available Use% Mounted on 
  22. /dev/mapper/myvg-data 
  23.                         253900      9508    236528   4% /data 
  24.  

 7. 扩展VG,向VG中添加一个PV:

  1. [root@bogon data]# pvcreate /dev/sdc2  
  2.   Physical volume "/dev/sdc2" successfully created 
  3.  [root@bogon data]# vgextend myvg /dev/sdc2 
  4.   Volume group "myvg" successfully extended 
  5. [root@bogon data]# pvdisplay 
  6.   --- Physical volume --- 
  7.   PV Name               /dev/sdc2 
  8.   VG Name               myvg 
  9.   PV Size               4.67 GB / not usable 9.14 MB 
  10.   Allocatable           yes  
  11.   PE Size (KByte)       16384 
  12.   Total PE              298 
  13.   Free PE               298 
  14.   Allocated PE          0 
  15.   PV UUID               hrveTu-2JUH-aSgT-GKAJ-VVv2-Hit0-PyoOOr 
  16.  

 8. 缩减VG,取出VG中的某个PV:

  移除某个PV时,需要先转移该PV上数据到其他PV,然后再将该PV删除;
 
移出指定PV中的数据:

  1. [root@bogon data]# pvmove /dev/sdc2 
  2.   No data to move for myvg 
  3. ##如果sdc2上面有数据,则会花一段时间移动,并且显示警告信息,再次确认后才会执行;
  4. ##如上,提示该分区中没有数据; 

 移除PV:

  1. [root@bogon data]# vgreduce myvg /dev/sdc2 
  2.   Removed "/dev/sdc2" from volume group "myvg" 
  3. ##若发现LVM中磁盘工作不太正常,怀疑是某一块磁盘工作由问题后就可以用该方法移出问题盘
  4. ##上数据,然后删掉问题盘; 
  5.  

 

 LVM快照:
 描述:

  在一个非常繁忙的服务器上,备份大量的数据时,需要停掉大量的服务,否则备份下来的数据极容易出现不一致状态,而使备份根本不能起效;这时快照就起作用了;

 原理:
  逻辑卷快照实质是访问原始数据的另外一个路径而已;快照保存的是做快照那一刻的数据状态;做快照以后,任何对原始数据的修改,会在修改前拷贝一份到快照区域,所以通过快照查看到的数据永远是生成快照那一刻的数据状态;但是对于快照大小有限制,做快照前需要估算在一定时间内数据修改量大小,如果在创建快照期间数据修改量大于快照大小了,数据会溢出照成快照失效崩溃;
  快照不是永久的。如果你卸下LVM或重启,它们就丢失了,需要重新创建。

创建快照:

  1. [root@bogon ~]# lvcreate -L 500M -p r -s -n datasnap /dev/myvg/data  
  2.   Rounding up size to full physical extent 512.00 MB 
  3.   Logical volume "datasnap" created 
  4. ## -L –l 设置大小 
  5. ## -p  :permission,设置生成快照的读写权限,默认为RW;r为只读 
  6. ##-s 指定lvcreate生成的是一个快照 
  7. ##-n 指定快照名称 
  8.  
  9. 挂载快照到指定位置: 
  10. [root@bogon ~]# mount  /dev/myvg/datasnap /backup/ 
  11. mount: block device /dev/myvg/datasnap is write-protected, mounting read-only 
  12.  
  13. 然后备份出快照中文件即可,备份后及时删除快照: 
  14.  [root@bogon ~]# ls  /backup/ 
  15. inittab  lost+found 
  16.   

 


  基于RAID的LVM的建立:

 描述:

    基于RAID的LVM,可以在底层实现RAID对数据的冗余或是提高读写性能的基础上,可以在上层实现LVM的可以灵活管理磁盘的功能;

 如图:

 建立过程:

  1. 建立LinuxRAID形式的分区:

  1.    Device Boot      Start         End      Blocks   Id  System 
  2. /dev/sdb1               1          62      497983+  fd  Linux raid autodetect 
  3. /dev/sdc1               1          62      497983+  fd  Linux raid autodetect 
  4. /dev/sdd1               1          62      497983+  fd  Linux raid autodetect 
  5. /dev/sde1               1          62      497983+  fd  Linux raid autodetect
  6.  

  2.   创建RAID-5:

  1. [root@nod1 ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1  /dev/sd{b,c,d,e}1  
  2. mdadm: array /dev/md0 started.  
  3. # RAID-5有一个spare盘,三个活动盘。  
  4. # 查看状态,发现跟创建要求一致,且创建正在进行中:  
  5. [root@nod1 ~]# cat /proc/mdstat   
  6. Personalities : [raid6] [raid5] [raid4]   
  7. md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]  
  8.       995712 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]  
  9.       [=======>.............]  recovery = 36.9% (184580/497856) finish=0.2min speed=18458K/sec  
  10.         
  11. unused devices: <none>  
  12. # 查看RAID详细信息:
  13. [root@nod1 ~]# mdadm -D /dev/md0 
  14. /dev/md0: 
  15.         Version : 0.90 
  16.   Creation Time : Wed Apr  6 04:27:46 2011 
  17.      Raid Level : raid5 
  18.      Array Size : 995712 (972.54 MiB 1019.61 MB) 
  19.   Used Dev Size : 497856 (486.27 MiB 509.80 MB) 
  20.    Raid Devices : 3 
  21.   Total Devices : 4 
  22. Preferred Minor : 0 
  23.     Persistence : Superblock is persistent 
  24.  
  25.     Update Time : Wed Apr  6 04:36:08 2011 
  26.           State : clean 
  27.  Active Devices : 3 
  28. Working Devices : 4 
  29.  Failed Devices : 0 
  30.   Spare Devices : 1 
  31.  
  32.          Layout : left-symmetric 
  33.      Chunk Size : 64K 
  34.  
  35.            UUID : 5663fc8e:68f539ee:3a4040d6:ccdac92a 
  36.          Events : 0.4 
  37.  
  38.     Number   Major   Minor   RaidDevice State 
  39.        0       8       17        0      active sync   /dev/sdb1 
  40.        1       8       33        1      active sync   /dev/sdc1 
  41.        2       8       49        2      active sync   /dev/sdd1 
  42.  
  43.        3       8       65        -      spare   /dev/sde1 

   3. 建立RAID配置文件:

  1. [root@nod1 ~]# mdadm -Ds > /etc/mdadm.conf 
  2. [root@nod1 ~]# cat /etc/mdadm.conf 
  3. ARRAY /dev/md0 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=5663fc8e:68f539ee:3a4040d6:ccdac92a
  4.  

   4. 基于刚建立的RAID设备创建LVM:

  1. # 将md0创建成为PV(物理卷): 
  2. [root@nod1 ~]# pvcreate /dev/md0 
  3.   Physical volume "/dev/md0" successfully created 
  4. # 查看物理卷: 
  5. [root@nod1 ~]# pvdisplay 
  6. "/dev/md0" is a new physical volume of "972.38 MB" 
  7.   --- NEW Physical volume --- 
  8.   PV Name               /dev/md0 
  9.   VG Name                                  #此时该PV不包含在任何VG中,故为空;              
  10.   PV Size               972.38 MB 
  11.   Allocatable           NO 
  12.   PE Size (KByte)       0 
  13.   Total PE              0 
  14.   Free PE               0 
  15.   Allocated PE          0 
  16.   PV UUID               PUb3uj-ObES-TXsM-2oMS-exps-LPXP-jD218u 
  17.  
  18. # 创建VG 
  19. [root@nod1 ~]# vgcreate myvg -s 32M  /dev/md0 
  20.   Volume group "myvg" successfully created 
  21. # 查看VG状态: 
  22. [root@nod1 ~]# vgdisplay  
  23.   --- Volume group --- 
  24.   VG Name               myvg 
  25.   System ID              
  26.   Format                lvm2 
  27.   Metadata Areas        1 
  28.   Metadata Sequence No  1 
  29.   VG Access             read/write 
  30.   VG Status             resizable 
  31.   MAX LV                0 
  32.   Cur LV                0 
  33.   Open LV               0 
  34.   Max PV                0 
  35.   Cur PV                1 
  36.   Act PV                1 
  37.   VG Size               960.00 MB 
  38.   PE Size               32.00 MB 
  39.   Total PE              30 
  40.   Alloc PE / Size       0 / 0    
  41.   Free  PE / Size       30 / 960.00 MB 
  42.   VG UUID               9NKEWK-7jrv-zC2x-59xg-10Ai-qA1L-cfHXDj 
  43.  
  44. # 创建LV: 
  45. [root@nod1 ~]# lvcreate -L 500M -n mydata myvg 
  46.   Rounding up size to full physical extent 512.00 MB 
  47.   Logical volume "mydata" created 
  48. # 查看LV状态: 
  49. [root@nod1 ~]# lvdisplay  
  50.   --- Logical volume --- 
  51.   LV Name                /dev/myvg/mydata 
  52.   VG Name                myvg 
  53.   LV UUID                KQQUJq-FU2C-E7lI-QJUp-xeVd-3OpA-TMgI1D 
  54.   LV Write Access        read/write 
  55.   LV Status              available 
  56.   # open                 0 
  57.   LV Size                512.00 MB 
  58.   Current LE             16 
  59.   Segments               1 
  60.   Allocation             inherit 
  61.   Read ahead sectors     auto 
  62.   - currently set to     512 
  63.   Block device           253:2 
  64.  


问题:(实验环境,很难做出判断,望有经验的多做指教)

在RAID上实现LVM后,不能再手动控制阵列的停止。
raid设备在建成以后,是不可以改变活动磁盘数目的。只能新增备份盘, 删除故障盘。故,若对存储需求估计失误,raid上层的LVM分区即使可以扩展, 但是仍可能无法满足存储需求;
如果整个raid不能满足容量需求,在试验中是可以实现将两个RAID同时加入 一个VG,从而实现RAID间的无缝衔接~但是这样做在实际生产中效果怎么样?是 否会因为架构太复杂造成系统负过大,或是对拖慢I/O响应速度?!这仍旧是个问 题;
基于RAID之上的LVM,若划分多个LV,多个LV之间的数据分布情况怎么样?! 会不会拖慢RAID本来带来的性能提升?
RAID间的无缝衔接示意图: