一、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主服务器上的文件都加上了执行权限。
阅读(1766) | 评论(1) | 转发(0) |