LVM 介绍:
LVM - Logical Volume Manager 是Linux系统下最强大的磁盘管理技术之一.当您需要考虑如何替用户数据和系统文件分配空间的时候,LVM可以让您彻底忘记传统的分区做法.
简单地来说,LVM就是将众多物理设备组合成一个大的虚拟设备,用户只需思考如何在虚拟设备上做传统的空间分配策略,而将物理设备的管理交由LVM自己去处理.这个由物理设备组
合所成的虚拟设备称为卷组(Volume Group),简称为VG;而用户在卷组VG上所划分的磁盘空间则称为逻辑卷(Logical Volume),简称为LV;而原始物理设备必须经过初始化处理才能加
入卷组集合,这种经过特别处理的原始设备或磁盘空间则称为物理卷(Physical Volume),简称为PV.
LVM磁盘空间管理系统允许您在需要的时候重新调整大小, 这也就意味着在管理磁盘空间资源方面,但您应该留心硬盘出错的情况,如果您没有在LVM管理中为出现这种情况而做好计
划,那么您可能会丢失大量数据.
LVM 术语:
PV - Physical Volume 物理卷,例如一个硬盘,或一个Software RAID设备;
VG - Volume Group 卷组,将一组物理卷收集为一个管理单元;
LV - Logical Volume 逻辑卷,等同于传统分区,可看作便准的块设备,以容纳文件系统;
PE - Physical Extent 物理块,划分物理卷的数据块;
LE - Logical Extent 逻辑块,划分逻辑卷的数据块;
说明: /boot 这个挂载分区不能存在于VG卷组里.所以我们一般是建议单独分区.
[root@testA ~]# rpm -qa|grep -i lvm 首先保证安装下面包
lvm2-2.02.46-8.el5
lvm2-cluster-2.02.46-8.el5
system-config-lvm-1.1.5-1.0.el5
[root@testA ~]# fdisk -l 查看硬件信息
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 78 522112+ 82 Linux swap / Solaris
/dev/sda3 79 1305 9855877+ 83 Linux
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sde doesn't contain a valid partition table
Disk /dev/sdf: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdf doesn't contain a valid partition table
创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。
[root@testA ~]# pvcreate /dev/sdb 创建物理卷
Physical volume "/dev/sdb" successfully created
[root@testA ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
[root@testA ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created
[root@testA ~]# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created
[root@testA ~]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created
创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组
[root@testA ~]# vgcreate haha /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf 创建卷组
/dev/cdrom: open failed: Read-only file system
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "haha" successfully created
vgcreate命令第一个参数是指定该卷组的逻辑名:haha。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate在创建卷组 haha 以外,还设置使用大小为4 MB的PE(默
认为4MB),这表示卷组上创建的所有逻辑卷都以 4 MB 为增量单位来进行扩充或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4 MB 的PE决定了单个逻辑卷最大容量为
256 GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8 KB 到 5 12 MB,并且必须总是 2 的倍数(使用-s指定,具体请参考man vgcreate)。
要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:
如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
[root@testA ~]# vgreduce haha /dev/sdc 卷组里面删除一个物理卷
为了立即使用卷组而不是重新启动系统,可以使用vgchange来激活卷组
[root@testA ~]# vgchange -a y haha 激活卷组
0 logical volume(s) in volume group "haha" now active
[root@testA ~]# vgdisplay 查看 Volume Group (VG)卷组状态
--- Volume group ---
VG Name haha
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 13
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 5
Act PV 5
VG Size 9.98 GB
PE Size 4.00 MB
Total PE 2555
Alloc PE / Size 2555 / 9.98 GB
Free PE / Size 0 / 0
VG UUID AYLnj9-jZu7-Q6IR-5Jd9-A25T-xQgJ-ZSwcGs
[root@testA ~]# lvcreate -L9000 -n coremail haha 创建逻辑卷 coremail 大小是9000M Logical volume "index" created
其他逻辑卷方法创建类似上面的
如果想将剩余空间全部创建为其他逻辑卷,可以先输入vgdisplay命令查看到
例如
Total PE 2555 全部的PE
Alloc PE / Size 2250 / 8.79 GB 使用的PE2250 使用的大小8.79G
Free PE / Size 305 / 1.19 GB 剩余的PE305 剩余的空间大小1.19G
[root@testA ~]# lvcreate -l 305 -n mysqldata haha 这里制定了剩余PE数,表示将剩余空间全部创建成逻辑卷mysqldata
[root@testA ~]# mkfs -t ext3 /dev/haha/coremail 创建文件系统
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1154176 inodes, 2304000 blocks
115200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2361393152
71 block groups
32768 blocks per group, 32768 fragments per group
16256 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 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override. You have new mail in /var/spool/mail/root
[root@testA ~]# mkfs -t ext3 /dev/haha/mysqldata 创建文件系统
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
156160 inodes, 312320 blocks
15616 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=322961408
10 block groups
32768 blocks per group, 32768 fragments per group
15616 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@testA ~]# mkdir /coremail
[root@testA ~]# mount /dev/haha/coremail /coremail
[root@testA ~]# mkdir /mysqldata
[root@testA ~]# mount /dev/haha/mysqldata /mysqldata
[root@testA ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 9.2G 4.3G 4.4G 50% /
/dev/sda1 99M 24M 70M 26% /boot
tmpfs 217M 0 217M 0% /dev/shm
none 217M 104K 217M 1% /var/lib/xenstored
/dev/mapper/haha-coremail
8.7G 148M 8.1G 2% /coremail 挂载成功
/dev/mapper/haha-mysqldata
1.2G 34M 1.1G 3% /mysqldata 挂载成功
开机自动挂载
[root@test ~]# vi /etc/fstab
LABEL=/
/ ext3 defaults 1 1
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
LABEL=SWAP-sda2
swap swap defaults 0 0
/dev/mapper/haha-coremail /coremail ext3 defaults 0 0
/dev/mapper/haha-mysqldata /mysqldata ext3 defaults 0 0
到这里。lvm算完成。
[root@testA ~]# umount /coremail 卸载挂载
[root@testA ~]# lvremove /dev/haha/coremail 删除逻辑卷,首先要卸载,然后再删除。 /dev/cdrom: open failed: Read-only file system
Do you really want to remove active logical volume coremail? [y/n]: y
Logical volume "coremail" successfully removed
模拟一个逻辑卷空间不足,现在添加了一块2G的新硬盘,需要添加到系统里面。
关机,安装硬盘,启动机器
[root@testA ~]# pvcreate /dev/sdg
Physical volume "/dev/sdg" successfully created
[root@testA ~]# vgextend haha /dev/sdg
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "haha" successfully extended
[root@testA ~]# vgdisplay 可以看到
Free PE / Size 511 / 2.00 GB
[root@testA ~]# lvextend -L+1G /dev/haha/mysqldata
Extending logical volume mysqldata to 2.19 GB
Logical volume mysqldata successfully resized
上面的命令就实现将逻辑卷MYSQLDATA的大小增加1G。
[root@testA ~]# resize2fs /dev/haha/mysqldata
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/haha/mysqldata is mounted on /mysqldata; on-line resizing requir ed
Performing an on-line resize of /dev/haha/mysqldata to 574464 (4k) blocks.
The filesystem on /dev/haha/mysqldata is now 574464 blocks long.
[root@testA ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 9.2G 4.3G 4.4G 50% /
/dev/sda1 99M 24M 70M 26% /boot
tmpfs 217M 0 217M 0% /dev/shm
/dev/mapper/haha-coremail
8.7G 148M 8.1G 2% /coremail
none 217M 104K 217M 1% /var/lib/xenstored
/dev/mapper/haha-mysqldata
2.2G 34M 2.1G 2% /mysqldata 这里显示增加了1G
不需要umount,直接可以增加。
7.4.3 卷组管理
LVM卷组类似于非LVM系统中的物理硬盘,它是由一个或者多个物理卷所组成,可以在卷组上创建一个或多个逻辑卷。通过它可以方便地管理磁盘空间,当卷组空间不足的时候可以往卷组中添加新的物理卷,扩展卷组的容量。
1.添加卷组
物理卷创建完成后就可以开始创建卷组。卷组是由一个或多个物理卷所组成的存储池。例如要创建一个名为vg_data的卷组,可以使用下面的命令。
1.# vgcreate vg_data /dev/hda13 /dev/hda14
2. Volume group "vg_data" successfully created
2.扩展卷组的容量
当卷组中的空间不足的时候,可以使用vgextend命令往卷组中添加新的物理卷,方便地扩展卷组的容量,如下所示。
1.# vgextend vg_data /dev/hda15
2. Volume group "vg_data" successfully extended
3.查看卷组
使用vgdisplay命令可以查看卷组的信息。例如要查看上例中创建的卷组vg_data,执行的命令如下所示。
1.# vgdisplay vg_data
2. --- Volume group ---
3. VG Name vg_data //vg名称
4. System ID
5. Format lvm2
6. Metadata Areas 3 //元信息区域
7. Metadata Sequence No 2
8. VG Access read/write //访问许可,可读写
9. VG Status resizable //VG状态
10. MAX LV 0 //最大的LV数
11. Cur LV 0 //当前的LV数
12. Open LV 0 //打开的LV数
13. Max PV 0 //最大的PV数
14. Cur PV 3 //当前的PV数
15. Act PV 3
16. VG Size 5.59 GB //VG的大小为
5.59GB
17. PE Size 4.00 MB //物理块的大小为
4MB
18. Total PE 1430 //VG的物理块
数为1430
19. Alloc PE / Size 0 / 0 //已经使用的物
理块数和大小
20. Free PE / Size 1430 / 5.59 GB //空闲的物理块
数和大小
21. VG UUID djgPFx-LOGa-8ZOx-diNr-hxCs-qNip-vg0Hqu
可以看到,卷组vg_dat格式为lvm2,访问许可为可读写,卷组大小为5.59GB,物理块大小为4MB,总的物理块数为1430,已分配的物理块数为0,空闲的物理块数为1430,大小为5.59GB。
4.从卷组中删除物理卷
通过vgreduce命令可以把VG中未被使用的PV从VG中删除,例如要从卷组vg_data 中删除物理卷hda15,如下所示。
1.# vgreduce vg_data /dev/hda15
2. Removed "/dev/hda15" from volume group "vg_data"
如果要从卷组中删除所有未被使用的物理卷,可以使用如下命令。
1.# vgreduce -a
5.删除卷组
当卷组不再需要的时候,可以使用vgremove命令删除。如果卷组中已经创建了LV,则系统会提示用户确认是否要进行删除,命令及运行结果如下所示。
1.# vgremove vg_data
2.Do you really want to remove volume group
"vg_data" containing 2 logical volumes
3.? [y/n]: y
4.Do you really want to remove active logical volume "lv_data1"? [y/n]
: y
5. //确定删除逻辑卷
lv_data1
6. Logical volume "lv_data1" successfully removed
7.Do you really want to remove active logical volume "lv_data2"? [y/n]
: y
8. //确定删除逻辑卷
lv_data2
9. Logical volume "lv_data2" successfully removed
10. Volume group "vg_data" successfully removed
卷组被删除后,卷组中的所有物理卷将不属于任何卷组,可以对这些物理卷进行删除,命令如下所示。
1.# pvdisplay /dev/hda14
2. "/dev/hda14" is a new physical volume of "1.86 GB"
3. --- NEW Physical volume ---
4. PV Name /dev/hda14
5. VG Name //VG Name一列为空,表示该PV不属
于任何的VG
6. PV Size 1.86 GB //PV大小
7. Allocatable NO //是否可分配
8. PE Size (KByte) 0 //PE大小
9. Total PE 0 //总PE数
10. Free PE 0 //空闲的PE
11. Allocated PE 0 //分配的PE
12. PV UUID VzjEpx-or1h-v3gN-zOCm-FnjC-eDOz-tp5Yzg
可以看到,物理卷hda14的VG Name一列为空,表示该物理卷不属于任何的卷组,用户可以删除该物理卷,或分配给其他卷组使用。
7.4.4 逻辑卷管理
逻辑卷类似于非LVM系统中的磁盘分区,在逻辑卷上可以建立文件系统,文件系统建立完成后就可以挂载到操作系统中进行使用。逻辑卷被划分为被称为LE(Logical Extents)的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
1.添加逻辑卷
当卷组创建后,可以使用lvcreate命令在卷组上创建逻辑卷。例如要在卷组vg_data上创建一个1000MB的逻辑卷lv_data1,其命令如下所示。
1.# lvcreate -L 1000m -n lv_data1 vg_data
2. Logical volume "lv_data1" created
除了KB、MB和GB这些常规单位以外,lvcreate命令还可以使用PE数作为单位。由vgdisplay可以看到卷组vg_data的PE大小为4MB,如果要创建一个大小为1000MB的逻辑卷,则需要250个PE,命令如下所示。
1.# lvcreate -l 250 -n lv_data2 vg_data
2. Logical volume "lv_data2" created
卷组和逻辑卷创建后,会在/dev目录下创建一个以VG名称命名的目录,在目录下会创建以LV名称命名的设备文件,如下所示。
1.#ll /dev/vg_data
2.total 0
3.lrwxrwxrwx 1 root root 28 Aug 24 22:22
lv_data1 -> /dev/mapper/vg_ data-lv_data1
4.lrwxrwxrwx 1 root root 28 Aug 24 22:21
lv_data2 -> /dev/mapper/vg_ data-lv_data2
2.更改逻辑卷的大小
使用lvresize命令可以更改已有逻辑卷的大小。一般情况下不建议减少逻辑卷的空间,因为这样可能会导致逻辑卷上的文件系统中的数据丢失,所以除非用户已经确定被减少空间中的数据不再需要或者已经把重要数据备份出来,否则不要减少逻辑卷的空间以免造成不可挽回的损失。如果要把逻辑卷lv_data1的大小增加为1500MB,可以使用下面的命令。
1.# lvresize -L 1500m /dev/vg_data/lv_data1
2. Extending logical volume lv_data1 to 1.46 GB
3. Logical volume lv_data1 successfully resized
3.查看逻辑卷的信息
使用lvdisplay命令可以查看指定逻辑卷的信息,例如要查看逻辑卷lv_data1的信息,命令和运行结果如下所示。
1.# lvdisplay /dev/vg_data/lv_data1
2. --- Logical volume ---
3. LV Name /dev/vg_data/lv_data1 //逻辑卷名称
4. VG Name vg_data //逻辑卷所属的卷
组
5. LV UUID 3CrIH1-rZr6-UkNZ-1Z5n-gHw2-SM5T-by5fKg
6. LV Write Access read/write
7. LV Status available
8. # open 0
9. LV Size 1.46 GB //逻辑卷的大
小
10. Current LE 375 //逻辑卷的逻辑
块数
11. Segments 1
12. Allocation inherit
13. Read ahead sectors auto
14. - currently set to 256
15. Block device 253:0
可以看到,逻辑卷/dev/vg_data/lv_data1所属的卷组为vg_data,访问许可为可读写,卷组状态为可用,逻辑卷大小为1.46GB,总的逻辑块数为375。
4.删除逻辑卷
使用lvremove命令可以删除指定的逻辑卷,删除前系统会提示用户确认。例如要删除逻辑卷lv_data2,其命令和运行结果如下所示。
1.# lvremove /dev/vg_data/lv_data2
2.Do you really want to remove active logical volume "lv_data2"? [y/n]
: y
3. Logical volume "lv_data2" successfully removed
删除后,逻辑卷上的所有数据均会被清除。