逻辑卷管理器 (Logical Volume Manager)

LVM 的重点在于『可以弹性的调整 filesystem 的容量!』而并非在于性能与数据保全上面。  LVM 可以整合多个物理分区在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。 如此一来,整个磁盘空间的使用上,实在是相当的具有弹性啊! LVM 的作法是将几个实体的 partitions (或 disk) 通过软件组合在一起看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分割成为可使用分区 (LV), 最终就能够挂载使用了。


Physical Volume, PV, 物理卷

我们实际的 partition 需要调整系统标识符 (system ID) 成为 8e (LVM 的标识符),然后再经过pvcreate 的命令将他转成 LVM 最底层的物理卷 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是透过 fdisk 啦!


Volume Group, VG, 卷用户组

所谓的 LVM 大磁盘就是将讲多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与下面要说明的 PE 有关喔~因为每个 VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量啊!(参考底下的 PE 说明)


Physical Extend, PE,物理扩展块

LVM 默认使用 4MB 的 PE 块,而 LVM 的 VG 最多仅能包含 65534 个 PE ,因此默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存块,也就是说,其实我们的文件数据都是由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量喔!


Logical Volume, LV, 逻辑卷

最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区的东西了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便用户利用 LVM 来管理其系统,因此 LV 的设备文件名通常指定为『 /dev/vgname/lvname 』的样式! 此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他设备中以降低 LV 容量,或将其他设备的 PE 加到此 LV 中以加大容量! VG、LV 不 PE 的关系有点像下图:



数据写入这个 LV 时,到底他是怎么写入硬盘当中的? 依据写入机制的不同,而有两种方式:
 线性模式 (linear):假如我将 /dev/sda1, /dev/sdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/hda1 的容量用完之后,/dev/hdb1 的硬盘才会被使用到, 这也是我们所建议的模式。
 交错模式 (triped):那什么是交错模式?很简单啊,就是我将一条数据拆成两部分,分别写入 /dev/sda1 不 /dev/sdb1 的意思,感觉上有点像 RAID 0 啦!如此一来,一条数据用两颗硬盘来写入,理论上,读写的效能会比较好。


LVM 实作流程


我的要求有点像这样:
 先分割出 4 个 partition ,每个 partition 的容量均为 8GB 左右,且 system ID 需要为 8e;
 全部的 partition 整合成为一个 VG,VG 名称讴定为 ingvg;且 PE 的大小为 16MB;
 全部的 VG 容量都丢给 LV ,LV 的名称讴定为 inglv;
 最终这个 LV 格式化为 ext3 的文件系统,且挂载在 /mnt/lvm 中

这里就不仔细的介绍物理分区了,请您自行参考 fdisk 来达成底下的范例:(注意:修改系统标识符请使用 t 这个 fdisk 内的命令来处理即可)

[root@linux ~]# fdisk -l | grep 8e
/dev/sdb1               1        1044     8385898+  8e  Linux LVM
/dev/sdc1               1        1044     8385898+  8e  Linux LVM
/dev/sdd1               1        1044     8385898+  8e  Linux LVM
/dev/sde1               1        1044     8385898+  8e  Linux LVM
注意看,那个 8e 的出现会导致 system 变成『 Linux LVM 』哩!


PV 阶段
要建立 PV 其实很简单,只要直接使用 pvcreate 即可!我们来谈一谈不 PV 有关的指令吧!
 pvcreate :将实体 partition 建立成为 PV ;
 pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
 pvdisplay :显示出目前系统上面的 PV 状态;
 pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

