背景:
需要从本地的win10系统传文件到vmware虚拟机的redhat Linux系统中(内核版本:3.10.0),通过网上查资料,我选择共享文件夹的方式(其他方式自行搜索)
步骤:
一、安装vmware tools
1、在vmware虚拟机选项下,选择安装vmware-tools
2、将vmware安装目录下的linux.iso装载到系统中
2.1、选择需安装VMWareTools的虚拟机,右击--可移动设备--CD/DVD--设置
2.2、选择CD/DVD(SATA)--使用ISO映像文件--选文件--打钩设备状态下的“已连接”--确定
3、在系统中输入如下命令挂载:mount /dev/cdrom /mnt (注意,/mnt前面有一个空格)
4、进入/mnt 会看到
5、(重要)将VMWareTools-10.0.10-4301679.tar.gz 拷贝到其他目录,我是拷贝到目录/home
# cp VMWareTools-10.0.10-4301679.tar.gz /home/VMWareTools-10.0.10-4301679.tar.gz
不拷贝直接解压会出错,错误如下
6、进入目录/home,解压VMWareTools-10.0.10-4301679.tar.gz,解压后出现vmware-tools-distrib
cd /home
tar -zxf VMWareTools-10.0.10-4301679.tar.gz
7、进入目录vmware-tools-distrib,运行安装文件./vmware-install.pl,一路enter就可以了
8、恭喜,完成了
二、创建共享文件夹
2、 操作
1) Windows:建立共享文件夹D:\Virtual Machines\shared_vm3
2) 虚拟机linux: 添加共享文件夹
选择虚拟机VM_3 --> 右击 --> 设置
选择 选项 --> 共享文件夹 --> 总是启用 --> 添加
出来设置向导后,点击 下一步
浏览windows文件夹,这里是选择D:\Virtual Machines\shared_vm3 --> 下一步
备注:名称对应的是Linux系统显示的文件夹名称
默认打钩启用此共享,点击完成。
点击确定
注意:红框中要打钩,默认是打钩的
3) 虚拟机linux: 启动虚拟机VM_3
选择VM_3 --> 启动该虚拟机
4) 虚拟机linux: 挂载共享文件夹
# cd /mnt
# mkdir hgfs
注意:要通过共享文件夹实现linux与windows文件共享,必须安装 VMWare-tools ,该工具的安装可以借鉴http://www.cnblogs.com/ddbear/p/6857199.html
安装VMWare-tools之后,执行以下命令
# /usr/bin/vmware-config-tools.pl
然后,一路回车,直到安装完成
见到这个画面,说明安装完成了。
5) 虚拟机linux: 重启虚拟机
# reboot
6) 检验和测试
# cd /mnt/hgfs
# ls
测试
# cd shared_vm3
# vim shared_test.txt
123456
abcdsf
保存退出 :wq
# ls
检验在windows 下,看看有没有该文件
成功。
遇到问题:
解决方案:
CC [M] /tmp/modconfig-71euqe/vmhgfs-only/page.o
/tmp/modconfig-71euqe/vmhgfs-only/page.c: In function ‘HgfsWbRequestWait’:
/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: warning: passing argument 3 of ‘wait_on_bit’ makes integer from pointer without a cast [enabled by default]
TASK_UNINTERRUPTIBLE);
^
In file included from include/linux/mmzone.h:9:0,
from include/linux/gfp.h:5,
from include/linux/mm.h:9,
from include/linux/pagemap.h:7,
from /tmp/modconfig-71euqe/vmhgfs-only/page.c:28:
include/linux/wait.h:1044:1: note: expected ‘unsigned int’ but argument is of type ‘int (*)(void *)’
wait_on_bit(void *word, int bit, unsigned mode)
^
/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: error: too many arguments to function ‘wait_on_bit’
TASK_UNINTERRUPTIBLE);
^
In file included from include/linux/mmzone.h:9:0,
from include/linux/gfp.h:5,
from include/linux/mm.h:9,
from include/linux/pagemap.h:7,
from /tmp/modconfig-71euqe/vmhgfs-only/page.c:28:
include/linux/wait.h:1044:1: note: declared here
wait_on_bit(void *word, int bit, unsigned mode)
^
make[2]: *** [/tmp/modconfig-71euqe/vmhgfs-only/page.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [_module_/tmp/modconfig-71euqe/vmhgfs-only] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.2.2.el7.x86_64'
make: *** [vmhgfs.ko] Error 2
make: Leaving directory `/tmp/modconfig-71euqe/vmhgfs-only'
通过查看后发现因为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 问题解决(重新执行/home/vmware-tools-distrib/vmware-install.pl)
方法一:
命令: uname -a
作用: 查看系统内核版本号及系统名称
参考资料:
http://www.linuxidc.com/Linux/2017-06/145167.htm
http://www.cnblogs.com/ddbear/p/6857199.html
https://www.b9go.com/blog/myweishanli/article/558