天天看点

LVM的创建,修改大小,删除以及彻底卸载的操作步骤

首先解释一下几个关键词

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 &lt;&lt;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重新激活即可。

当然,激活状态去修改原有的磁盘分区表增加新的分区,重启后一般也能够正常生效。

继续阅读