首页 > 代码库 > 逻辑卷管理(十八)

逻辑卷管理(十八)

为什么要使用逻辑卷管理?

逻辑卷:

优点:在于灵活管理

1、动态扩容

2、在线扩容

3、离线裁剪

4、数据条带化

5、数据镜像

基本概念:

物理卷(pv):

物理卷是底层真正存放数据的一个设备,该设备可以是整块磁盘也可以是磁盘的某个分区。

卷组(vg):

卷组是建立在物理卷之上,它是由一个或者多个物理卷组成的。即将很多个物理卷融合在一起来提供容量。

逻辑卷(lv):

逻辑卷是建立在卷组之上,它是从卷组中“切”出来一块空间来让用户使用。

物理区域(PE):

每一个物理卷被划分成称为PE的最小单位。默认是4M,寻址的最小单位。

逻辑区域(LE):

逻辑卷被划分为称为LE的可被寻址的最小单位。在同一个卷组中PE和LE的大小是一一对应的。

总结:

真实的物理设备——>逻辑上做成物理卷(pv)——>卷组(vg)——>逻辑卷(lv)

dmoe1:

创建一个普通的逻辑卷,大小是1G,挂载使用。
1、拿一块硬盘
2、将硬盘分区(根据实际情况)
sdb      8:16   0   20G  0 disk 
├─sdb1   8:17   0    2G  0 part 
├─sdb2   8:18   0    2G  0 part 
├─sdb3   8:19   0    6G  0 part 
└─sdb4   8:20   0   10G  0 part 
3、将设备做成物理卷
# pvcreate /dev/sdb1
查看:
pvs 简单查看
pvdisplay 详细查看
4、创建卷组,将物理卷加入到卷组
# vgcreate vg01 /dev/sdb1
  Volume group "vg01" successfully created
-l: 卷组上允许创建的最大逻辑卷数
-s:卷组上的物理卷的PE大小
-p:卷组中允许添加的最大物理卷数
查看:
vgs
vgdisplay
5、创建逻辑卷,大小1G
# lvcreate -n lv01 -L 1G vg01
-L:指定最终大小
-l:指定pe的个数或者卷组剩余空间的百分比
# lvcreate -n lv02 -l 50 vg01
# lvcreate -n lv03 -l 50%free vg01
查看:
lvs
lvdisplay
6、将逻辑卷格式化
创建好的逻辑卷会映射到以下两个地方:
# ll /dev/mapper/vg01-lv01
lrwxrwxrwx. 1 root root 7 Apr  8 10:42 /dev/mapper/vg01-lv01 -> ../dm-2
# ll /dev/vg01/lv01
lrwxrwxrwx. 1 root root 7 Apr  8 10:42 /dev/vg01/lv01 -> ../dm-2
mkfs -t ext4 /dev/mapper/vg01-lv01
或者
mkfs.ext4 /dev/vg01/lv01
7、挂载使用
mount /dev/vg01/lv01 /u01
demo2:在线扩容逻辑卷
情况1:当卷组剩余空间不够
1、扩容卷组
# vgextend vg01 /dev/sdb3
  No physical volume label read from /dev/sdb3
  Physical volume /dev/sdb3 not found
  Physical volume "/dev/sdb3" successfully created
  Volume group "vg01" successfully extended