[root@linux ~]# pvscan
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  No matching physical volumes found                                   --找不到任何PV的存在
[root@linux ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdd1" successfully created
  Physical volume "/dev/sde1" successfully created
[root@linux ~]# pvscan
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  PV /dev/sdb1                      lvm2 [8.00 GB]
  PV /dev/sdc1                      lvm2 [8.00 GB]
  PV /dev/sdd1                      lvm2 [8.00 GB]
  PV /dev/sde1                      lvm2 [8.00 GB]
  Total: 4 [31.99 GB] / in use: 0 [0   ] / in no VG: 4 [31.99 GB]
[root@linux ~]# pvdisplay
  /dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
  /dev/cdrom: read failed after 0 of 2048 at 4294836224: 输入/输出错误
  /dev/cdrom: read failed after 0 of 2048 at 4294955008: 输入/输出错误
  /dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
  /dev/cdrom: read failed after 0 of 2048 at 4096: 输入/输出错误
  /dev/cdrom: read failed after 0 of 2048 at 0: 输入/输出错误
  "/dev/sdb1" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1               --实际的分区设备名称
  VG Name                                       --尚未分配出去所以是空白
  PV Size               8.00 GB                 --就是容量说明
  Allocatable           NO                      --是否已经分配,结果是NO
  PE Size (KByte)       0                       --在次PV内的PE大小
  Total PE              0                       --共分出几个PE
  Free PE               0                       --没有被LV用掉的PE
  Allocated PE          0                       --尚可分配出的PE数量  
  PV UUID               9d856f-jyzU-8lkn-VjrG-t8U2-PaUY-N9pHca
   
  "/dev/sdc1" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               8.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               YpqGb0-o1YE-1qly-AoJZ-RUfk-4P8K-Ug7Snm
   
  "/dev/sdd1" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               8.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tiq9zi-88ip-XiRQ-Kzwq-f3nj-1eaG-7QLHbR
   
  "/dev/sde1" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sde1
  VG Name               
  PV Size               8.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               70Vflv-g2cE-zmJQ-BM6v-N9Fi-TA07-kouTT5

VG 阶段
建立 VG 及 VG 相关的命令也不少,我们来看看:
 vgcreate :就是主要建立 VG 的指令啦!他的参数比较多,等一下介绍。
 vgscan :搜寻系统上面是否有 VG 存在?
 vgdisplay :显示目前系统上面的 VG 状态;
 vgextend :在 VG 内增加额外的 PV ;
 vgreduce :在 VG 内移除 PV;
 vgchange :设定 VG 是否启动 (active);
 vgremove :删除一个 VG 啊!

[root@linux ~]# vgcreate [-s N[mgt]] VG名称 PV名称 
选顷与参数: -s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可) 
[root@linux ~]# vgcreate -s 16m ingvg /dev/sdb1 /dev/sdc1 /dev/sdd1
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  Volume group "ingvg" successfully created
[root@linux ~]# vgscan
  Reading all physical volumes.  This may take a while...
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  Found volume group "ingvg" using metadata type lvm2
[root@linux ~]# pvscan
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  PV /dev/sdb1   VG ingvg           lvm2 [7.98 GB / 7.98 GB free]
  PV /dev/sdc1   VG ingvg           lvm2 [7.98 GB / 7.98 GB free]
  PV /dev/sdd1   VG ingvg           lvm2 [7.98 GB / 7.98 GB free]
  PV /dev/sde1                      lvm2 [8.00 GB]
  Total: 4 [31.95 GB] / in use: 3 [23.95 GB] / in no VG: 1 [8.00 GB]
[root@linux ~]# vgdisplay
  --- Volume group ---
  VG Name               ingvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               23.95 GB           --整体的VG容量大小
  PE Size               16.00 MB           --每个PE的大小
  Total PE              1533               --总共的PE数量
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1533 / 23.95 GB
  VG UUID               NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI

假设我们要增加这个 VG 的容量,因为我们还有 /dev/sde1 嘛!此时你可以这样做:

[root@linux ~]# vgextend ingvg /dev/sde1
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  Volume group "ingvg" successfully extended
[root@linux ~]# vgdisplay
  --- Volume group ---
  VG Name               ingvg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               31.94 GB
  PE Size               16.00 MB
  Total PE              2044
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2044 / 31.94 GB
  VG UUID               NOdo5r-CHA0-W9D8-wBRj-ydV0-3UGm-XJx0vI

