首页 > 系统相关 >Windows NFS 真弱 → 中文乱码导致文件找不到

Windows NFS 真弱 → 中文乱码导致文件找不到

时间:2024-03-05 09:02:28浏览次数:26  
标签:userData Rsync Windows 真弱 乱码 NFS data 客户端

开心一刻

  正睡着觉,然后来了个电话

  对方说:你好,方便面是吗

  我愣了一下,以为是恶作剧

  回了句:我不是,我是火腿肠!

  就挂了电话

  又躺了好一会,忽然琢磨过来......

  不对呀,她好像说的是:你好,方便面试吗?

前提准备

  项目中有这么一块业务

  1、 脚本同步 这一环,是运维同事通过脚本实现的,所以我没去关注

  2、 读取文件并上传 这一环,是我实现的,稳定运行了很长一段时间了,一直没出问题

中文乱码

  直到有一天, 生产环境 出现了异常信息: /data/userData/Rsync 下不存在文件:测试文件.txt 

  提示很明显,在目录 /data/userData/Rsync 下,没有找到文件 测试文件.txt 

  然后联系运维,让运维去看 本系统 的目录: /data/userData/Rsync 下,文件 测试文件.txt 是否存在

  运维的反馈是文件存在,还发了截图

  并且把文件复制给我了

  然后我将这个文件复制到 测试环境 的 /data/userData/Rsync 目录下, 测试环境 能正常找到文件 测试环境.txt 

  那问题出在哪?

问题排查

  后面与同个运维同事沟通了下,了解了整个完整流程的细节:

  其中 CentOS 7 作为 NFS 服务器 ,其系统编码是 UTF-8 

  Win 2012 作为 NFS 客户端 ,其系统编码是 GBK (chcp 值 936 表示 GBK)

  我在怀疑是不是 NFS 的问题?

  怎么验证了?

  其实最简单的办法就是看一眼 CentOS 7 目录 /data/userData/Rsync 下是不是有中文名乱码文件即可

  奈何我认为我说清楚了,运维同事也认为他理解了

  结果南辕北辙,我想看的是 CentOS 7 的目录 /data/userData/Rsync ,运维给我看的却是 Win 2012 下的挂载目录 L: 

  关键是当时我没发现他给我的截图其实不是我想看的!

  然后我就开始了我的线上环境模拟之旅

  NFS 服务端

   CentOS 7 上搭建 NFS 服务器非常简单

  1、安装 NFS ,执行 yum install -y nfs-utils 即可

  2、对客户端 IP 进行授权

    编辑 /etc/exports ,进行授权配置,例如

     /data/userData/Rsync/ 表示要共享出去的目录,不存在则需要先创建: mkdir -p /data/userData/Rsync 

     10.5.108.221 表示客户端 IP 地址,说明共享给谁

     (rw,sync,no_root_squash) 表示授权列表, rw 表示客户端可以读写, sync 表示自动同步, no_root_squash 是什么含义,你们自己去查

    涉及到目录的读写,需要对 /data/userData/Rsync/ 配置合适的读写权限,方便演示就简单点: chmod 777 /data/userData/Rsync/ 

    编辑好之后,使配置生效,执行命令: exportfs -rv 

  3、启动 NFS : systemctl start nfs-server 

    开机启动: systemctl enable nfs-server 

  4、防火墙放行

    为了演示方便,直接关闭防火墙: systemctl stop firewalld 

  NFS 客户端

   WIN 2012 作为客户端,配置起来也很简单

  1、安装 NFS 客户端

     控制面板 ->  程序 ->  启用或关闭 Windows 功能 

     添加角色与功能 ,直接连续下一步,直到 服务器角色 

    如果在 WIN 2012 上搭建 NFS 服务器,则上面三个框住的需要勾选上,然后进行 安装 

    我们目前是搭建客户端,这个地方可以不勾,下一步,来到 功能 

    勾选上 NFS 客户端 ,然后进行安装即可

  2、防火墙放行,为了演示方便,直接关闭防火墙

  3、目录挂载

    直接在 cmd 中执行: mount 10.5.108.225:/data/userData/Rsync L: 

    不出意外的话,挂载成功

  此时, 我的电脑 会出现一个网络盘

  正常来讲,不会有红叉;不影响效果,先不纠结

  同步

  简单点模拟,直接在 win 2012 上,往挂载盘(网络盘)写文件,文件名是: 测试文件.txt 

  在 win 2012 的挂载目录 L: 看,中文没乱码,简直太正常了!

  但是,我们去 CentOS 7 的目录 /data/userData/Rsync/ 看下

  哦豁,换了个马甲,还真不认识了!

  程序去找 测试文件.txt ,怎么找得到嘛

  乱码原因

  这个时候基本能断定问题出在 NFS ,直接 google 下关键字: Window 2012 NFS 中文乱码 就能找到答案

  根因就是:windows 内置的 nfs 支持的编码非常有限,不支持 utf-8

