加载中…
个人资料
无知的世界
无知的世界
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,061
  • 关注人气:23
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SUSE Linux重启后vg无法正常挂载问题解决

(2014-03-20 21:53:47)
标签:

suse

vg无法挂载

boot.d

init.d

not_avaiable

it

分类: linux
先前在SUSE Linux Enterprise SP1上划分vg的时候,遇到一个问题,先后遇到过两次:
第一次:需要新建一个vg,把来某个文件系统的数据移动到这个vg的lv中,然后再将原来的文件系统作为pv加入这个vg中,然后在最后resize2fs的时候以外发生了中断,重启之后lv无法正常挂载,vg和lv设备文件丢失,/dev/vg00目录丢失,lv状态变成not available,执行lvchange -ay lv_name之后lv变为可用。至此问题搁置
第二次:正常流程,pv -> vg -> lv,写入fstab,重启,问题又出现了,和上面的情况相同
(不晓得这算不算是SUSE的一个bug,这个bug也太惊人了吧?系统的基本组件都能出问题)
然后就在google上找到了这个解决方法:
原文链接:http://www.linuxquestions.org/questions/linux-software-2/lvm2-special-device-missing-after-reboot-875156/
给出的解决方案如下:
cd /etc/init.d/boot.d
ln -s ../boot.lvm S05boot.lvm && ln -s ../boot.lvm K05boot.lvm

其实这是创建了两个连接文件:
/etc/init.d/boot.d/S05boot.lvm --> /etc/init.d/boot.lvm
/etc/init.d/boot.d/K05boot.lvm --> /etc/init.d/boot.lvm

这两个连接指向一个文件,就是boot.lvm文件

接下来我们来了解一下解决的原理:
在/etc/init.d目录中有一个boot文件,这个文件在系统启动的过程中,是init进程调用的第一个Script文件,其主要执行的工作是挂载procfs,sysfs以及devpts这一类的文件系统,启动/etc/init.d/boot.d目录中名称是S开头的scripts,并执行/etc/init.d/boot.local这个script。这些scripts主要执行的工作如载入必须的核心模块,启动lvm,检查以及挂载本地端的文件系统/etc/fstab、设定硬件时间、备份核心信息,启动swap,设置hostname等等

至此问题明晰了,在开机过程中,/etc/init.d/boot这个文件执行中,会去调用/etc/init.d/boot.d目录中以S开头的文件,调用方式:/etc/init.d/boot.d/S05boot.lvm start,但是,这两个文件并不存在(不知道是由于系统包安装不完全,还是这确然是一个bug)。所以,init无法初始化lvm的相关设置,所以在启动完成之后,vg信息还会在内存中,但是相关的设备文件没有初始化,所以lv的状态变成了not available,调用lvchange -ay lv_name之后,重新激活了lv,重置了相关设置,所以文件能得以重建。
将两个连接文件建立之后,不论是在开机还是关机的时候,init进程都能找到相应的文件来初始化或者释放掉相关的资源,vg恢复正常。  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有