LV 阶段
创造出 VG 这个大磁盘之后,再来就是要新建分区啦!这个分区就是所谓的 LV 啰!假设我要将刚刚那个 ingvg,分割成为 inglv ,整个 VG 的容量都被分配到 inglv 里面去!先来看看能使用的指令后,就直接工作了先!
 lvcreate :建立 LV 啦!
 lvscan :查询系统上面的 LV ;
 lvdisplay :显示系统上面的 LV 状态啊!
 lvextend :在 LV 里面增加容量!
 lvreduce :在 LV 里面减少容量;
 lvremove :删除一个 LV !
 lvresize :对 LV 进行容量大小的调整!

[root@linux ~]# lvcreate [-L N[mgt]] [-n LV名称] VG名称
[root@linux ~]# lvcreate [-l N] [-n LV名称] VG名称 
选顷与参数: 
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必项要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。 
-l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数。 
-n :后面接的就是 LV 的名称啦!

[root@linux ~]# lvcreate -l 2044 -n inglv ingvg
  Logical volume "inglv" created
[root@linux ~]# ll /dev/ingvg/inglv
lrwxrwxrwx 1 root root 23 02-17 00:31 /dev/ingvg/inglv -> /dev/mapper/ingvg-inglv
[root@linux ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/ingvg/inglv
  VG Name                ingvg
  LV UUID                4KbMKd-AJkf-z0fi-KtWP-zT5C-qirS-IkVFDv
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                31.94 GB          --这个LV的容量大小。
  Current LE             2044
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

文件系统阶段

[root@linux ~]# mkfs -t ext3 /dev/ingvg/inglv
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
4186112 inodes, 8372224 blocks
418611 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
256 block groups
32768 blocks per group, 32768 fragments per group
16352 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624

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.
[root@linux ~]# mkdir /mnt/lvm
[root@linux ~]# mount /dev/ingvg/inglv /mnt/lvm/
[root@linux ~]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda3              5991232   2656764   3025220  47% /
/dev/sda1               101086     11373     84494  12% /boot
tmpfs                   517548         0    517548   0% /dev/shm
/dev/mapper/ingvg-inglv
                      32963440    180288  31108708   1% /mnt/lvm

下面是用整个磁盘,没有分区来创建lvm的过程:

[root@linux lvm]# mkfs -t ext3 /dev/sdf
mke2fs 1.39 (29-May-2006)
/dev/sdf is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1048576 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
16384 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 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@linux lvm]# mkfs -t ext3 /dev/sdg
mke2fs 1.39 (29-May-2006)
/dev/sdg is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1048576 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
16384 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 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@linux lvm]# pvcreate /dev/sdf /dev/sdg
  Physical volume "/dev/sdf" successfully created
  Physical volume "/dev/sdg" successfully created
[root@linux lvm]# vgcreate -s 32m zshvg /dev/sdf /dev/sdg
  /dev/cdrom: open failed: 只读文件系统
  /dev/cdrom: open failed: 只读文件系统
  Attempt to close device '/dev/cdrom' which is not open.
  Volume group "zshvg" successfully created
[root@linux lvm]# lvcreate -l 510 -n zshlv zshvg
  Logical volume "zshlv" created
[root@linux lvm]# mkfs -t ext3 /dev/zshvg/zshlv
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2088960 inodes, 4177920 blocks
208896 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4278190080
128 block groups
32768 blocks per group, 32768 fragments per group
16320 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@linux lvm]# mkdir /mnt/zshlvm
[root@linux lvm]# mount /dev/zshvg/zshlv /mnt/zshlvm
[root@linux lvm]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda3              5991232   2656784   3025200  47% /
/dev/sda1               101086     11373     84494  12% /boot
tmpfs                   517548         0    517548   0% /dev/shm
/dev/mapper/ingvg-inglv
                      32963440    180292  31108704   1% /mnt/lvm
/dev/mapper/zshvg-zshlv
                      16449448    176068  15437796   2% /mnt/zshlvm


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值