VMWareFusionでフォルダ共有ができなくなった場合の対処

## 環境
- VMWare Fusion 7.1.1
- ホストOS: OSX 10.9
- ゲストOS: Ubuntu 14.04.2 LTS

## 現象
- いつものように、VMWare Fusionで/mnt/hgfsがマウントできなくなる
- いつもはVMWare Toolsの再インストール、config-toolsの実行等を行うと治るが、今回は改善せず。
- open-vm-toolsを入れてみてもダメ。

## 原因
- VMWareToolsのバグ
- https://communities.vmware.com/thread/499503

## 対策
- パッチが公開されているので当てる
      https://github.com/rasa/vmware-tools-patches
    - 以下を実行するとパッチが当たったVMWareToolsがインストールされる
      （VMWareTools-*.tar.gzはカレントディレクトリに置いておく）

```Bash
git clone https://github.com/rasa/vmware-tools-patches.git
cp VMWareTools-*.tar.gz vmware-tools-patches/
cd vmware-tools-patches
./untar-and-patch-and-compile.sh
```

## 注意
- カーネルのバージョン3.13.xは正常にパッチが当たらない。
    - うちの環境はまさにこれで、カーネルのアップデートを行った。
    	- [Linux Ubuntu カーネルを最新のものにアップデートする(3.16.0)｜もっとLinuxを使おう^_−☆](http://ameblo.jp/yoshi1959tanaka/entry-11907430950.html)

## Error Log
```
~/vmware-tools-distrib$ sudo ./vmware-install.pl
  The installer has detected an existing installation of
  open-vm-tools on this 
  system and will not attempt to remove and replace these
  user-space 
  applications. It is recommended to use the open-vm-tools
  packages provided by 
  the operating system. If you do not want to use the existing
  installation of 
  open-vm-tools and attempt to install VMware Tools, you must
  uninstall the 
  open-vm-tools packages and re-run this installer.
  The installer will next check if there are any missing kernel
  drivers. Type yes
  if you want to do this, otherwise type no [yes] 

  A previous installation of VMware Tools has been detected.

  The previous installation was made by the tar installer
  (version 4).

  Keeping the tar4 installer database format.

  You have a version of VMware Tools installed.  Continuing
  this install will 
  first uninstall the currently installed version.  Do you wish
  to continue? 
  (yes/no) [yes] 

  Uninstalling the tar installation of VMware Tools.

  Stopping services for vmware-tools

  vmware-tools stop/waiting
  Stopping services for vmware-tools-thinprint

  vmware-tools-thinprint stop/waiting
  update-initramfs: Generating
  /boot/initrd.img-3.13.0-46-generic
  The removal of VMware Tools 9.9.2 build-2496486 for Linux
  completed 
  successfully.

  Installing VMware Tools.

  In which directory do you want to install the binary files? 
  [/usr/bin] 

  What is the directory that contains the init directories
  (rc0.d/ to rc6.d/)? 
  [/etc] 

  What is the directory that contains the init scripts? 
  [/etc/init.d] 

  In which directory do you want to install the daemon files? 
  [/usr/sbin] 

  In which directory do you want to install the library files? 
  [/usr/lib/vmware-tools] 

  The path "/usr/lib/vmware-tools" does not exist currently.
  This program is 
  going to create it, including needed parent directories. Is
  this what you want?
  [yes] 

  In which directory do you want to install the documentation
  files? 
  [/usr/share/doc/vmware-tools] 

  The path "/usr/share/doc/vmware-tools" does not exist
  currently. This program 
  is going to create it, including needed parent directories.
  Is this what you 
  want? [yes] 

  The installation of VMware Tools 9.9.2 build-2496486 for
  Linux completed 
  successfully. You can decide to remove this software from
  your system at any 
  time by invoking the following command:
  "/usr/bin/vmware-uninstall-tools.pl".

  Before running VMware Tools for the first time, you need to
  configure it by 
  invoking the following command:
  "/usr/bin/vmware-config-tools.pl". Do you want 
  this program to invoke the command for you now? [yes] 

  Initializing...


  Making sure services for VMware Tools are stopped.



  The module vmci has already been installed on this system by
  another installer 
  or package and will not be modified by this installer.

  The module vsock has already been installed on this system by
  another installer
  or package and will not be modified by this installer.

  The module vmxnet3 has already been installed on this system
  by another 
  installer or package and will not be modified by this
  installer.

  The module pvscsi has already been installed on this system
  by another 
  installer or package and will not be modified by this
  installer.

  The module vmmemctl has already been installed on this system
  by another 
  installer or package and will not be modified by this
  installer.

  The VMware Host-Guest Filesystem allows for shared folders
  between the host OS 
  and the guest OS in a Fusion or Workstation virtual
  environment.  Do you wish 
  to enable this feature? [yes] 


  Before you can compile modules, you need to have the
  following installed... 

  make
  gcc
  kernel headers of the running kernel


  Searching for GCC...
  Detected GCC binary at "/usr/bin/gcc".
  The path "/usr/bin/gcc" appears to be a valid path to the gcc
  binary.
  Would you like to change it? [no] 

  Searching for a valid kernel header path...
  Detected the kernel headers at
  "/lib/modules/3.13.0-46-generic/build/include".
  The path "/lib/modules/3.13.0-46-generic/build/include"
  appears to be a valid 
  path to the 3.13.0-46-generic kernel headers.
  Would you like to change it? [no] 

  Using kernel build system.
  make: ディレクトリ `/tmp/modconfig-891E4X/vmhgfs-only' に入ります
  /usr/bin/make -C
  /lib/modules/3.13.0-46-generic/build/include/.. SUBDIRS=$PWD
  SRCROOT=$PWD/. \
  	  MODULEBUILDDIR= modules
  make[1]: ディレクトリ `/usr/src/linux-headers-3.13.0-46-generic'
  に入ります
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/backdoor.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/backdoorGcc64.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/bdhandler.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/cpName.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/cpNameLinux.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/cpNameLite.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/dentry.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/dir.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/file.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/filesystem.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/fsutil.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/hgfsBd.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/hgfsEscape.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/hgfsUtil.o
    CC [M]  /tmp/modconfig-891E4X/vmhgfs-only/inode.o
  In file included from
  /usr/src/linux-headers-3.13.0-46-generic/arch/x86/include/asm/
  percpu.h:44:0,
                   from
  /usr/src/linux-headers-3.13.0-46-generic/arch/x86/include/asm/
  preempt.h:5,
                   from include/linux/preempt.h:18,
                   from include/linux/spinlock.h:50,
                   from include/linux/mmzone.h:7,
                   from include/linux/gfp.h:4,
                   from include/linux/mm.h:8,
                   from include/linux/pagemap.h:7,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:29:
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c: In function
  ‘HgfsPermission’:
  include/linux/kernel.h:793:27: error: ‘struct dentry’ has no
  member named ‘d_alias’
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                             ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:708:13: note: in expansion of macro
  ‘hlist_entry_safe’
    for (pos = hlist_entry_safe((head)->first, typeof(*(pos)),
  member);\
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  include/linux/kernel.h:793:48: warning: initialization from
  incompatible pointer type [enabled by default]
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                  ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:708:13: note: in expansion of macro
  ‘hlist_entry_safe’
    for (pos = hlist_entry_safe((head)->first, typeof(*(pos)),
  member);\
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  In file included from include/linux/compiler-gcc.h:106:0,
                   from include/linux/compiler.h:54,
                   from include/uapi/linux/stddef.h:1,
                   from include/linux/stddef.h:4,
                   from
  /usr/src/linux-headers-3.13.0-46-generic/include/uapi/linux/po
  six_types.h:4,
                   from include/uapi/linux/types.h:13,
                   from include/linux/types.h:5,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/./shared/driver-config.h:71,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:26:
  include/linux/compiler-gcc4.h:14:34: error: ‘struct dentry’
  has no member named ‘d_alias’
   #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
                                    ^
  include/linux/stddef.h:17:31: note: in expansion of macro
  ‘__compiler_offsetof’
   #define offsetof(TYPE,MEMBER)
  __compiler_offsetof(TYPE,MEMBER)
                                 ^
  include/linux/kernel.h:794:29: note: in expansion of macro
  ‘offsetof’
    (type *)( (char *)__mptr - offsetof(type,member) );})
                               ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:708:13: note: in expansion of macro
  ‘hlist_entry_safe’
    for (pos = hlist_entry_safe((head)->first, typeof(*(pos)),
  member);\
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  In file included from include/linux/preempt.h:10:0,
                   from include/linux/spinlock.h:50,
                   from include/linux/mmzone.h:7,
                   from include/linux/gfp.h:4,
                   from include/linux/mm.h:8,
                   from include/linux/pagemap.h:7,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:29:
  include/linux/list.h:710:35: error: ‘struct dentry’ has no
  member named ‘d_alias’
         pos = hlist_entry_safe((pos)->member.next,
  typeof(*(pos)), member))
                                     ^
  include/linux/list.h:697:12: note: in definition of macro
  ‘hlist_entry_safe’
    ({ typeof(ptr) ____ptr = (ptr); \
              ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  include/linux/list.h:710:35: error: ‘struct dentry’ has no
  member named ‘d_alias’
         pos = hlist_entry_safe((pos)->member.next,
  typeof(*(pos)), member))
                                     ^
  include/linux/list.h:697:28: note: in definition of macro
  ‘hlist_entry_safe’
    ({ typeof(ptr) ____ptr = (ptr); \
                              ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  In file included from
  /usr/src/linux-headers-3.13.0-46-generic/arch/x86/include/asm/
  percpu.h:44:0,
                   from
  /usr/src/linux-headers-3.13.0-46-generic/arch/x86/include/asm/
  preempt.h:5,
                   from include/linux/preempt.h:18,
                   from include/linux/spinlock.h:50,
                   from include/linux/mmzone.h:7,
                   from include/linux/gfp.h:4,
                   from include/linux/mm.h:8,
                   from include/linux/pagemap.h:7,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:29:
  include/linux/kernel.h:793:27: error: ‘struct dentry’ has no
  member named ‘d_alias’
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                             ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:710:13: note: in expansion of macro
  ‘hlist_entry_safe’
         pos = hlist_entry_safe((pos)->member.next,
  typeof(*(pos)), member))
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  include/linux/kernel.h:793:48: warning: initialization makes
  pointer from integer without a cast [enabled by default]
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                  ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:710:13: note: in expansion of macro
  ‘hlist_entry_safe’
         pos = hlist_entry_safe((pos)->member.next,
  typeof(*(pos)), member))
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  In file included from include/linux/compiler-gcc.h:106:0,
                   from include/linux/compiler.h:54,
                   from include/uapi/linux/stddef.h:1,
                   from include/linux/stddef.h:4,
                   from
  /usr/src/linux-headers-3.13.0-46-generic/include/uapi/linux/po
  six_types.h:4,
                   from include/uapi/linux/types.h:13,
                   from include/linux/types.h:5,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/./shared/driver-config.h:71,
                   from
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:26:
  include/linux/compiler-gcc4.h:14:34: error: ‘struct dentry’
  has no member named ‘d_alias’
   #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
                                    ^
  include/linux/stddef.h:17:31: note: in expansion of macro
  ‘__compiler_offsetof’
   #define offsetof(TYPE,MEMBER)
  __compiler_offsetof(TYPE,MEMBER)
                                 ^
  include/linux/kernel.h:794:29: note: in expansion of macro
  ‘offsetof’
    (type *)( (char *)__mptr - offsetof(type,member) );})
                               ^
  include/linux/list.h:687:40: note: in expansion of macro
  ‘container_of’
   #define hlist_entry(ptr, type, member)
  container_of(ptr,type,member)
                                          ^
  include/linux/list.h:698:15: note: in expansion of macro
  ‘hlist_entry’
       ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
                 ^
  include/linux/list.h:710:13: note: in expansion of macro
  ‘hlist_entry_safe’
         pos = hlist_entry_safe((pos)->member.next,
  typeof(*(pos)), member))
               ^
  /tmp/modconfig-891E4X/vmhgfs-only/inode.c:1920:7: note: in
  expansion of macro ‘hlist_for_each_entry’
         hlist_for_each_entry(dentry,
         ^
  make[2]: *** [/tmp/modconfig-891E4X/vmhgfs-only/inode.o] エラー 1
  make[1]: *** [_module_/tmp/modconfig-891E4X/vmhgfs-only] エラー 2
  make[1]: ディレクトリ `/usr/src/linux-headers-3.13.0-46-generic'
  から出ます
  make: *** [vmhgfs.ko] エラー 2
  make: ディレクトリ `/tmp/modconfig-891E4X/vmhgfs-only' から出ます

  The filesystem driver (vmhgfs module) is used only for the
  shared folder 
  feature. The rest of the software provided by VMware Tools is
  designed to work 
  independently of this feature.

  If you wish to have the shared folders feature, you can
  install the driver by 
  running vmware-config-tools.pl again after making sure that
  gcc, binutils, make
  and the kernel sources for your running kernel are installed
  on your machine. 
  These packages are available on your distribution's
  installation CD.
  [ Press Enter key to continue ]         

  The vmxnet driver is no longer supported on kernels 3.3 and
  greater. Please 
  upgrade to a newer virtual NIC. (e.g., vmxnet3 or e1000e)

  VMware automatic kernel modules enables automatic building
  and installation of
  VMware kernel modules at boot that are not already present.
  This feature can be

  enabled/disabled by re-running vmware-config-tools.pl.

  Would you like to enable VMware automatic kernel modules?
  [yes] 

  Thinprint provides driver-free printing. Do you wish to
  enable this feature? 
  [yes] 

  Creating a new initrd boot image for the kernel.
  update-initramfs: Generating
  /boot/initrd.img-3.13.0-46-generic
  vmware-tools-thinprint start/running
  vmware-tools start/running
  The configuration of VMware Tools 9.9.2 build-2496486 for
  Linux for this 
  running kernel completed successfully.

  Enjoy,

  --the VMware team

```