说明:
卷组是由物理卷组成的,如果直接将设备加入卷组,那么系统会自动先将设备做成pv,然后在加入。
2、扩容逻辑卷
# lvextend -L +2G /dev/vg01/lv01  在原来的基础上增加2G空间
3、同步文件系统
# resize2fs /dev/vg01/lv01
情况2:当前卷组剩余空间足够
1、扩容逻辑卷
# lvextend -L 3G /dev/vg01/lv01  将原来的逻辑卷扩大到3G
2、同步文件系统
# resize2fs /dev/vg01/lv01
实例:动态扩容根文件系统
demo3:离线裁剪逻辑卷
1、卸载逻辑卷
umount /dev/vg01/lv01
2、裁剪文件系统
# e2fsck -f /dev/mapper/vg01-lv01
# resize2fs /dev/mapper/vg01-lv01 2G
3、裁剪逻辑卷
# lvreduce -L 2G /dev/mapper/vg01-lv01
# e2fsck -f /dev/mapper/vg01-lv01
4、挂载使用
# mount /dev/mapper/vg01-lv01 /u01
注意:
1、离线裁剪之前最好将数据备份
2、裁剪后的空间大小一定要大于数据大小
demo4:总结逻辑卷相关的命令
创建物理卷
pvcreate /dev/sdb /dev/sdc[1-3]
创建卷组
vgcreate vg01 /dev/sdb
创建逻辑卷
lvcreate -n lv01 -L 2G vg01
lvcreate -n lv02 -l 50 vg02
lvcreate -n lv03 -l 50%free vg03
扩容卷组
vgextend vg01 /dev/sdc[1-3]
扩容逻辑卷
lvextend -L +1G /dev/vg01/lv01
删除逻辑卷
# lvremove /dev/mapper/vg01-lv03 
删除卷组
# vgremove vg01
删除物理卷
# pvremove /dev/sdb /dev/sdc[1-3]
将一个物理卷从卷组里移除
# vgreduce vg01 /dev/sdb2
注意:
该物理卷没有被使用才能够移除
demo5:逻辑卷实现条带化
条带化:
把保存在逻辑卷上的数据分成n等分,分别同时写入到不同的物理卷中,可以提高数据的读写速率;如果任何一个涉及到物理卷损坏,数据都会无法恢复。
创建前:
# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  vg_node1 lvm2 a--  19.51g    0 
  /dev/sdb1  vg01     lvm2 a--   2.00g 2.00g
  /dev/sdb2  vg01     lvm2 a--   2.00g 2.00g
创建条带化的逻辑卷:
# lvcreate -n lv01 -L 1G -i 2 vg01 /dev/sdb[12]
-i:指定条带化的个数
创建后:
# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  vg_node1 lvm2 a--  19.51g    0 
  /dev/sdb1  vg01     lvm2 a--   2.00g 1.50g
  /dev/sdb2  vg01     lvm2 a--   2.00g 1.50g
格式化文件系统:
mkfs.ext4 /dev/vg01/lv01
挂载使用
mount /dev/vg01/lv01 /u01
测试验证:
# iostat -d -m /dev/sdb[12] 2
demo6:逻辑卷实现镜像
镜像:对某个逻辑卷做数据镜像,实现数据备份作用。
创建前:
# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  vg_node1 lvm2 a--  19.51g    0 
  /dev/sdb1  vg01     lvm2 a--   2.00g 1.50g
  /dev/sdb2  vg01     lvm2 a--   2.00g 1.50g
  /dev/sdb3  vg02     lvm2 a--   2.00g 2.00g
  /dev/sdb4  vg02     lvm2 a--   2.00g 2.00g
创建一个互为镜像的逻辑卷:
# lvcreate -n lv02 -L 1G -m 1 vg02 /dev/sdb[34]
-m:指定镜像的个数
# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Move Log       Cpy%Sync Convert
  lv01    vg01     -wi-ao----  1.00g                                                   
  lv02    vg02     mwi-a-m---  1.00g                         lv02_mlog   100.00  数据同步100%完成
创建后:
# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  vg_node1 lvm2 a--  19.51g    0 
  /dev/sdb1  vg01     lvm2 a--   2.00g 1.50g
  /dev/sdb2  vg01     lvm2 a--   2.00g 1.50g
  /dev/sdb3  vg02     lvm2 a--   2.00g 1.00g
  /dev/sdb4  vg02     lvm2 a--   2.00g 1.00g
格式化文件系统并且挂载使用
# mkfs.ext4 /dev/vg02/lv02
# mkdir /u02
# mount /dev/mapper/vg02-lv02 /u02
测试验证:
# dd if=/dev/zero of=/dev/sdb3 bs=1M count=300
# vgreduce --removemissing -f vg02  强制从卷组中移除损坏的盘
再次将逻辑卷挂载使用,我们需要将坏的盘修好换成健康的盘让其再次互为镜像:
# lvconvert -m 1 /dev/vg02/lv02 /dev/sdb[34]


练习:

1、添加一块新的10g硬盘到你的linux系统中,并将其分为2个分区(大小自己决定),如sdb1和sdb2

[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                          11:0    1 1024M  0 rom  
sda                           8:0    0   20G  0 disk 
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0 19.5G  0 part 
  ├─VolGroup-lv_root (dm-0) 253:0    0 17.6G  0 lvm  /
  └─VolGroup-lv_swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
sdb                           8:16   0   10G  0 disk 
└─VolGroup-lv01 (dm-2)      253:2    0    5G  0 lvm  /data
sdc                           8:32   0   10G  0 disk 
[root@localhost ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x989783d7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.
 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 
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): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition‘s system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +5G
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (655-1305, default 655):
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-1305, default 1305): 1305
 
Command (m for help): p
 
Disk /dev/sdc: 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: 0x989783d7
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         654     5253223+  83  Linux
/dev/sdc2             655        1305     5229157+  83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


2、创建大小为2G的逻辑卷lv01挂载到系统中的/u01目录下面,并且在/u01目录下面创建file1~file5 5个文件。

[root@localhost ~]# mkdir /u01
[root@localhost ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
[root@localhost ~]# pvcreate /dev/sdc2
  Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# vgextend  VolGroup /dev/sdc[1-2]
  Volume group "VolGroup" successfully extended
[root@localhost ~]# lvcreate -n lv02 -L 2G VolGroup
  Logical volume "lv02" created
[root@localhost ~]# mkfs -t ext4 /dev/mapper/VolGroup-lv02
[root@localhost ~]# mount /dev/mapper/VolGroup-lv02 /u01
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G   14G  3.0G  82% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   28M  425M   6% /boot
/dev/mapper/VolGroup-lv01
                      4.8G   19M  4.6G   1% /data
/dev/mapper/VolGroup-lv02
                      2.0G  3.0M  1.9G   1% /u01
[root@localhost ~]# touch /u01/file{1..5}
[root@localhost ~]# ls /u01
file1  file2  file3  file4  file5  lost+found

3、假设sdb1分区有坏块,现在需要将sdb1分区上的数据快速移动到另外的硬盘sdb2上,怎么做?

首先,先在sdb2新建一个逻辑卷,然后挂载,把sdb1分区上的数据拷贝到sdb2

4、由于业务需要,/u01目录需要扩大到9G,怎么做?

[root@localhost ~]# lvextend -L +7G /dev/mapper/VolGroup-lv02 
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-lv02

5、新建一个卷组vg02,PEsize为8M,在卷组中创建一个名为lv02的逻辑卷,大小为50个pe,格式化成ext3的文件系统挂载使用,要求开机自动挂载

vgcreate -s 8M vg02 /dev/sda3
lvcreate -n lv02 -l 50 vg02
mkfs.ext3 /dev/mapper/vg02-lv02

扩展:

1、测试验证已有逻辑卷的硬盘,从一台服务器换到另一台服务器上是否可以正常读取到原来的数据?需要怎么做?

不能正常读取原来数据,已经有分区表,可以挂载读到原来的数据,重要的是原服务器必须关机,要不加不了

正常的步骤是添加进去先要激活vg,然后才可以挂载使用

vgchange -a y lvm_list激活卷组

2、测试验证已有互为镜像的逻辑卷的硬盘,从一台服务器换到另一台服务器上是否可以正常读取数据?怎么做?

原来服务器关掉,现有服务器也关掉,然后把原服务器互为镜像的逻辑硬盘加到现在服务器,可以读取数据,需要正常挂载

lvmdiskcan扫描块设备,看看那些是逻辑卷

逻辑卷迁移:

源端:
1)将源文件系统umount
 umount /test
2)将lv和lv inactive
lvchange -an /dev/vg_test/lv_test
vgchange -an vg_test
3)导出vg
vgexport vg_test
目标端:
1)永kudzu检测新的盘
2)导入vg
vgimport vg_test
3)激活vg
vgchange -ay vg_test
3)mount文件系统

本文出自 “烂笔头” 博客,请务必保留此出处http://lanbitou.blog.51cto.com/9921494/1940224

逻辑卷管理(十八)