首先解释一下几个关键词
pv: physical volume 物理卷,就是用物理磁盘组成的卷,要在物理磁盘上创建。
vg:volume group卷组,就是物理卷组成的卷组合,要在物理卷基础上创建。
lv:logical volume逻辑卷,可以理解为逻辑可动态分配的磁盘空间,要在卷组上创建。
所以lvm的创建顺序就是,物理磁盘分区(也可以不分区),在物理分区上创建pv,在pv上创建vg,在vg上创建lv,然后格式化lv挂载使用
ok,下面具体来操作一下逻辑卷的创建以及空间扩容和删除
我们使用的虚拟机sdb磁盘来分几个区做一下测试(一般可使用多个磁盘直接加入到卷组,这里我们使用物理磁盘的多个分区,操作方法相同)
<code>01</code>
<code>[root@cnhejia ~]</code><code># fdisk -l</code>
<code>02</code>
<code>03</code>
<code>disk /dev/sdb: 21.5 gb, 21474836480 bytes</code>
<code>04</code>
<code>255 heads, 63 sectors/track, 2610 cylinders</code>
<code>05</code>
<code>units = cylinders of 16065 * 512 = 8225280 bytes</code>
<code>06</code>
<code>sector size (logical/physical): 512 bytes / 512 bytes</code>
<code>07</code>
<code>i/o size (minimum/optimal): 512 bytes / 512 bytes</code>
<code>08</code>
<code>disk identifier: 0x32d0a442</code>
<code>09</code>
<code>10</code>
<code>device boot start end blocks id system</code>
先将sdb分3个100m的分区出来
<code>[root@cnhejia ~]</code><code># fdisk /dev/sdb <<eof</code>
<code>n</code>
<code>p</code>
<code>1</code>
<code>+100m</code>
<code>2</code>
<code>11</code>
<code>12</code>
<code>13</code>
<code>14</code>
<code>15</code>
<code>3</code>
<code>16</code>
<code>17</code>
<code>18</code>
<code>w</code>
<code>19</code>
<code>eof</code>
<code>20</code>
<code>21</code>
<code>22</code>
<code>23</code>
<code>24</code>
<code>25</code>
<code>26</code>
<code>27</code>
<code>28</code>
<code>29</code>
<code>30</code>
<code>31</code>
<code>/dev/sdb1 1 14 112423+ 83 linu x</code>
<code>32</code>
<code>/dev/sdb2 15 28 112455 83 linu x</code>
<code>33</code>
<code>/dev/sdb3 29 42 112455 83 linu x</code>
将sdb[1-3]转换为物理卷
<code>[root@cnhejia ~]</code><code># pvcreate /dev/sdb[1-3]</code>
<code>physical volume </code><code>"/dev/sdb1"</code> <code>successfully created</code>
<code>physical volume </code><code>"/dev/sdb2"</code> <code>successfully created</code>
<code>4</code>
<code>physical volume </code><code>"/dev/sdb3"</code> <code>successfully created</code>
使用pvs查看目前的物理卷情况,都没有加入vg
<code>[root@cnhejia ~]</code><code># pvs</code>
<code>pv vg fmt attr psize pfree</code>
<code>/dev/sdb1 lvm2 a-- 109.79m 109.79m</code>
<code>/dev/sdb2 lvm2 a-- 109.82m 109.82m</code>
<code>5</code>
<code>/dev/sdb3 lvm2 a-- 109.82m 109.82m</code>
现在我们先将sdb1和sdb2加入一个卷组vgtest
<code>[root@cnhejia ~]</code><code># vgcreate vgtest /dev/sdb[1-2]</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully created</code>
<code>[root@cnhejia ~]</code><code># vgs</code>
<code>vg </code><code>#pv #lv #sn attr vsize vfree</code>
<code>volgroup 1 2 0 wz--n- 19.51g 0</code>
<code>vgtest 2 0 0 wz--n- 216.00m 216.00m</code>
<code>/dev/sda2 volgroup lvm2 a-- 19.51g 0</code>
<code>/dev/sdb1 vgtest lvm2 a-- 108.00m 108.00m</code>
<code>/dev/sdb2 vgtest lvm2 a-- 108.00m 108.00m</code>
<code>[root@cnhejia ~]</code><code>#</code>
卷组vgtest创建成功,并且将sdb1和sdb2加入了这个卷组,通过vgs可以看到卷组大小为216m
现在我们在卷组vgtest上创建一个名为lvtest的100m的逻辑卷,这样才能真正使用这个磁盘
<code>[root@cnhejia ~]</code><code># lvcreate -l 100m -n lvtest vgtest</code>
<code>logical volume </code><code>"lvtest"</code> <code>created</code>
<code>[root@cnhejia ~]</code><code># lvs</code>
<code>lv vg attr lsize pool origin data% move log cpy%sync convert</code>
<code>lv_root volgroup -wi-ao---- 17.57g</code>
<code>6</code>
<code>lv_swap volgroup -wi-ao---- 1.94g</code>
<code>7</code>
<code>lvtest vgtest -wi-a----- 100.00m</code>
这时候就可以对lvtest进行格式化使用了
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/vgtest/lvtest</code>
<code>或者</code>
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/mapper/vgtest-lvtest</code>
<code>mapper下会生成卷组映射,等同于软连接一样,操作完全同步。</code>
<code>[root@cnhejia ~]</code><code># mkfs.ext4 /dev/mapper/vgtest-lvtest ^c</code>
<code>[root@cnhejia ~]</code><code># mount /dev/mapper/vgtest-lvtest /mnt/</code>
<code>[root@cnhejia ~]</code><code># df -h</code>
<code>filesystem size used avail use% mounted on</code>
<code>/dev/mapper/volgroup-lv_root 18g 3.6g 13g 22% /</code>
<code>tmpfs 495m 0 495m 0% /dev/shm</code>
<code>/dev/sda1 485m 70m 391m 16% /boot</code>
<code>/dev/mapper/vgtest-lvtest 97m 5.6m 87m 7% /mnt</code>
目前已经成功挂载完成在物理卷sdb1和sdb2上创建的卷组vgtest上创建的100m大小的逻辑卷lvtest
如果这100m的mnt目录不够用怎么办?逻辑卷的好处就是动态无损扩容,使用lvextend增加空间然后使用resize2fs重新同步磁盘大小。操作方法如下:
<code>[root@cnhejia ~]</code><code># lvextend -l +50m /dev/mapper/vgtest-lvtest</code>
<code>rounding size to boundary between physical extents: 52.00 mib</code>
<code>extending logical volume lvtest to 152.00 mib</code>
<code>logical volume lvtest successfully resized</code>
<code>lvtest vgtest -wi-ao---- 152.00m</code>
<code>[root@cnhejia ~]</code><code># resize2fs /dev/mapper/vgtest-lvtest</code>
<code>resize2fs 1.41.12 (17-may-2010)</code>
<code>filesystem at /dev/mapper/vgtest-lvtest is mounted on /mnt; on-line resizing required</code>
<code>old desc_blocks = 1, new_desc_blocks = 1</code>
<code>performing an on-line resize of /dev/mapper/vgtest-lvtest to 155648 (1k) blocks.</code>
<code>the filesystem on /dev/mapper/vgtest-lvtest is now 155648 blocks long.</code>
<code>/dev/mapper/vgtest-lvtest 148m 5.6m 135m 4% /mnt</code>
mnt目录已经成功变成150m了
如果想减少这个逻辑卷的空间,操作也很简单:
<code>umount</code> <code>/mnt</code>
<code>//检测空间使用情况</code>
<code>[root@cnhejia ~]</code><code># e2fsck -f /dev/mapper/vgtest-lvtest</code>
<code>//将逻辑卷调整为100m即可</code>
<code>[root@cnhejia ~]</code><code># resize2fs /dev/mapper/vgtest-lvtest 100m</code>
这时候如果两个物理卷200m都用光了怎么办?没关系,lvm也可以将新的磁盘加进来。现在我们就把sdb3加进来,操作方法如下:
<code>[root@cnhejia ~]</code><code># pvcreate /dev/sdb3</code>
<code>[root@cnhejia ~]</code><code># vgextend vgtest /dev/sdb3</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully extended</code>
<code>[root@cnhejia ~]</code><code># vgdisplay</code>
<code>--- volume group ---</code>
<code>vg name vgtest</code>
<code>system id</code>
<code>format lvm2</code>
<code>metadata areas 3</code>
<code>metadata sequence no 4</code>
<code>vg access </code><code>read</code><code>/write</code>
<code>vg status resizable</code>
<code>max lv 0</code>
<code>cur lv 1</code>
<code>open lv 1</code>
<code>max pv 0</code>
<code>cur pv 3</code>
<code>act pv 3</code>
<code>vg size 324.00 mib</code>
<code>pe size 4.00 mib</code>
<code>total pe 81</code>
<code>alloc pe / size 38 / 152.00 mib</code>
<code>free pe / size 43 / 172.00 mib</code>
<code>vg uuid xh0p8e-fmpu-oa4g-nnp4-9vcn-tizn-szylsq</code>
怎么样,vgtest这个卷组有300m空间了吧,需要的话可以都放到/mnt的挂载下。
——————————————————————————————
上述是创建和使用管理的一些介绍,如果某个分区/硬盘可能健康状态不好,要卸载或者移出或者更换怎么办?
先使用pvmove将看着不爽的物理卷数据转移,数据转移完成后然后使用vgreduce将看着不爽的物理卷从卷组移出,然后使用pvremove删除物理卷,这个磁盘就变成普普通通的磁盘了,爱修爱丢随便你;
假设现在sdb2这个分区(或者磁盘)坏了,要移除,但是数据不能丢,操作步骤如下:
<code>[root@cnhejia ~]</code><code># pvmove /dev/sdb2</code>
<code>/dev/sdb2: moved: 18.5%</code>
<code>/dev/sdb2: moved: 100.0%</code>
<code>[root@cnhejia ~]</code><code># vgreduce vgtest /dev/sdb2</code>
<code>removed </code><code>"/dev/sdb2"</code> <code>from volume group </code><code>"vgtest"</code>
<code>[root@cnhejia ~]</code><code># pvremove /dev/sdb2</code>
<code>8</code>
<code>labels on physical volume </code><code>"/dev/sdb2"</code> <code>successfully wiped</code>
至此sdb2这个分区和lvm已经没有关系了
一个vg卷组是可以创建多个lv逻辑卷的,如果有一个卷你不想要了直接执行lvremove即可
<code>[root@cnhejia ~]</code><code>#lvremove /dev/mapper/vgtest/lvtest</code>
如何删除整个系统的卷组,不再使用lvm?
需要数据先备份,不要数据直接操作,操作如下:
<code>[root@cnhejia ~]</code><code># vgremove vgtest</code>
<code>do you really want to remove volume group </code><code>"vgtest"</code> <code>containing 1 logical volumes? [y/n]: y</code>
<code>do you really want to remove active logical volume lvtest? [y/n]: y</code>
<code>logical volume </code><code>"lvtest"</code> <code>successfully removed</code>
<code>volume group </code><code>"vgtest"</code> <code>successfully removed</code>
这时候fdisk就不再能看到之前的卷组了,pvremove移出卷组即可,直接重分区格式化其实也可以。
注意:
如果磁盘添加到了vg中,并且vg是激活的,那么再去对磁盘分区表做修改的时候会失败,提示readonly。
先通过vgchange -a n vgname取消vg的激活状态再通过fdisk分区,分区后通过vgchange -ay vgname重新激活即可。
当然,激活状态去修改原有的磁盘分区表增加新的分区,重启后一般也能够正常生效。