问题解决

  去掉中文

  既然中文有问题,那就干掉中文

  和上游系统协商了下,文件名改成英文,中文乱码自然就不存在了

  有小伙伴可能会有疑问:之前没有中文乱码问题?

  其实你们心里应该有答案了,没错,就如你们所想:这块业务,之前一直没出现中文名的文件!

  升级 window 系统

   win10 可以开启 Beta 版本 ,来支持 UTF-8 

  具体可参考:一个小设置,让Win10 NFS正常显示中文UTF-8

  注意看评论区,坑很多,不推荐这种方式

  至于 Windows 系统的其他版本是否支持该配置,大家结合自己的系统去查阅

  第三方 NFS 客户端

  ms-nfs41-client,人家搭建步骤写的很清楚了

  换共享方案

   Samba 就是其中之一,大家可以去查阅并实现

总结

  1、 Windows 自带的 NFS 支持的编码非常有限,竟连 UTF-8 都不支持,会导致中文乱码问题

  2、沟通的时候,一定要清楚的表达自己的意图,要保证人家接收到的信息就是你要表达的信息

标签:userData,Rsync,Windows,真弱,乱码,NFS,data,客户端
From: https://www.cnblogs.com/youzhibing/p/17966949

相关文章

  • 机器视觉-使用AMD的ROCm加速yolo前提-windows10 安装docker
    docker环境准备:docker官网下载dockerdesktop的windows版本,并安装.安装后,启动DockerDesktop应用程序完成剩余的安装任务.如果报unabletodetectaHypervisor错误,使用管理员权限执行下面批处理文件,会安装Hyper-V相关组件,并重启电脑,重启后启用或关闭Wi......
  • nginx在windows下的使用一
    一、nginx常用配置介绍:server块:是什么意思呢?每一个server其实它跟一个虚拟主机有关,虚拟主机就是说从用户的角度来说,一个虚拟主机就是一台独立的机器。有独立的硬件、网络等等。那么每个http块里面有多个server块,意味着一个http块里面有多个独立的虚拟主机。比如这段配置解释:ser......
  • C++ mySQL数据库连接池(windows平台)
    C++MySQL数据库连接池新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址关键技术点MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产......
  • 07Windows系统安装的准备工作1
    Windows系统安装的准备工作1重装系统,这是一个许多人听而却步的事情.我会尽量让这个事情变得简单,通俗,易懂.学习由表象到本质,由浅入深是很重要的.准备Windows10光盘映像文件(ISO)光盘映像文件,简称映像.为什么一定是光盘呢?因为微软发布的操作系统都是以光盘为介质销售的.ISO......
  • windows 磁盘锁 bitlocker关闭
      要关闭BitLocker等待激活的状态,可以按照以下步骤操作:打开命令提示符(CMD),以管理员身份运行。使用`manage-bde-off`命令关闭BitLocker加密。例如,关闭E盘的BitLocker加密命令为`manage-bde-offE:`。运行命令后,系统会对指定的磁盘进行解密工作,可能需要等......
  • Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在
    Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在计算机系统中,时间戳通常用来记录文件的创建时间、修改时间、访问时间等信息,也常用于网络通信中的认证和数据同步等场景。以下是Windows时间戳的基础技术原理:系统时钟:Windows操作系统通过系统......
  • python接口自动化系列(13):windows下allure报告展示
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标上一步获取到测试报告的数据了,这里我们通过命令生成报告并在浏览器中查看报告。 allure-commandline在windows下安装、配置参考:https://www.cnblogs.com/uncleyong/p/16726826.html windows......
  • Android模拟蓝牙蓝牙键盘——适配Android和Windows
    学校寒假有个程序设计比赛,我也一直想要去写一个安卓模拟的蓝牙键盘,这样无论到哪里,比如班班通和没有键盘的电脑设备,有手机就可以操作它,也比USB方便一些。忙活了一个寒假,也走了不少歪路,终于整成了,下面分享一些经验。代码思路①第一步是蓝牙HID的初始化在安卓API28后开放了Bluetoo......
  • Windows基础
    NTLM协议LM加密算法  LMHash的明文密码被限制在14位以内。如果LMHash的值为aad3b435b51404eeaad3b435b51404ee,说明LMHasg为空或者被禁用了。加密流程  以P@ss1234来演示LMHash的加密流程:    1)将用户的明文口令转化为大写,并转化为16进制字符串。   ......
  • LTSC2021安装Windows Terminal
    Microsoft.VCLibs.x64.14.00.DesktopAdd-AppPackage.\Microsoft.VCLibs.x64.14.00.Desktop.appxMicrosoft.UI.XamlAdd-AppPackage.\Microsoft.UI.Xaml.2.8.x64.appxWindowsTerminalAdd-AppxPackage.\Downloads\Microsoft.WindowsTerminal_1.19.10573.0_8wekyb3d8......