德克云技术联盟

标题: Linux逻辑卷:LVM [打印本页]

作者: 李臻宇    时间: 2014-7-16 17:48
标题: Linux逻辑卷:LVM


什么是LVM:    在基本 PC 上,我们总是不得不对硬盘驱动器执行分区。使用 PC 的人通常相当了解 fdisk 这样的在硬盘上创建和删除主要分区和扩展分区的工具。硬盘分区是一种令人厌烦,但公认是使操作系统设置和运行进程不可或缺的一部分。    因为要做好工作,确实需要精确地估计每个分区需要多少空间,所以硬盘驱动器分区可能是非常烦人的事。如果估计得不准确,Linux 系统很可能会顾此失彼 -- 为解决这个问题,您甚至可能需要执行整个系统备份、将硬盘清除干净,然后将所有数据恢复到新的(可能比原来好一些)分区布局中。讨厌!这些就是系统管理员在一开始就尽力避免的情况。    虽然分区曾一度是静态存储器的天下,但值得庆幸的是,我们现在有许多 PC 重新分区工具(PowerQuest 的 Partition Magic 产品就是最流行的一种)。这些工具可以让您用一个特殊磁盘来引导系统,并可以动态地重新调整分区和文件系统的大小。重新引导后,您就拥有了重新调整过大小的新分区,这样就有望将您从存储器危境中解脱出来。这些重新调整分区大小的工具很有效,并从某种程度上解决了一些存储器管理问题。但它们是不是就完美了呢?不一定。    象 Partition Magic 这样的工具对于工作站来说非常有效,但对服务器来说就不合适了。首先,它们需要重新引导系统。而这正是大多数系统管理员尽量避免的。如果在每次需要调整存储器(例如,如果每周存储器调整都需要做很大调整)时不能重新引导机器怎么办?如果需要扩充文件系统使它能跨越多个硬盘驱动器会发生什么,或者如果在允许 Apache 继续提供 Web 页面的同时需要动态扩充或缩减卷的存储容量,您该怎么做?在一个高度可用的动态环境中,基本的分区大小调整器无法满足这些要求。对于这样一些和其它一些情况,“逻辑卷管理”是一种非常出色(如果不是最完美)的解决方案。
    需求描述:我的磁盘驱动器是80G的IDE磁盘,在当时装这个ftp服务器的时候我仅仅使用了41.1G(也就是还有38.9G空闲,这40G留作将来分区的使用,这是在不使用LVM时刷的一点小计谋,将部分驱动器保留部分区是一种为今后的扩充作准备的简单有效的方法.不过,如果使用LVM会有更
好的方法).采用标准分区/dev/hda1  /boot 100M大小 /dev/hda2  swap  1G大小/dev/hda3  /     10G大小/dev/hda5  /ftp  30G当我使用df命令的时候看到/dev/hda5也就是/ftp这里已经使用80%了.现在80%使用并不构成什么威胁,但也绝对不是一种良好的状况.100%使用仅仅是时间的问题.我决定在磁盘驱动器的结尾处使用lvm,从38.9G的当前未分区空间中创建一个新的逻辑卷来解决这一个问题.然后,我会在这个卷上创建一个文件系统,并且将/dev/hda5的内容转移到其中.总结一下:将/ftp转换为逻辑卷    在开始之前有一个告诫。因为实现 LVM 是对系统进行的一项重要的变动(包括创建新分区和其它一些潜在的冒险操作),所以在开始这一过程之前备份整个系统 不失为 一个好主意。如果您不想进行备份,我希望您能使用一台没有什么重要数据的测试机器 应该说我在转换到
LVM 时并没有遇到任何问题,但最好做好准备以防万一。    解决方案的开始:    在开始转换之前,首先在硬盘驱动器的结尾处对未使用的空间进行分区,使用fdisk /dev/hda创建一个38.9G的分区/dev/hda6,然后将分区设置成为8e(LVM分区类型).在这一更改后,使用命令partprobe /dev/hda使之立即生效(在红帽官方网站的training上面下的视频RH133课程里面学到的一招)[root@localhost /]# fdisk /dev/hda
Command (m for help): nFirst cylinder (434-652, default 434):Using default value 434Last cylinder or +size or +sizeM or +sizeK (434-652, default 652): +38G
Command (m for help): tPartition number (1-6): 6Hex code (type L to list codes): 8eChanged system type of partition 6 to 8e (Linux LVM)
Command (m for help): wThe partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table.The new table will be used at the next reboot.Syncing disks.[root@localhost /]# partprobe /dev/hda既然有了这38G的空间,我就准备为LVM初始化.首先,我将38G初始化成为物理卷;然后,使用这个物理卷创建一个卷组,最后,在卷组上分配一些范围,创建将包含新文件系统并存放在当前/ftp中所有文件的的逻辑卷.开始这个过程:第一步:使用pvcreate命令将/dev/hda6初始化为物理卷[root@localhost /]# pvcreate /dev/hda6  Physical volume "/dev/hda6" successfully createdpvcreate在/dev/hda6上设置了一个特殊的记号,称作VGDA(卷组描述符区域).LVM使用该区域来记录物理范围是如何分配的以及其他一些操作.
第二步:创建卷组并向该卷组添加/dev/hda6.卷组将充当范围池(许多存储块).创建卷组之后,创建所需数量的逻辑卷.我决定将卷组成为"VG00"[root@localhost /]# vgcreate -s 32M VG00 /dev/hda6  Volume group "VG00" successfully created
32 MB 是个合适的范围大小,因为 32 MB 的颗粒度仍然便于管理,并将引导的最大逻辑卷大小增加到 2 TB。创建卷组之后,可以通过输入
"vgdisplay" 来查看其信息:[root@localhost /]# vgdisplay  --- Volume group ---  VG Name               VG00  System ID  Format                lvm2  Metadata Areas        1  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                1  Act PV                1  VG Size               0  PE Size               32.00 MB  Total PE              0  Alloc PE / Size       0 / 0  Free  PE / Size       0 / 0  VG UUID               07TC54-KdUu-xTgH-HWn4-0d4G-iCMX-MOnRs2
好了,卷组创建成功.  
第三步:既然有了自己的卷组,那么我准备创建逻辑卷.我决定在最初时候将它大小设置为35G,并命名为
lv_ftp[root@localhost /]# lvcreate -L 30G -n lv_ftp VG00  /dev/cdrom: open failed: Read-only file system  Rounding up size to full physical extent 30 GB  Logical volume "lv_ftp" created扩大一点看看[root@localhost /]# lvextend -L 35G  /dev/VG00/lv_ftp  /dev/cdrom: open failed: Read-only file system  Rounding up size to full physical extent 35 GB  Extending logical volume lv_ftp to 35 GB  Logical volume lv_ftp successfully resized
第四步:在逻辑卷/dev/VG00/lv_ftp上面创建文件系统[root@localhost /]# mkfs.ext3 /dev/VG00/lv_ftp
第五步:我们创建好文件系统然后就可以挂载使用了[root@localhost /]# mkdir /ftpnew[root@localhost /]# mount /dev/VG00/lv_ftp /ftpnew
第五步:复制/ftp所有内容。为了确保在复制/ftp所有文件的时候没有用户或进程能够访问或者修改我们
将runlevel更改为1#init 1然后开始复制文件#cp  /ftp/*  /ftpnew复制操作完成后我将/ftp备份为/ftp.bak,这只是为了在复制过程中有任何错误而准备的。然后
把/dev/VG00/lv_ftp挂载到/ftp上 /dev/hda5挂到/ftp.bak上[root@localhost /]# umount /dev/hda5[root@localhost /]# mv ftp ftp.bak[root@localhost /]# mount /dev/hda5 /ftp.bak/[root@localhost /]# umount /ftpnew/[root@localhost /]# mkdir /ftp[root@localhost /]# mount /dev/VG00/lv_ftp /ftp然后修改/etc/vstab加入一条描述/dev/mapper/VG00-lvftp      /ftp       ext3       defaults   0 0重新启动也可以用了做到这里也许有人问。你是不是神经病呀?做了这么多操作/ftp就多了5G。ok,问的好,继续往下
第六步:过了两天我发现没有用户抱怨ftp有问题。我们继续来做[root@localhost /]# cd /ftp.bak/[root@localhost ftp.bak]# rm * -rf[root@localhost ftp.bak]# cd ..[root@localhost /]# umount /ftp.bak/[root@localhost /]# fdisk /dev/hda
Command (m for help): tPartition number (1-6): 5Hex code (type L to list codes): 8eChanged system type of partition 5 to 8e (Linux LVM)
Command (m for help): wThe partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table.The new table will be used at the next reboot.Syncing disks.[root@localhost /]# partprobe /dev/hda[root@localhost /]# pvcreate /dev/hda5  Physical volume "/dev/hda5" successfully created[root@localhost /]# vgextend VG00 /dev/hda5  /dev/cdrom: open failed: Read-only file system  Attempt to close device '/dev/cdrom' which is not open.  Volume group "VG00" successfully extended
ok.现在知道我的意思了吗?自己vgdisplay一下看看!
最后一步:[root@localhost /]# lvextend -L 55G /dev/VG00/lv_ftp  Extending logical volume lv_ftp to 55 GB  Logical volume lv_ftp successfully resized
扩展一下,我的/ftp又不够用了,怎么办呢?找块硬盘来~下面我就把做的这个过程贴出来。省去说明。[root@localhost ~]# fdisk /dev/hdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel. Changes will remain in memory only,until you decide to write them. After that, of course, the previouscontent won't be recoverable.

