整理自我自己的两篇旧博客,分别介绍 LVM 伸缩控制。

寄宿于LVM存储的xen虚拟机扩容

新主机中划分成一个xen虚拟机集群,全部部署在 lvm 存储上。昨天拖数据的时候发现文件服务器的空间规划比较紧张。于是准备给它扩容。

网上查了很多中文文档,不知道是因为太旧还是什么原因,没有一个靠谱的,操作复杂而且不安全。

最终在一篇英文文章中找到了一个办法,极其简单,并且验证确实可行。

我用来管理虚拟机的是debian的xen-tools,它自动的给基于lvm卷的xen虚拟机分配两个卷,一个disk,一个swap。接下来我们直接给disk扩容。

首先,在宿主机上给lvm扩容。为了安全起见,最好是先把要扩容的虚拟机停掉,实际上我操作的时候忘了先停机……(最好关,重要服务要先备份!)

lvextand,这个使用很简单。假设这个虚拟机的lvm卷是 /dev/stack/vm-disk

  lvextend --size +256G /dev/stack/vm-disk  

然后启动虚拟机,从ssh登录。 确认处于root身份(或者sudo也行),用fdisk 查看设备列表:

  fdisk -l  

你会看到若干存储设备,如果是跟我同样的环境,/dev/xvda2 就是我们刚刚操作的disk文件……(默认swap是1,disk是2)。此时我们会看到,parted或fdisk已经可以查看到设备的容量上调了,但是如果 df -h,看到的仍然是旧的容量。 然后执行

  resize2fs /dev/xvda2  

请耐心等待,命令完成后,扩容就成功了,此时df -h,会看到空间已经上调。不需要像那些中文文章所言的umount系统分区、init 2启动,修改分区表等危险操作!

lvm 空间缩减操作

前几天学会了给lvm动态扩容,有次遇到缩容操作,也照方抓药,却惨遭失败。还好是开发机,默默重装。

问题在哪里呢?搜索了一些资料,在国外的一些社区提到:扩容时,先 lvextend 再 resize2fs ,缩减时先 resize2fs 再 lvreduce。

具体操作了一下,按这里的步骤,可以让lvm2+ext2正确缩减:

[http://www.microhowto.info/howto/reduce_the_size_of_an_ext2_ext3_or_ext4_filesystem.html]

具体步骤呢,以我的开发机为例,这里有一个 /dev/dumpling/storage 设备,挂在 /storage 上,它现在的容量是 8G,我希望它缩减到 4G。

首先卸载设备:

  umount /storage  

然后执行 fsck:

  fsck -f /dev/dumpling/storage  

再 resize2fs:

  resize2fs /dev/dumpling/storage 4G  

再 lvresize:

  lvresize --size 4G /dev/dumpling/storage