Xupeng's blog

Nov 8, 2006 - 2 minute read - Comments

昨晚遭遇LVM2误操作,灾难恢复折腾人

把新硬盘转为 LVM2 有个把月了,lv 的缩放的确方便,尽管不是天天缩放来玩儿,但说不定哪天就有这样的需要了,比如昨天就遇到这样的情况。昨天想要安装一个 Ubuntu 以备不时之需,因为新硬盘全部使用 LVM2 管理,这就需要从现在的 vg 中划分出一些空间给 Ubuntu 使用。/dev/vg/data 这个 lv 有 110G 大小,其中只有 30G 多的数据,于是进行了如下的操作:

(以下操作极度危险,请小朋友不要模仿)

lvreduce -L5G /dev/vg/data

就是这条命令带来了我几个小时的噩梦,我的本意是把 /dev/vg/data 减小 5G,但这条命令的实际含义是减小到 5G,天哪。当我又敲下 resizefs.reiserfs /dev/vg/data 时提示我其空间不足以容下现有的数据,这时我才意识到自己犯了一个多大的错误。

卸下 /dev/vg/data 的挂载,试图再次挂载的时候已经造成了灾难:无法挂载!虽说不是什么宝贵的数据,那点学习资料也是辛辛苦苦下载的啊,可不能付诸东流了。

恢复 lv 的大小:

lvresize -L110G /dev/vg/data

把希望寄托在 fsck 上吧:

fsck.reiserfs /dev/vg/data

并不奏效,提示需要使用 --rebuild-tree,以前曾经遇到过 reiserfs 的故障,同样是无法挂载,rebuild-tree 之后就好了,看到这样的提示稍稍放松了些。

fsck.reiserfs --rebuild-tree /dev/vg/data

漫长的等待后 fsck 终于结束了,再次尝试挂载成功,看看可爱的数据还在,心里踏实了。

其实正确的缩小 lv 的步骤应该是:

resizefs.reiserfs -s-5G /dev/vg/data
lvresize -L-5G /dev/vg/data

创建新的 lv :

lvcreate -L5G -n ubuntu vg

一开始步骤就颠倒了,难免铸成大错,还好这是我个人的计算机,也没有什么太珍贵的数据,再也还好数据基本上都恢复了。这是一个教训,来的早是好事,吃一堑长一智,以后决不能再犯这样的错误了。