先感谢各位51cto的博友们,谢谢大家的支持。希望将来的学习中能得到大家更多的意见。昨天怀着这个愿望,真真实实跟大家分享一下菜鸟学习lvm的经历。
     特别说明: 红色字体代表应该注意的地方,或者重点; 蓝色的字体代表实验命令部分,和命令输出该留意观察的部分
      逻辑卷我原本听来就是跟wins下的卷弄成一样咯,大家都是卷嘛。wins下新建一个分区就是添加一个卷,还可以设置卷名等等。逻辑卷也有,添加卷跟卷名。怎么办?
       当然有办法:
其实:wins下面的卷只单纯分区,格式化后就能用了,就是一次分区,或者我们把它形象的说成一级分区;那逻辑卷是不是有好“几级分区”,是的,把磁盘做成逻辑卷一共做了三次哦!所以我们形象得说逻辑卷是三级分区。
       好了,知道逻辑卷之后再来使用一下lvm这个工具,lvm(logical volume manager)逻辑卷管理工具。对逻辑卷进行四种管理动作
allocating disks 分配磁盘
striping        条带化
mirroring        镜像
resizing logical volumes. 自由定义逻辑卷大小。
       当然这四个动作完全可以不用GUI的界面做,强烈推荐命令行操作!简单,容易记。
 逻辑卷的制作步骤:( 声明:本图片来源于redhat 文档网站
  pv(物理卷8e)---------->vg (虚拟硬盘)----------->lv(逻辑卷)



pv:我们可以把一个磁盘分成多个独立的物理卷,标记为8e;
vg:把多个独立的物理卷放到一个卷组里面管理,把物理卷揉成了一个整体;
lv:再把卷组这个整体进行以指定区单位的大小进行分配。最终形成逻辑卷
       注意:/boot不能做在逻辑卷上的,因为grub不认lv,谁叫它搞得那么复杂呀。所以做系统的时候如果采用逻辑卷的方案要把/boot单独分出来。

逻辑卷的特点
      伸缩自如,特别是在主分区做成逻辑分区的时候,要是/(根)不够的情况下就可以增加容量咯,哪个独立分区的很少用但有占了挺大的空间那就缩小一些。
特别注意 :增大逻辑卷的量不能超过,物理卷的实际大小;缩小逻辑卷后的大小不能小于所在操作的逻辑卷真实文件量的大小,比如2G的/home,我只用了500M那么你一定不能缩成比500M小,否则你懂的,建议不原来的大一些,看需求吧,缩成600M就好了。下面就把剩余的56M在分给part_one!

实验环境:
KVM+RHEL6.0 添加一个磁盘分区如下。8个等大的分区。实验先用
/dev/sda5 ,/dev/sda6
Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                     1                8001     83    Linux
/dev/sda2                             2                 522         4184932+     5    Extended
/dev/sda5                             2                    66            522081     8e    Linux LVM
/dev/sda6                            67                 131            522081     8e    Linux LVM
/dev/sda7                         132                 196            522081     83    Linux
/dev/sda8                         197                 261            522081     83    Linux
/dev/sda9                         262                 326            522081     83    Linux
/dev/sda10                        327                 391            522081     83    Linux
/dev/sda11                        392                 456            522081     83    Linux
/dev/sda12                        457                 521            522081     83    Linux

     现在来看看做个逻辑卷需要那些命令。
制作逻辑卷的命令规则:
   pv+动作
   vg+动作
   lv +动作
第一步:制作物理卷
pv(物理卷)+动作
pvcreate //创建物理卷
[root@localhost ~]# pvcreate /dev/sda5
    Physical volume "/dev/sda5" successfully create
pvs           //查看物理卷
[root@localhost ~]# pvs
    PV                 VG     Fmt    Attr PSize     PFree    
    /dev/sda5             lvm2 a-     509.84m 509.84m
pvscan     //扫描系统上的物理卷
[root@localhost ~]# pvscan
    PV /dev/sda5                                            lvm2 [509.84 MiB]
    Total: 1 [509.84 MiB] / in use: 0 [0     ] / in no VG: 1 [509.84 MiB]
pvdisplay  //显示物理卷的详细信息
[root@localhost ~]# pvdisplay
    "/dev/sda5" is a new physical volume of "509.84 MiB"
    --- NEW Physical volume ---
    PV Name                             /dev/sda5     //物理卷名
    VG Name                            
    PV Size                             509.84 MiB        //物理卷大小
    Allocatable                     NO                             //不可分配
    PE Size                             0                                        // PE的大小
    Total PE                            0                                        //总PE数
    Free PE                             0                                     // 空闲PE
    Allocated PE                    0                                // 分配的PE
    PV UUID                             oKjG81-6OeW-BDZh-RLQ3-9rd0-kckI-dus810         //唯一ID

第二步:卷组的命令
vg(卷组)+动作
vgcreate    //记住卷组是有名字的呀,所以你建的时候记得要给弄个好名字。
[root@localhost ~]# vgcreate kiku /dev/sda5
    Volume group "kiku" successfully created
分析: 如果要增加第二个pv咋办,还create吗?好像有点不合情理,kiku已经有了,我还create /dev/sda6?
vgextend kiku /dev/sda6 //很合理吧,在已经有的kiku组里增加/dev/sda6,extend就是扩增,扩展的意思。
[root@localhost ~]# vgextend kiku /dev/sda6
    No physical volume label read from /dev/sda6
    Physical volume "/dev/sda6" successfully created
    Volume group "kiku" successfully extended
vgs          //查看卷组
[root@localhost ~]# vgs
VG     #PV #LV #SN Attr     VSize     VFree    
kiku     1     0     0 wz--n- 508.00m 508.00m

vgscan      //扫描系统上的卷组,他会去读所有的pv然后确定pv是否有相应的组,然后更新出来
[root@localhost ~]# vgscan
Reading all physical volumes.    This may take a while...
    Found volume group "kiku" using metadata type lvm2
vgdisplay    //看卷组的详细信息
[root@localhost ~]# vgdisplay
    --- Volume group ---
    VG Name                             kiku    //物理卷名
    System ID                        
    Format                                lvm2        //版本是2哦!
    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                                             //当前PV个数
    Act PV                                1                                                // 在或定的pv个数
    VG Size                             508.00 MiB                //vg大小
    PE Size                             4.00 MiB                         //PE的大小
    Total PE                            127                                         //总PE
    Alloc PE / Size             0 / 0                                     //分配的PE
    Free    PE / Size             127 / 508.00 MiB    //空闲PE
    VG UUID                             pybc9p-zjkG-9Fe1-yGM6-9m7t-g9Dw-wQ7S48

第三步:生成逻辑卷
原理: 假如PE=4M(分配单元,区),意思是把所有的pv容量加在一起然后以一个PE为单位进行分割,逻辑卷的大小就是靠指定的PE个数来确定。所以分出来的逻辑卷肯定是PE的整数倍。
lvcreate -n data -l  80 卷组
-n 指定lv的名字,-l指定pe的块数

现在我准备建3个lv, part_one, part_two, part_three,占80PE,大小是320M。
[root@localhost ~]# lvcreate -n part_one -l 80    kiku
    Logical volume "part_one" created
[root@localhost ~]# lvcreate -n part_two -l 80    kiku
    Logical volume "part_two" created
[root@localhost ~]# lvcreate -n part_three -l 80    kiku
    Logical volume "part_three" created

  80X4=320M,说明是用PE个数来确定的!
[root@localhost ~]# lvdisplay | grep "LV Size"
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB

现在我们的都做完逻辑上的分区了,那么肯定还差一步,创建文件系统。
mkfs.ext4            /dev/卷名/data
[root@localhost ~]# mkfs.ext4 /dev/kiku/part_one
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
81920 inodes, 327680 blocks
16384 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67633152
40 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

正在写入inode表: 完成                                                        
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.    Use tune2fs -c or -i to override.
做下一tune2fs
[root@localhost ~]# tune2fs -i 0 -c 0 /dev/kiku/part_one
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds

如果要开机自动挂载那么; 这一部分就涉及了文件系统的管理哦
#blkid                                    // 这个命令很好用
/dev/vda1: UUID="efd0f0d2-f8ce-4e39-a253-c1c7c1ccc85c" TYPE="ext4"
/dev/vda2: UUID="a4c93ea1-cab7-457f-a821-1d7491f7586f" TYPE="swap"
/dev/sda5: UUID="oKjG81-6OeW-BDZh-RLQ3-9rd0-kckI-dus810" TYPE="LVM2_member"
/dev/sda6: UUID="rN4kQz-RwXW-bByF-ysfn-I592-epwt-NFdkzn" TYPE="LVM2_member"
/dev/mapper/kiku-part_one: UUID="d19698f5-2672-4e1d-b1c0-6b2454ba3493" TYPE="ext4"
[root@localhost ~]# cd /etc/
[root@localhost etc]# cp fstab fstab.bak //养成习惯先备份!
cp:是否覆盖"fstab.bak"? y
[root@localhost etc]# vim fstab

mount --a //开机自动挂载咯:成功
[root@localhost ~]vim /etc/fstab
/dev/mapper/kiku-part_one    /part_one     ext4    defaults    0    0
mount -a // 看看有没有自动挂载。
[root@localhost etc]# mount -a /dev/mapper/kiku-part_one
mount: /dev/mapper/kiku-part_one already mounted or /part_one busy
mount: according to mtab, /dev/mapper/kiku-part_one is already mounted on /part_one

   问题思考:这些步骤做完了,那么基本上没问题了。one,two ,three 都等大而且可用. 那么可能用的时候你发现,one ,不够用了!!!而three还有很多没用,而且很少热动他,现在可以考虑把,three缩小给one。

以下几点务必上心:
扩大可以热操作;但是缩小一定冷操作!
扩大不能超过pv值;缩小不能大于文件容量!

[root@localhost ~]# vgs
    VG     #PV #LV #SN Attr     VSize        VFree
    kiku     2     3     0 wz--n- 1016.00m 56.00m

[root@localhost ~]# vgdisplay | grep "PE"
    PE Size                             4.00 MiB
    Total PE                            254
    Alloc PE / Size             240 / 960.00 MiB
    Free    PE / Size              14 / 56.00 MiB

语法:lvextend -L +1G(增量) 或者4G(绝对值) /dev/卷名/data
[root@localhost ~]# lvextend -L +56M    /dev/kiku/part_one
    Extending logical volume part_one to 376.00 MiB
    Logical volume part_one successfully resized
      查看结果:
[root@localhost ~]# vgs
    VG     #PV #LV #SN Attr     VSize        VFree
    kiku     2     3     0 wz--n- 1016.00m        0
[root@localhost ~]# vgdisplay | grep "PE"
    PE Size                             4.00 MiB
    Total PE                            254
    Alloc PE / Size             254 / 1016.00 MiB
    Free    PE / Size             0 / 0    


[root@localhost ~]# lvdisplay | grep "Size"
    LV Size                                376.00 MiB
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB
[root@localhost ~]# lvdisplay | grep "LE"
    Current LE                         94
    Current LE                         80
    Current LE                         80


       resize2fs    /dev/卷名/逻辑卷名  大小
我们来仔细看一下这resize2fs到底有什么用:
[root@studnet20 ~]# man resize2fs
NAME
             resize2fs - ext2/ext3/ext4 file system resizer(用来做ext2,3,4重新定义大小的工具)
SYNOPSIS
             resize2fs    [    -fFpPM    ]    [ -d debug-flags ] [ -S RAID-stride ] device [
             size ]

DESCRIPTION
The resize2fs program will resize ext2, ext3, or ext4 file systems. (这个程序将会调整ext2,3,4的文件系统大小)    It can    be    used    to enlarge or shrink an unmounted file system located on device( 可以用来扩大或缩小没有挂载的文件系统!!很重要哦!).    If the filesystem is mounted, it can be    used    to    expand    the size    of    the    mounted filesystem (如果该文件系统已经挂载了,哪这个工具只能用来扩展文件系统的大小!!), assuming the kernel supports on-line resizing. (而且还需要内核的支持才能线上调节) (As of this writing, the Linux 2.6 kernel    supports    on-line resize for filesystems mounted using ext3 only.) 2.6内核,只支持ext3的在线操作!

缩小要卸载:
从上到下缩小。文件系统--->分区,分区一定不能盖过文件系统。

[
root@localhost ~]# resize2fs /dev/kiku/part_one 300M //先从文件系统开始操作
resize2fs 1.41.12 (17-May-2010)
请先运行 'e2fsck -f /dev/kiku/part_one'.
他说要先做一下e2fsck -f 的动作才行!
[root@localhost ~]# e2fsck -f /dev/kiku/part_one
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/kiku/part_one: 11/96256 files (0.0% non-contiguous), 22405/385024 blocks
做完之后继续:
[root@localhost ~]# resize2fs /dev/kiku/part_one 300M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/kiku/part_one to 307200 (1k) blocks.
The filesystem on /dev/kiku/part_one is now 307200 blocks long.

文件系统做完之后,该做分区上的动作了,现在对逻辑卷缩小!
[root@localhost ~]# lvreduce -L    300M /dev/kiku/part_one
    WARNING: Reducing active logical volume to 300.00 MiB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce part_one? [y/n]: y
    Reducing logical volume part_one to 300.00 MiB
    Logical volume part_one successfully resized
日志提示已经成功咯!

      现在的话我想不用逻辑卷了,把实验环境卸掉。那么跟缩小的思路差不多,要成上面开始:
    卸载+remove
   卸载lv ------>卸载vg----------->卸载pv
这样做完就能释放/dev/sda5 /dev/sda6

vgreduce 卷名 /dev/sdb6     // 要脱掉lv然后在删除。

[root@localhost ~]# lvremove /dev/kiku/part_one
Do you really want to remove active logical volume part_one? [y/n]: y
    Logical volume "part_one" successfully removed
[root@localhost ~]# lvs             //part_one已经没了哦
    LV                 VG     Attr     LSize     Origin Snap%    Move Log Copy%    Convert
    part_three kiku -wi         a-320.00m                                                                            
    part_two     kiku -wi-a- 320.00m    

[root@localhost ~]# vgremove kiku            //卸载卷组
    Volume group "kiku" successfully removed

[root@localhost ~]# pvremove /dev/sda5    //最后卸载物理卷
    Labels on physical volume "/dev/sda5" successfully wiped
[root@localhost ~]# pvremove /dev/sda6
    Labels on physical volume "/dev/sda6" successfully wiped
      总算罗嗦完了,这就是菜鸟能之所以能完成实验的原因,慢慢看,慢慢想,慢慢做。熬夜做好的。T T ,路还很长,慢慢来。