The number of cylinders for this disk is set to 6241.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs   (e.g., DOS FDISK, OS/2 FDISK)Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-6241, default 1):Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-6241, default 6241):Using default value 6241
Command (m for help): tSelected partition 1Hex code (type L to list codes): 8eChanged system type of partition 1 to 8e (Linux LVM)
Command (m for help): wThe partition table has been altered!
Calling ioctl() to re-read partition table.Syncing disks.[root@localhost ~]# partprobe /dev/hdb[root@localhost ~]# pvcreate /dev/hdb1  Physical volume "/dev/hdb1" successfully created[root@localhost ~]# vgextend VG00 /dev/hdb1  /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 "VG00" successfully extended[root@localhost ~]# lvextend -L 100G /dev/VG00/lv_ftp  Extending logical volume lv_ftp to 100.00 GB  Logical volume lv_ftp successfully resized
您可以看出 LVM 的确可以让管理员的工作轻松许多。我希望在今后能将根文件系统的其它部分转移到LVM,最终甚至将我的根文件系统转换成 LVM 逻辑卷。


[重要]LVM安全缩小五步:
1.umount mountpoint
2.e2fsck -f /dev/VGname/LVname
3.resize2fs /dev/VGname/LVname size
4.lvreduce -L size /dev/VGname/LVname
5.mount /dev/VGname/LVname mountpoint






欢迎光临 德克云技术联盟 (http://www.decoclouds.com/)