在 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

yum install perl gcc kernel-headers kernel-devel

先安装 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 zxf 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 /root/grub2/grub.cfg

重启系统就能看到分辨率变化了.

1

reboot

如果想查看所有支持的分辨率, 可将0x342改为ask, 当系统启动时会列出所有分辨率供选择.

记住要改的分辨率对应的三位数编码再按上面的方法改 /etc/default/grub 就可以了.