影院平台搭建 - (11)记录reiser文件系统故障一次

状况很简单:该LVM卷上所有文件均无法访问,提示Input/output error。但fsck又是没有错误的。

dmesg查看信息,为
REISERFS warning (device dm-4): jdm-20002 reiserfs_xattr_get: Invalid hash for xattr (system.posix_acl_access) associated with [2 194 0x0 SD]

搜索Google,发现没有什么文章关于这个故障,都是内核的reiserfs的源代码。只有这里有一篇文章
http://www.mail-archive.com/reiserfs-list@namesys.com/msg16215.html
但那个作者说的方法太抽象了,我完全不会用debugreiser这个工具,网上也没有文档说如何使用。但作者后面提供的解决方案倒是给了我思路,只要清除原有的acl信息就可以了。
于是我就很笨的手工输入命令清除了几个:
setfattr -x system.posix_acl_access <file>
果然很有成效,这几个文件就不报错了。

然后想到手工一个个改太麻烦,于是写了个PHP Shell来自动处理:

#!/usr/bin/php
<?php
if ($_SERVER['argc'] > 1)
{
process($_SERVER['argv'][1]);
}

function process($path)
{
$filenames = scandir($path);
foreach ($filenames as $filename)
if (strncmp($filename, '.', 1) !== 0)
{
exec("setfattr -x system.posix_acl_access \"$path/$filename\"");
if (is_dir("$path/$filename"))
process("$path/$filename");
}
}
?>
执行后,再fsetacl -bR <dir>一下,彻底清除所有的ACL信息,上面这个程序不能清除隐藏文件,所以必须再手工清理一下剩下的一些隐藏文件。
至此,文件系统恢复正常。
类别:影院平台搭建 查看评论
posted @ 2009-09-11 00:27  ayanamist  阅读(270)  评论(0编辑  收藏  举报