对于Linux用户而言,在安装一台Linux机器的时候,遇到的问题之一就是给各分区估计和分派足够的硬盘空间。不管对一个正在为服务器寻找空间的系统管理员,仍是一个磁盘即将用尽的普通用户来讲,这都是一个很是常见的问题。解决的方法一般是使用符号连接,或者一些调整分区大小的工具(好比parted)。可是,这只是一个暂时性的解决办法,不久,咱们又会面临一样的问题。
若是你是一个站点的系统管理员,管理着数量众多的、链接在Internet之上的服务器,那么你每关机一分钟,都会给公司带来很大损失。此外,使用这种方法,在修改了分区表以后,每一次都得从新启动系统。LVM(逻辑卷管理程序)能够帮助咱们解决这些问题。
LVM简介
Linux LVM可使管理工做更加轻松。相对于硬盘和分区,LVM是从更高的层次来看待存储空间的。在使用LVM以前,先来看一些将要使用到的相关概念。
物理卷
物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区相似的设备(好比RAID设备)。
逻辑卷
一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷相似于非LVM系统中的硬盘分区。逻辑卷能够包含一个文件系统(好比/home或者/usr)。
卷组
一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组相似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一块儿,造成一个可管理的单元。
linux
LVM工做方式
下面来看一看LVM究竟是怎样工做的。每个物理卷都被分红几个基本单元,即所谓的PE(Physical Extents)。PE的大小是可变的,可是必须和其所属卷组的物理卷相同。在每个物理卷里,每个PE都有一个唯一的编号。PE是一个物理存储里能够被LVM寻址的最小单元。
每个逻辑卷也被分红一些可被寻址的基本单位,即所谓的LE(Logical Extents)。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的全部逻辑卷来讲都是相同的。
在一个物理卷中,每个PE都有一个唯一的编号,可是对于逻辑卷这并不必定是必需的。这是由于当这些PE ID号不能使用时,逻辑卷能够由一些物理卷组成。所以,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。
你可能会以为奇怪,有关逻辑卷和逻辑卷组的全部元数据都存到哪儿去了。相似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每个物理卷的起始处。
VGDA由如下信息组成:
·一个PV描述符
·一个VG描述符
·LV描述符
·一些PE描述符
当系统启动LV时,VG被激活,而且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA创建起来的映射机制就用于访问实际的物理位置来执行I/O操做。
开始工做
下面具体看一看如何使用LVM。
第一步:配置内核。(通常已经内置了)在安装LVM以前,内核之中应该有LVM模块,可使用如下的步骤来完成:
shell
#cd /usr/src/linux #make menuconfig
选择Multi-device Support (RAID and LVM)子菜单,选中如下两个选项:
[CODE] [*] Multiple devices driver support (RAID and LVM)
<*> Logical volume manager (LVM) Support. [/CODE]
注:若是在安装Linux系统时已经安装了LVM相关软件包,上面几步操做能够省略掉,直接到第二步.
第二步:检查驱动器上空闲硬盘空间的总量。这能够经过如下命令来未完成:
服务器
# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 3.1G 2.7G 398M 87% / /dev/hda2 4.0G 3.2G 806M 80% /home /dev/hda5 2.1G 1.0G 1.1G 48% /var
第三步:在硬盘上建立一个LVM分区。使用fdisk或者其它的分区工具来建立一个LVM分区。Linux LVM的分区类型为8e。
工具
# fdisk /dev/hda press p (to print the partition table) and n (to create a new partition)
第四步:建立一个物理卷。下述命令将在分区的起始处建立一个卷组描述符:
spa
# pvcreate /dev/hda6 pvcreate -- -physical volume "/dev/hda6" successfully created # pvcreate /dev/hda7 pvcreate- -- physical volume "/dev/hda7" successfully created
第五步:建立一个卷组。经过下面的方法建立一个新的卷组,而且添加两个物理卷:
日志
# vgcreate test_lvm /dev/hda6 /dev/hda7 vgcreate- -- INFO: using default physical extent size 4 MB vgcreate- -- INFO: maximum logical volume size is 255.99 Gigabyte vgcreate- -- doing automatic backup of volume group "test_lvm" vgcreate- -- volume group "test_lvm" successfully created and activated
上述命令将建立一个名为test_lvm,包含有/dev/hda6和/dev/hda7两个物理卷的卷组。使用下面命令来激活卷组:
code
# vgchange -ay test_lvm
使用“vgdisplay”命令来查看所创建卷组的细节信息。
ip
# vgdisplay --- Volume group --- VG Name test_lvm VG Access read/write VG Status available/resizable VG # 0 MAX LV 256 Cur LV 1 Open LV 0 MAX LV Size 255.99 GB Max PV 256 Cur PV 2 Act PV 2 VG Size 3.91 GB PE Size 4 MB Total PE 1000 Alloc PE / Size 256 / 1 GB Free PE / Size 744 / 2.91 GB VG UUID T34zIt-HDPs-uo6r-cBDT-UjEq-EEPB-GF435E
第六步:建立一个逻辑卷。使用lvcreate命令在卷组中建立一个逻辑卷:
内存
# lvcreate -L2G -nlogvol1 test_lvm
第七步:建立文件系统。在该逻辑卷上选择使用mkfs日志文件系统: ci
# mkfs /dev/test_lvm/logvol1
使用mount命令来加载新建立的文件系统。
# mount -t reiserfs /dev/test_lvm/logvol1 /mnt/lv1
第八步:在/etc/fstab和/etc/lilo.conf中添加一个入口。在/etc/fstab中加入如下入口,在启动时加载文件系统:
/dev/test_lvm/logvol1 /mnt/lv1 reiserfs defaults 1 1
第九步:修改逻辑卷的大小。可使用lvextend命令方便地修改逻辑卷的大小,增长逻辑卷大小的方法以下:
# lvextend -L+1G /dev/test_lvm/logvol1 lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB lvextend -- doing automatic backup of volume group "test_lvm" lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended
相似的,减少逻辑卷大小的方法以下:
# lvreduce -L-1G /dev/test_lvm/lv1 lvreduce -- -Warning: reducing active logical volume to 2GB lvreduce- -- This may destroy your data (filesystem etc.) lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y lvreduce- -- doing automatic backup of volume group "test_lvm" lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced
总结
从上面的讨论能够看到,LVM具备很好的可扩展性,而且使用起来很直观。一旦卷组创建起来之后,根据需求调整每个逻辑卷的大小也很是容易。
可是:boot分区不建议作LVM,boot分区不建议LVM,boot分区不建议LVM 重要的事情说三遍,若是boot作了LVM很容易致使系统没法启动,我的亲身经历。
LVM操做的相关命令: fdisk -l :查看系统中都认到了那些物理硬盘 pvdisplay:查看系统中已经建立好的物理卷 pvcreate:建立一个新的物理卷 pvremove:删除一个物理卷(也就是从物理卷中删除一个LVM标签) vgdisplay:查看系统中的卷组 vgcreate:建立一个新的卷组 vgreduce:从卷组中删除一个物理卷(也就是缩小卷组) vgremove:删除一个卷组 lvdisplay:查看系统中已经建立好的逻辑卷 lvcreate:建立一个新的逻辑卷 lvreduce:缩小逻辑卷(也就是从一个逻辑卷中减小一些LE) lvremove:从系统中删除一个逻辑卷 mkfs:基于逻辑卷建立一个相应类型的文件系统 mkdir -p $mount_piont:建立一个挂载目录 建立好的文件系统位于: /dev/$create_vg_name/$lv_name mount /dev/$create_vg_name/$lv_name $mount_piont:挂载文件系统 vgscan:读取系统中建立的全部卷组 vgchange -a y :激活全部卷组 (开机执行,redhat可在/etc/rc.d/rc.sysinit系统启动初始化脚本里能够找到) vgchange -a n :关闭全部卷组(提示:必须在umount全部的文件系统后,才能成功执行