您的位置:首页 > 运维架构 > Linux

使用VMware11设置CentOS共享文件夹

2017-01-27 16:24 661 查看
本以为装个tomcat很容易,但是没想到还是遇到了很多的问题,特此写下这篇笔记,为其他有需求的同学提供一些参考。

系统环境:Windows7 + VMWare 11.0准备工具:CentOS 7安装iso文件, apache tomcat以及JDK

操作步骤:

一、使用VMware安装好CentOS系统

  这一步不作详细叙述了,因为对大多数人来说太简单。

二、设置共享文件夹

  由于在离线状态下安装,所以一些工具需要从宿主机的共享文件夹里复制到虚拟机里来,我采用的是设置共享文件夹的方式,不知道其他同学有没有更好的方式。但就是在设置这个共享文件夹的时候出了很多的问题。

  我在安装系统的时候,系统是默认自动安装好VMtool的,但是不知道是什么原因,在我建立共享文件夹后,在/mnt/hgfs下没有我存好的文件。于是我在网上查找了原因,有网友说是因为gcc版本需要升级,但是我这是离线安装,gcc版本升级实在是不太好办。于是我另想办法,决定重新安装vmtools。在vmware选项里选择重新安装vmtools,然后进行了以下步骤

  1.mount /dev/cdrom /mnt/cdrom将vmtools挂载到cdrom文件夹

  2.将cdrom中的VMTool的tar文件拷贝到本地磁盘,然后用tar -zxf VMTool 进行解压

  3.解压之后运行其中的.pl文件

  4.出现一些需要确认的问题,一路Enter

  5.这时候问题来了,突然提示
HgfsWbRequestWait
函数里有一个
wait_on_bit
函数报错,具体的提示内容我没有拷贝下来。然后提示你如果继续请按Enter键,之后安装完毕。看了一下hgfs文件夹,依然空空如也。

  6.用百度搜索了一些解决办法,基本判定是vmtool的源代码文件出了问题。这个文件的位置在之前解压出来的vmware-tools-distrib/lib/modules/source目录下的Page.c文件。

  7.引用CSDN的博主kyolong的文章,链接——http://blog.csdn.net/a39206821/article/details/54313326

  文中提到:

  

通过查看后发现因为centos 7的Linux内核用的3.10版本,在函数 wait_on_bit_io()中有三个参数,而vmtool的代码在内核3.19后才用3个参数的wait_on_bit_io()函数,代码如下

1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
1640    return wait_on_bit_io(&req->wb_flags,
1641                          PG_BUSY,
1642                          TASK_UNINTERRUPTIBLE);
1643 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
1644    return wait_on_bit(&req->wb_flags,
1645                       PG_BUSY,
1646 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
1647                       HgfsWbRequestWaitUninterruptible,
1648 #endif
1649                       TASK_UNINTERRUPTIBLE);
1650 #else


个人推测,在其他linux版本中可能也会出现类是的问题,只要看看报错源码,如果是由于#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0),这种判断造成的报错,只要把宏改成当前的版本号,一般都能解决问题.

vmware-tools-distrib/lib/modules/source的目录下有不少tar文件,我是根据报错的提示

“/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: error: too many arguments to function ‘wait_on_bit’” 一个个去解压了找的

解压指令

tar xf vmhgfs.tar

修改目录下的page文件的1639行

1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)

改为如下↓

1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)

解压后修改完成打包指令

tar cf vmhgfs.tar vmhgfs-only

然后执行vmware-install.pl 问题解决

我按照这位博主的方法找到了这个文件,发现第1639行并不是文中的代码,而是一串长长的注释。于是我估计是版本的问题,我查了一下我使用的centos以及vmware的版本号,

uname -r 得到centos内核版本是3.10.0-514.e17.x86_64

cat /etc/redhat-release ,系统版本是 CentOS Linux release 7.3.1611 (Core)

Vmware版本是11.0.0 build-2305329

我又根据提示找到这个函数
HgfsWbRequestWait


发现其实问题出在这

HgfsWbRequestWait(HgfsWbPage *req) // IN: request of page data to write
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
return wait_on_bit(&req->wb_flags,PG_BUSY,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
HgfsWbRequestWaitUninterruptible,
#endif
TASK_UNINTERRUPTIBLE);
#else
wait_event(req->wb_quque,
!test_bit(PG_BUSY, &req->wb_flags));
return 0;
#endif
}


在第1619行,我把

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
return wait_on_bit(&req->wb_flags,PG_BUSY,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
HgfsWbRequestWaitUninterruptible,
#endif

改成了

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
return wait_on_bit(&req->wb_flags,PG_BUSY,
HgfsWbRequestWaitUninterruptibl

            TASK_UNINTERRUPTIBLE);

是的,我把这个大于3.17.0的版本判断去掉了。因为我实在不理解为什么还要设置版本上限。

OK,打包压缩包,重新安装vmtool,没有再出现这个提示,再看看/mnt/hgfs文件夹,发现里面已经有内容了。至此,用vmware共享文件夹终于完成。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: