最近经常遇到,windows上用vmware安装好linux虚拟机,设置好共享文件后,也生效了。但是每次重启linux虚拟机之后,共享文件就无法访问了,每次都要手动在vmware的设置里禁用共享,然后再开启共享,操作有点麻烦而且慢,有什么方法可以比较简单快速的解决么,下面介绍一个命令就能解决的方法。

vmware共享文件,需要启动vmhgfs相关模块,应用程序为vmhgfs-fuse。

 共享文件生效时,可以用ps命令看到vmhgfs-fuse进程

[root@zyg ~]# ps -ef |grep vm
root        520      1  0 16:30 ?        00:00:00 /sbin/lvmetad -f
root        821      1  0 16:30 ?        00:00:00 /usr/bin/vmtoolsd
root       6681      1  0 16:36 ?        00:00:00 /usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other
root       6888   6295  0 16:36 pts/2    00:00:00 grep --color=auto vm

在linux系统上,执行vmhgfs-fuse -h,查看用法:

[root@zyg ~]# vmhgfs-fuse -h
Usage:  vmhgfs-fuse sharedir mountpoint [options]
Examples:
        vmhgfs-fuse .host:/ /mnt/hgfs
        vmhgfs-fuse .host:/foo/bar /mnt/bar

general options:
    -o opt,[opt...]        mount options
    -h   --help            print help
    -V   --version         print version
    -e   --enabled         check if system is enabled
                           for the HGFS FUSE client. Exits with:
                           0 - system is enabled for HGFS FUSE
                           1 - system OS version is not supported for HGFS FUSE
                           2 - system needs FUSE packages for HGFS FUSE

FUSE options:
    -d   -o debug          enable debug output (implies -f)
    -f                     foreground operation
    -s                     disable multi-threaded operation

    -o allow_other         allow access to other users
    -o allow_root          allow access to root
    -o auto_unmount        auto unmount on process termination
    -o nonempty            allow mounts over non-empty file/dir
    -o default_permissions enable permission checking by kernel
    -o fsname=NAME         set filesystem name
    -o subtype=NAME        set filesystem type
    -o large_read          issue large read requests (2.4 only)
    -o max_read=N          set maximum size of read requests
    -o numa                 enable numa

    -o hard_remove         immediate removal (don't hide files)
    -o use_ino             let filesystem set inode numbers
    -o readdir_ino         try to fill in d_ino in readdir
    -o direct_io           use direct I/O
    -o kernel_cache        cache files in kernel
    -o [no]auto_cache      enable caching based on modification times (off)
    -o umask=M             set file permissions (octal)
    -o uid=N               set file owner
    -o gid=N               set file group
    -o entry_timeout=T     cache timeout for names (1.0s)
    -o negative_timeout=T  cache timeout for deleted names (0.0s)
    -o attr_timeout=T      cache timeout for attributes (1.0s)
    -o ac_attr_timeout=T   auto cache timeout for attributes (attr_timeout)
    -o noforget            never forget cached inodes
    -o remember=T          remember cached inodes for T seconds (0s)
    -o nopath              don't supply path if not necessary
    -o intr                allow requests to be interrupted
    -o intr_signal=NUM     signal to send on interrupt (10)
    -o modules=M1[:M2...]  names of modules to push onto filesystem stack

    -o max_write=N         set maximum size of write requests
    -o max_readahead=N     set maximum readahead
    -o max_background=N    set number of maximum background requests
    -o congestion_threshold=N  set kernel's congestion threshold
    -o async_read          perform reads asynchronously (default)
    -o sync_read           perform reads synchronously
    -o atomic_o_trunc      enable atomic open+truncate support
    -o big_writes          enable larger than 4kB writes
    -o no_remote_lock      disable remote file locking
    -o no_remote_flock     disable remote file locking (BSD)
    -o no_remote_posix_lock  disable remove file locking (POSIX)
    -o [no_]splice_write     use splice to write to the fuse device
    -o [no_]splice_move      move data while splicing to the fuse device
    -o [no_]splice_read      use splice to read from the fuse device
    -o [no_]auto_inval_data  use automatic kernel cache invalidation logic
    -o readdirplus=S         control readdirplus use (yes|no|auto)
    -o [no_]async_dio        asynchronous direct I/O
    -o [no_]writeback_cache  asynchronous, buffered writes

Module options:

[iconv]
    -o from_code=CHARSET   original encoding of file names (default: UTF-8)
    -o to_code=CHARSET      new encoding of the file names (default: UTF-8)

[subdir]
    -o subdir=DIR           prepend this directory to all paths (mandatory)
    -o [no]rellinks         transform absolute symlinks to relative

临时解决的话,直接执行:

vmhgfs-fuse .host:/ /mnt/hgfs 

或者用上面ps打印出的命令:

/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other

即可。

永久生效:
在/root/.bashrc 中添加命令:

vmhgfs-fuse .host:/ /mnt/hgfs

或者

/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other

然后执行source命令,让本次修改生效:

source ~/.bashrc

之后,就可以cd到/mnt/hgfs/下的共享文件目录中了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