免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1288 | 回复: 0
打印 上一主题 下一主题

VitualBox中从主机共享文件中的BUG及其解决方法 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2015-06-18 22:20:00数据库技术版块每日发帖之星
日期:2015-06-21 22:20:00数据库技术版块每日发帖之星
日期:2015-08-27 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-06 10:01 |只看该作者 |倒序浏览

一、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主服务器上的文件都加上了执行权限。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84422/showart_1815144.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP