在 VMware 中最小化安装完 CentOS 7, 正常安装 VMware Tools, 发现在设置主机共享目录的时候提示”无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错” , 找了很久终于搞定.
系统环境
VMware Workstation Pro 12.5.2
CentOS 7.3 minimal
修复 bug 安装 VMware Tools
如按菜单上的 “安装 VMware Tools” 安装到最后会看到几处错误提示, 都是有关 “wait_on_bit” 的, 最终结果就是 vmhgfs 组件编译出错, 不能共享文件夹.
1 2 | warning: passing argument 3 of ‘wait_on_bit’ ... error: too many arguments to function ‘wait_on_bit’ ... |
要解决这个问题需要修改 hgfs 相关的源码.
启动虚拟机, 以 root 用户登录
安装必备软件
1 2 3 4 | yum install perl gcc kernel-headers kernel-devel #必须重启 reboot |
先安装 open-vm-tools
1 2 | #此 vm tools 提供除了与主机文件共享外的其他功能 yum install open-vm-tools |
创建光盘挂载点
1 | mkdir /mnt/cdrom |
点击 vm 菜单上的 虚拟机->安装 VMware Tools 项, 将 VMware Tools 光盘载入光驱.
挂载光盘到刚创建的目录
1 | mount /dev/cdrom /mnt/cdrom |
进入挂载后的目录, 找到 VMwareTools-xxxx.tar.gz 文件, 将它解压到其他目录, 我这里解压到 /root 下
1 2 | cd /mnt/cdrom tar zxvf VM*.gz -C /root |
修改 hgfs 源码
1 2 3 4 5 6 7 | #进入源码目录 cd /root/vmware-tools-distrib/lib/modules/source #解压 hgfs 源码 tar xf vmhgfs.tar cd vmhgfs-only #编辑 page.c 文件, 如果没有安装 nano 用 yum 安装 nano page.c |
按 Ctrl + w 打开搜索框, 输入以下内容, 按回车搜索.
1 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) |
多次 Ctrl + w 查找, 直到找到包含以下内容的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int HgfsWbRequestWait(HgfsWbPage *req) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) return wait_on_bit_io(&req->wb_flags, PG_BUSY, TASK_UNINTERRUPTIBLE); #elif 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_queue, !test_bit(PG_BUSY,&req->wb_flags)); return 0; #endif } |
将 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) 中的 3, 19, 0 替换为 3, 10, 0
1 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) |
保存退出
1 2 3 | cd .. #将改好的代码重新打包 tar cf vmhgfs.tar vmhgfs-only |
开始安装
1 2 | cd /root/vmware* ./vmware-install.pl |
一路回车,直到安装完毕.
重启系统
1 | reboot |
设置共享文件夹, 之后再次重启系统, 共享目录就生效了
1 2 | reboot ls /mnt/hgfs |
修改控制台分辨率
刚安装的系统 分辨率非常小, 不方便操作, 这里修改分辨率为 1152 * 864 32位色.
CentOS 7 使用 grub2 启动, 修改分辨率的参数放在 /etc/default/grub 文件中
1 | nano /etc/default/grub |
在 GRUB_CMDLINE_LINUX=”xxxx” 项最后插入 vga=0x342 (分辨率为 1152*864*32)
1 | GRUB_CMDLINE_LINUX="xxxx vga=0x342" |
保存退出
令配置生效
1 | grub2-mkconfig -o /boot/grub2/grub.cfg |
重启系统就能看到分辨率变化了.
1 | reboot |
如果想查看所有支持的分辨率, 可将0x342改为ask, 当系统启动时会列出所有分辨率供选择.
记住要改的分辨率对应的三位数编码再按上面的方法改 /etc/default/grub 就可以了.