ubuntu18.4搭建nfs网络文件系统windows挂载虚拟机nfs实现在物理机下实时修改虚拟机内容

  • 背景介绍
  • 实验环境
  • 具体实现
  • 虚拟机安装nfs服务
  • 物理机挂在nfs文件系统
  • 启用windows的nfs功能
  • 挂在nfs网络文件系统
  • 总结



上一篇文章介绍了

无需路由器实现虚拟机、物理机、开发板互相ping通+上网,网络调试通了之后就可以借助网络的强有力工具实现便捷的开发,本文主要介绍一种物理机和虚拟机的文件共享方式,使用windows挂载虚拟机的nfs文件系统来实现在物理机下实时修改虚拟机内容。

背景介绍

在嵌入式开发中,经常使用source insight工具查看并编辑代码,但是source insight并不是跨平台的软件,不能安装在虚拟机中的ubuntu环境下,即便是使用wine模拟器强行安装,安装之后也是特别不友好(奇丑无比)。虽然有备选方案:使用微软的跨平台编辑器VScode,虽然有linux版本的,但是linux版的和windows版本的还是有区别的,至少前进后退的选项和快捷键我至今也没有找到,当然有知道怎么操作的欢迎留言指正。并且即便是在windows环境下,我觉得source insight表现的还是更优秀一些,当然也希望微软团队多加努力。
基于上述事实,大多数采用的方式都是利用虚拟机进行文件的相互拖拽,或者使用ftp进行文件的上传,虽然也很方便,但是毕竟还是需要步骤,因此,在此分享一种可以实时同步的方式,即使用nfs网络文件系统,但是前提是需要windows系统是专业版及其以上版本,家庭中文版暂时不支持nfs客户端。但是可以借鉴思路,使用smba文件共享协议,原理不同而已。

实验环境

物理机:win10企业版
虚拟机:ubuntu18.4

具体实现

虚拟机安装nfs服务

执行 sudo apt install nfs-kernel-server 安装nfs服务端。
执行 sudo apt install nfs-common 安装nfs客户端。
执行 ifconfig 查看IP地址

book@100ask:~$ ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.100  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:feb7:ec8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b7:0e:c8  txqueuelen 1000  (Ethernet)
        RX packets 137572  bytes 202479046 (202.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 41841  bytes 2685292 (2.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

执行 sudo vim /etc/exports 修改配置文件
在最后添加一行。

  • /home/book 表示nfs需要共享的目录;
  • 表示“任何”客户机都可访问,如果是192.168.1.* 则表示“192.168.1/24这一网段”的客户机都可访问,如果是192.168.1.110,则表示这个指定IP的客户机可访问;
  • (rw,sync,no_root_squash,no_subtree_check)
    这些表示该目录的权限。
    注意:在windows下挂载linux下的目录,如果需要修改的,需要赋予其他用户写权限才可以修改,这个后面具体介绍。
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/book *(rw,sync,no_root_squash,no_subtree_check)

执行 sudo exportfs -ra 更新配置文件
执行 sudo service nfs-kernel-server restart 重启nfs服务
通过以下测试可以发现,本地可以挂在成功并实时同步。

book@100ask:/mnt/hgfs/share$ sudo mkdir /mnt/test
book@100ask:/mnt/hgfs/share$ sudo mount -t nfs 192.168.10.100:/home/book /mnt/test/
book@100ask:/mnt/hgfs/share$ ls /mnt/test/
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  nfs.test  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ ls /home/book
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  nfs.test  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ rm /mnt/test/nfs.test 
book@100ask:/mnt/hgfs/share$ ls /mnt/test/
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ ls /home/book
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ touch /mnt/test/nfs.test
book@100ask:/mnt/hgfs/share$ ls /mnt/test/
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  nfs.test  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ ls /home/book
Desktop  Documents  Downloads  examples.desktop  imx6ull  Music  nfsroot  nfs.test  Pictures  Public  snap  Templates  tftproot  Videos
book@100ask:/mnt/hgfs/share$ sudo umount /mnt/test 
book@100ask:/mnt/hgfs/share$ ls /mnt/test/
book@100ask:/mnt/hgfs/share$

物理机挂在nfs文件系统

启用windows的nfs功能

windows默认没有启用nfs功能,可以在打开和关闭功能中启用它,具体操作如下:

vcsa挂载nfs nfs挂载windows_网络


vcsa挂载nfs nfs挂载windows_hg_02


vcsa挂载nfs nfs挂载windows_vcsa挂载nfs_03


然后等待windows添加nfs功能完毕。

注意:只有专业版以上的系统才有nfs功能,家庭中文版的没有。

挂在nfs网络文件系统

打开此电脑选择 计算机—>映射网络驱动器

填写盘符和路径完成网络文件系统的挂载。

vcsa挂载nfs nfs挂载windows_vcsa挂载nfs_04


vcsa挂载nfs nfs挂载windows_网络_05


vcsa挂载nfs nfs挂载windows_嵌入式_06


这样就把虚拟机中的文件完全映射到了磁盘x中,和操作其他盘中的文件没有什么区别,需要注意的是如果遇到修改完无法保存的问题,可以直接去虚拟机中吧相关文件的这目录赋予可写权限即可

执行 sudo chmod a+w file或者sudo chmod -R a+w dir修改文件或者文件夹的权限,将所有用户添加可写权限。或者暴力执行sudo chmod 777 file

总结

通过挂载网络文件系统的方式可以事实在物理机下修改虚拟机的文件并同步,如果需要虚拟机下事实修改物理机的文件可以参考vm添加共享文件夹共享文件夹的方式。
但是挂载网络文件系统只能专业版以上的windows系统才可以用,如果家庭中文版的系统也想实现类似操作可以使用samba文件共享的方式进行相关操作。
也可以参考我的另一篇文章
搭建Samba服务器实现windows和linux虚拟机在物理机下实时修改虚拟机内容