Chinaunix首页 | 论坛 | 博客
  • 博客访问: 858014
  • 博文数量: 150
  • 博客积分: 5123
  • 博客等级: 大校
  • 技术积分: 1478
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:03
文章分类

全部博文(150)

文章存档

2011年(2)

2010年(139)

2009年(9)

分类: LINUX

2009-02-06 10:01:59

一、VitualBox虚拟机中的文件共享的一个BUG:
我的环境,Host是WindowXP,虚拟机装的是Linux,有一次我把源文件在共享目录中编译,发生如下错误:
root [ /src/bdrr ]# make
make -C /lib/modules/2.6.26/build M=/src/bdrr modules
make[1]: Entering directory `/u/linux-2.6.26'
rm: cannot remove `/src/bdrr/.tmp_versions/*': Protocol error
make[1]: *** [crmodverdir] Error 1
make[1]: Leaving directory `/u/linux-2.6.26'
make: *** [default] Error 2
 
 
后来我测试,只要某个共享目录为空,如下删除共享目录的文件时,就会触发此BUG:
rm /sharedir/*
 
后来我测试了用其它命令,一样报错:
# ls /src/bdrr/.tmp_versions/*
ls: cannot access /src/bdrr/.tmp_versions/*: Protocol error
 
我估计这个错误的原因是,当一个共享目录为空时,列表这个共享目录时,由于目录下没有文件,为空,这时Virtualbox处理这种为空的情况就出错了错误。
解决方法为:
解开源码包:
cd /vboxsetup
/mnt/cdrom/VBoxLinuxAdditions.run --tar xvf  #如果是VirtualBox2.02版本文件是VBoxLinuxAdditions-x86.run。
把源代码module/vboxvfs/*.c中\错误码“EPROTO”都改成“ENOENT”:
sed -i "s/\-EPROTO/\-ENOENT/g" `grep "\-EPROTO" -rl /u/vbox/module/vboxvfs/*.c`
 
 
然后重新安装vboxvfs文件系统模块:
./install.sh vfs-module
 
问题解决。
 
问题二:
使用VirtualBox虚拟机时,从主服务器共享过来的文件的权限是0666,没有执行权限,这样很不方便,比如说想把oracle的安装文件解压在主服务器上时,无法通这共享主服务器上的安装文件来安装,原因是主服务器上的安装文件无执行权限。
通过下面的修改可以把共享过来的文件的默认的权限改为0777。
把附加工具mount到光盘中,/mnt/cdrom
建任意一个目录如vboxsetup
cd /vboxsetup
/mnt/cdrom/VBoxLinuxAdditions.run --tar xvf  #如果是VirtualBox2.02版本文件是VBoxLinuxAdditions-x86.run。
 
修改解压的目录下的module/vboxvfs目录中的文件utils.c,在其中加入如下代码:
 
/* set [inode] attributes based on [info], uid/gid based on [sf_g] */
static void
sf_init_inode (struct sf_glob_info *sf_g, struct inode *inode,
               RTFSOBJINFO *info)
{
        int is_dir;
        RTFSOBJATTR *attr;
        int mode;
 
        TRACE ();
 
        attr = &info->Attr;
        is_dir = RTFS_IS_DIRECTORY (attr->fMode);
 
#define mode_set(r) attr->fMode & (RTFS_UNIX_##r) ? (S_##r) : 0;
        mode = mode_set (ISUID);
        mode |= mode_set (ISGID);
 
        mode |= mode_set (IRUSR);
        mode |= mode_set (IWUSR);
        mode |= mode_set (IXUSR);
 
        mode |= mode_set (IRGRP);
        mode |= mode_set (IWGRP);
        mode |= mode_set (IXGRP);
 
        mode |= mode_set (IROTH);
        mode |= mode_set (IWOTH);
        mode |= mode_set (IXOTH);
#undef mode_set
//add by  tangcheng begin
        if(RTFS_DOS_MASK&attr->fMode)
        {
            mode |= S_IXUSR|S_IXGRP|S_IXOTH;
        }
//add by  tangcheng end
运行install.sh vfs-module安装后,重新启动机器后,再mount主服务器上的文件都加上了执行权限。
阅读(1761) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-03-18 20:19:02

thanks for share~