一键挂载功能支持哪些操作系统和文件系统协议?

目前仅支持Linux操作系统挂载NFS文件系统,Windows操作系统挂载SMB文件系统、Windows操作系统挂载NFS文件系统及Linux操作系统挂载SMB文件系统场景,请您登录ECS实例执行命令挂载。更多信息,请参见Windows系统挂载SMB文件系统Windows系统挂载NFS文件系统Linux系统挂载SMB文件系统

经典网络或者已打通VPC的ECS实例怎么通过控制台挂载文件系统?

您可以使用云助手控制台执行挂载操作。具体操作,请参见多台ECS实例批量挂载同一NAS文件系统

通过控制台挂载文件系统失败可能有哪些原因?

请您排查以下挂载失败原因并尝试修复。
挂载失败分类 挂载失败可能原因 解决方案
ECS实例或云助手状态异常 ECS实例非运行中状态 在ECS控制台检查目标ECS实例状态并修复。
云助手客户端未安装 请您安装云助手客户端。具体操作,请参见Linux实例安装客户端(rpm包管理方式)
挂载命令运行超时或中断 NFS客户端安装太慢 等待一段时间,再次尝试挂载操作。
NFS客户端安装失败 NFS客户端软件源识别失败 请您登录ECS实例,手动安装NFS客户端。具体操作,请参见安装NFS客户端
输入参数格式错误 挂载路径和NAS目录传入错误 请您检查挂载路径和NAS目录都必须是绝对路径,非必填参数使用默认值即可。
挂载路径不符合要求 挂载路径非空目录 请您更换挂载路径,然后再次尝试挂载。
挂载路径已挂载在其他挂载点上
挂载路径的父目录已挂载在其他挂载点上
挂载命令错误 挂载参数配置错误 建议您使用默认挂载配置再次尝试挂载操作。
其他挂载失败原因 请执行错误排查脚本定位具体问题。具体操作,请参见挂载失败的排查方法与解决方案

强制卸载NAS文件系统有哪些风险?

强制卸载可能导致未落盘数据丢失并造成相关应用程序异常退出,建议您登录ECS实例,执行fuser -mv <挂载路径>命令查看除挂载外的应用程序进程,确认进程关闭后再次尝试卸载文件系统。

如果确定已经没有应用程序使用NAS文件系统,而NAS文件系统仍然无法正常卸载,您可以尝试强制卸载。强制卸载后,可能造成内核残留状态,您需要重启ECS实例进行清除,否则可能无法重新挂载同一个挂载点。

在控制台使用一键挂载功能时,挂载参数怎么填写?

控制台上的默认挂载参数会根据协议版本和NAS文件系统类型自动调整为最优配置组合,如果您没有特殊需求建议使用默认参数,修改默认挂载参数可能导致挂载失败。

如果您的业务场景需要修改默认参数,请参考挂载参数进行配置。或提交工单联系NAS团队给予技术支持。

通过控制台一键挂载文件系统时,为什么在ECS列表中查询不到刚刚创建的ECS实例?

请您手动刷新浏览器页面,然后再次执行挂载操作查看ECS实例项。

使用一键挂载功能时,新的协议类型或者挂载参数为什么没生效?

如果指定挂载路径已经挂载至当前挂载点时,那么新指定的协议类型和挂载参数就会被忽略。请您先卸载目标挂载路径,然后使用新的协议类型和挂载参数重新执行挂载操作。

批量挂载功能支持哪些操作系统和文件系统协议?

目前仅支持Linux操作系统挂载NFS文件系统,Windows操作系统挂载SMB文件系统、Windows操作系统挂载NFS文件系统及Linux操作系统挂载SMB文件系统场景,请您登录ECS实例执行命令挂载。更多信息,请参见Windows系统挂载SMB文件系统Windows系统挂载NFS文件系统Linux系统挂载SMB文件系统

批量挂载支持经典网络类型、跨VPC挂载、跨地域挂载吗?

支持经典网络类型和同地域内的跨VPC支持。不支持跨地域挂载,即使VPC已打通也不支持跨地域挂载。

批量挂载功能支持本地IDC挂载吗?

不支持。您可以通过VPN网关设置或NAT网关设置实现本地IDC挂载文件系统。具体操作,请参见通过NAT网关实现本地数据中心访问阿里云NAS通过VPN网关实现本地数据中心访问阿里云NAS

如何确认批量挂载或卸载命令的执行结果?

您可以登录ECS管理控制台,选择运维与监控 > 发送命令/文件(云助手)。在云助手页面中的操作记录查看任务执行成功、执行失败或部分失败状态,单击目标任务操作列的查看,即可查询每台ECS实例的执行状态。

通过云助手控制台批量挂载文件系统后,如何解读ECS挂载信息?

您可以登录NAS控制台,进入目标文件系统详情页,在挂载使用页签通过查询功能查看ECS实例挂载状态。具体操作,请参见查询ECS实例状态

我的业务场景需要变更默认挂载参数,应该怎么操作?

一般场景中,默认挂载参数无须填写,即参数mountparam留空。如果您需要使用特殊挂载参数,请在参数mountparam中填写完整的挂载参数,必须包含noresvport,且必须指定协议类型vers=3或者vers=4,minorversion=0。在执行挂载脚本时,当参数mountparam指定了自定义值,参数protocoltype的值会被脚本忽略。更多信息,请参见参数说明

使用批量挂载功能,新的协议类型或者挂载参数为什么没生效?

如果指定挂载路径已经挂载至当前挂载点时,那么新指定的协议类型和挂载参数就会被忽略。请您先卸载目标挂载路径,然后使用新的协议类型和挂载参数重新执行挂载操作。

通过云助手批量挂载、卸载、查询状态失败时,该怎么办?

首先确认填写的挂载参数都符合条件。其次观察命令结果的错误码,根据错误提示进一步处理。更多信息,请参见错误信息。最后可以使用一键挂载功能,尝试先在一台ECS上面执行操作,如果失败再看相关报错提示,处理问题。

您也可以通过NAS控制台,先在一台ECS实例上挂载文件系统,如果挂载失败,请根据提示信息进一步处理。

如何修改同时发起的NFS请求数量?

NFS客户端对同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能,建议您将该参数值修改为128。

  • 方法一
    1. 安装NFS客户端。具体操作,请参见安装NFS客户端
    2. 执行以下命令,将同时发起的NFS请求数量修改为128。
      echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
      echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf
      说明 您只需在首次安装NFS客户端后执行一次此操作(必须通过root用户操作),之后无需重复执行。
    3. 重启云服务器ECS。
      reboot
    4. 挂载文件系统。具体操作,请参见挂载NFS文件系统
    5. 执行以下命令查看修改结果。
      如果返回值为128,则说明修改成功。
      cat /proc/sys/sunrpc/tcp_slot_table_entries
  • 方法二
    1. 安装NFS客户端。具体操作,请参见安装NFS客户端
    2. 执行以下命令,将同时发起的NFS请求数量修改为128。
      echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
      echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf
      说明 您只需在首次安装NFS客户端后执行一次此操作(必须通过root用户操作),之后无需重复执行。
    3. 重新挂载文件系统。具体操作,请参见挂载NFS文件系统
    4. 执行以下命令查看修改结果。
      如果返回值为128,则说明修改成功。
      cat /proc/sys/sunrpc/tcp_slot_table_entries

如何在Linux系统中创建NAS子目录并完成挂载?

请确保您已挂载文件系统。具体操作,请参见Linux系统挂载NFS文件系统

假设挂载时,将NAS的根目录挂载到ECS Linux的/mnt目录上。挂载成功后,/mnt相当于NAS的根目录,您可以在/mnt目录下创建NAS子目录。

  1. 在ECS Linux上,创建NAS子目录。
    mkdir /mnt/subdir
  2. 创建用于挂载NAS的本地目录。
    mkdir /tmp/mnt
    说明 服务器中的一个本地目录只能挂载一个文件系统。您可以创建多个本地目录用于挂载文件系统。
  3. 重新挂载文件系统。
    sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.nas.aliyuncs.com:/ /mnt
    重要字段说明如下所示,请根据实际情况替换。
    • file-system-id.region.nas.aliyuncs.com:表示挂载点地址。您可以登录NAS控制台,在文件系统列表页面单击目标文件系统名称,进入详情页面单击挂载使用获取挂载点地址。
    • /subdir:表示NAS子目录。
    • /tmp/mnt:表示服务器的本地目录。

如何处理误删挂载点导致的Linux服务器异常?

  • 现象描述

    假设在Linux操作系统中通过挂载点A挂载文件系统,在未卸载的情况下,通过NAS控制台上删除了挂载点A,导致Linux系统出现执行命令卡顿、无响应等异常情况。

  • 解决方案
    1. 在服务器(如ECS Linux)中,按Ctrl+C,中断命令的执行。
    2. 执行mount命令,查看挂载信息。
      通过挂载信息,获取挂载路径。如下图/mnt/data为当前挂载路径。查看挂载信息
    3. 执行umount -f /mnt/data命令强制卸载文件系统。
      命令格式:umount -f <挂载地址>
      说明 如果执行umount -f <挂载地址>命令未解决问题,您也可以执行umount -l <挂载地址>命令。
      卸载完成后,您可以重新创建挂载点,再次尝试挂载文件系统。

如何避免NFS 4.0监听端口被误认为木马?

  • 问题现象

    通过NFSv4.0协议挂载NAS文件系统后,将有一个0.0.0.0的随机端口被监听,并且无法通过netstat定位该监听端口的进程。

    由于被监听的端口不固定,并且无法定位监听进程,很容易被误判为文件传输受到木马攻击。

  • 问题原因

    此随机端口是NFSv4.0客户端为了支持Callback而监听的。因为内核参数fs.nfs.nfs_callback_tcpport默认是0,所以NFSv4.0客户端会随机挑选一个端口进行监听,而随机端口本身并不会带来安全风险。

  • 解决方案
    在挂载文件系统之前,您可以通过配置参数fs.nfs.nfs_callback_tcpport到一个非零的确定值,以固定该端口。
    sudo sysctl fs.nfs.nfs_callback_tcpport=<port>          

    在以下示例中,将fs.nfs.nfs_callback_tcpport手动配置到端口45450。通过NFSv4.0协议挂载文件系统之后,netstat定位到被监听的端口即为手动配置的端口45450(请注意以下示例中使用的是root用户,所以不需要使用sudo执行sysctl命令)。

为什么使用Linux客户端无法读写文件系统中命名为中文的文件?

在文件系统中命名为中文的文件均为Windows客户端创建的,文件名为GBK编码。Linux客户端字符编码默认为UTF-8,所以无法识别命名为中文的文件。建议您使用Windows客户端读写命名为中文的文件。

使用Linux操作系统在NFS文件系统中执行ls命令时,为什么会返回523错误?

  • 问题现象
    Linux客户端在NFS文件系统中执行ls命令时,返回如下报错信息。29
  • 原因分析

    对文件系统目录下执行ls时,该目录有并发的rename操作,则回返回523错误。

  • 解决方案

    稍等重试即可。如果还出现类似报错,请提交工单咨询。

如何检查并解决Windows挂载SMB文件系统的报错?

  1. 系统错误53
    • 错误描述

      未找到网络路径。

    • 原因分析
      • 网络未连通。
      • TCP/IP NetBIOS Helper服务未启动。
      • 注册表未正确配置LanmanWorkstation。
    • 解决方案
      1. 执行ping <挂载点地址>命令检查挂载点地址是否连通,延时是否正常。
        • 如果网络连接正常,则执行步骤b。
        • 如果网络连接不通,请您先通过以下方式排查网络异常。
          • 确认挂载命令正确,无多余或缺少/\、空格及myshare等内容。
            正确挂载SMB文件系统的命令格式:
            net use <挂载目标盘符> \\<挂载点地址>\myshare
            示例:
            net use z: \\xxxx.cn-hangzhou.nas.aliyuncs.com\myshare 
          • 在控制台确认文件系统类型为SMB。
          • 确认挂载点地址填写正确。
          • 确认ECS实例与挂载点在同一个VPC中。
          • 确认跨VPC或通过VPN连入的客户端,网络配置正确。
      2. 执行telnet <挂载点地址> 445命令检查SMB服务是否可用。
      3. 确认是否已启动TCP/IP NetBIOS Helper服务。具体操作,请参见Windows系统挂载SMB文件系统
      4. 打开注册表,确认HKEY_LOCAL_MACHINE > System > CurrentControlSet > Control > NetworkProvider > OrderProviderOrder的值已包括LanmanWorkstation。如果没有,请添加。 检查注册表
  2. 系统错误58
    • 错误描述

      指定的服务器无法运行请求的操作。

    • 原因分析

      客户端SMB协议版本不兼容。

    • 解决方案

      请确认Windows系统版本为Windows 2008 R2及以上版本(不包括Windows 2008)。

  3. 系统错误64
    • 错误描述

      指定的网络名不可用。

    • 原因分析
      • NAS权限组未允许目标ECS访问。
      • NAS权限组未正确配置目标ECS的内网IP地址或VPC IP地址。
      • 服务欠费。
      • 选择经典网络进行挂载时,ECS和NAS不属于同一阿里云UID。
      • 文件系统类型不是SMB。
    • 解决方案
      无权访问NAS文件系统资源,请从以下方面进行排查。
      1. 确认文件系统挂载点权限组已包含该机器的内网IP或VPC IP。
      2. 确认阿里云UID未欠费。
      3. 确认经典网络挂载时,ECS和NAS属于同一个阿里云UID。
      4. 确认文件系统类型为SMB。系统错误 64
  4. 系统错误67
    • 错误描述

      找不到网络名。

    • 原因分析

      关键的网络服务未启动。

    • 解决方案
      启动如下服务,具体操作可参见Windows系统挂载SMB文件系统
      1. 启用Workstation服务。
      2. 启用TCP/IP NetBIOS Helper服务。
  5. 系统错误85
    • 错误描述

      本地设备名已在使用中。

    • 原因分析

      目标盘符已被占用。

    • 解决方案

      请更换目标盘符重新挂载文件系统。

  6. 系统错误1231
    • 错误描述

      无法连接网络位置。

    • 原因分析
      • 系统未安装或未启用Microsoft网络客户端。
      • 系统未安装或未启用Microsoft网络的文件和打印机共享。
    • 解决方案

      安装并启用Microsoft网络客户端或Microsoft网络的文件和打印机共享。

      如果已安装但未启用Microsoft网络客户端或Microsoft网络的文件和打印机共享,请选中对应的选项。并通过以下方式安装并开启对应的选项。

      系统错误1231
      1. 打开网络与共享中心,单击主机所连网络。
      2. 单击属性
      3. 无线网络连接属性对话框中,单击安装
        • 安装Microsoft网络客户端。
          1. 选择网络功能类型对话框中,选择客户端,单击添加
          2. 选择Client for Microsoft Networks,单击确定
        • 安装Microsoft网络的文件和打印机共享。
          1. 选择网络功能类型对话框中,选择服务,单击添加
          2. 选择Microsoft > File and Printer Sharing for Microsoft,单击确定
  7. 系统错误1272
    • 错误描述

      系统提示:不能访问此共享文件夹,因为您组织的安全策略阻止未经身份验证的来宾访问。这些策略可帮助保护您的电脑免受网络上不安全设备或恶意设备的威胁。

    • 原因分析

      Windows系统因安全策略阻挡了以来宾访问权限(Guest Auth)访问SMB文件系统的用户。

    • 解决方案
      若您的系统为Windows Server 2016之后版本(不包括WindowsServer 2016),请修改以下注册表项允许来宾访问权限(Guest Auth)。
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
      "AllowInsecureGuestAuth"=dword:1
      具体解决方案,请参见Guest access in SMB2 disabled by default in Windows

为什么两台ECS实例在查询NAS文件系统中同一文件时,文件的属主不同?

在文件系统中,标识用户身份的不是用户名,而是UID或GID,您在ECS实例查询的属主用户名是由UID信息转换得到的,当同一UID在不同ECS实例中信息转换为不同的用户名,则会被认为是不同的属主。

例如,在ECS实例1中使用admin用户创建文件admin_on_machine1,在ECS实例2中使用admin用户创建文件admin_on_machine2。在ECS实例1中执行ls -l命令,查看已创建的文件,如下图所示:faq001在ECS实例2中执行ls -l命令,查看已创建的文件,如下图所示:faq002通过两台ECS实例查询可以看到,同一文件的属主用户名不一致。
然后,分别执行id命令,查询admin用户信息。如下图所示ECS实例1中admin用户的UID为505:faq04如下图所示ECS实例2中admin用户的UID为2915:faq005如下图所示执行stat admin_on_machine1 admin_on_machine2命令,查询到两个文件属于不同的UID:faq

为什么Windows 2016以后的版本不支持挂载SMB文件系统?

  • 问题现象

    命令及错误提示:

    C:\Users\Administrator>net use z: \\xxxxx-xxxx.xxxxx.nas.aliyuncs.com\myshare
    System error 1272 has occurred.
    You can't access this shared folder because your organization's security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network.
  • 解决方案:

    造成以上问题的原因是Windows Server的这个版本的安全特性默认不支持Guest用户访问远程共享目录。

    解决方案如下:

    • 修改注册表:
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
      "AllowInsecureGuestAuth"=dword:0

      修改为:

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
      "AllowInsecureGuestAuth"=dword:1
    • 切换到Powershell,执行以下命令:
      New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType DWORD -Force

    具体解决方案,请参见Guest access in SMB2 disabled by default in Windows 10, Windows Server 2016 version 1709, and Windows Server 2019

为什么SMB文件系统挂载有时候连接不上?

  • 问题现象:

    当您混用NFS和SMB文件系统,导致第一次通过net use命令挂载NFS文件系统连接失败后,挂载正确的SMB文件系统也会出现问题。

  • 解决方案:

    检查确保挂载正确的文件系统后,暂时停止挂载,5分钟后再次挂载。如果还失败,请您提交工单

为什么Administrator能看见挂载的SMB目录,其他用户看不到?

该现象是由于Windows的用户隔离机制造成的。即一个登录用户的已挂载目录在另一个用户的登录界面中不会显示。

要实现多用户的共享,需要创建一个目录链接。比如C盘下创建一个myshare,命令如下:
mklink /D C:\myshare \\xxxxxxx-xxxx.cn-beijing.nas.aliyuncs.com\myshare\

为什么Windows Server 2016 IIS无法加载SMB volume文件?

Windows Server 2016的IIS无法加载SMB文件系统的解决方案,请参见安装和配置AD域

如何检查并解决IIS服务在阿里云NAS上的使用问题?

如果遇到Windows 2016挂载SMB失败,HTTP错误500.19,错误码0x8007003a等类似报错。解决方案,请参见IIS服务在阿里云NAS上的最佳实践

阿里云NAS是否支持NFS和SMB同时挂载一个文件系统?

不支持,不能使用NFS和SMB协议同时挂载同一个文件系统。

建议避免使用Linux操作系统作为访问SMB文件系统,可能会导致一些操作上的问题。例如支持的字符集、文件名的长度(Windows支持255宽字符,Linux支持255 UTF8字节)不一致等问题。

如果您的业务场景需要使用Linux操作系统访问SMB,建议您在SMB2及以上的kernel上挂载文件系统。

挂载命令: mount -t cifs -o vers=2.0 \\挂载点\myshare /mnt 或者 mount -t cifs -o vers=2.0 //挂载点/myshare /mnt
说明 执行命令后,如果提示需要输入密码,请您点击回车跳过即可。

确认Kernel是否支持CIFS挂载:在/boot下,检查CONFIG_CIFS的配置,y或m表示支持。

说明
  • 执行以上命令前需要安装cifs-utils。以CentOS操作系统为例,执行如下安装命令:
    yum install samba-client samba-common cifs-utils
  • 如果遇到一些Linux系统对CIFS支持方面的问题,建议升级kernel到3.10.0-514及以上版本。

为什么Linux无法挂载SMB文件系统?

通常有以下原因:
  • 使用了低版本或者不兼容的Linux操作系统版本,SMB文件系统支持如下的Linux分发版本。
    • CentOS 7.6 64bit(3.10.0-957.5.1.el7.x86_64)
    • Ubuntu 18.04 64bit(4.15.0-48-generic)
    • Debian 9.9 64bit(4.9.0-9-amd64)
    • Suse Enterprise Server 12 SP2 64bit(4.4.74-92.35-default)
    • OpenSUSE 42.3 64bit(4.4.90-28-default)
    • Aliyun Linux(4.19.34-11.al7.x86_64)
    • CoreOS(4.19.43-coreos VersionID=2079.4.0)
  • 客户端上未安装CIFS挂载工具(cifs-utils)或者mount.cifs不在PATH指定的命令搜寻目录中。
  • 云服务器ECS(Linux)和SMB文件系统的网络不通。
    • 云服务器ECS(Linux)和SMB文件系统不属于同一个阿里云用户。
    • 云服务器ECS(Linux)和SMB文件系统不在同一个阿里云地域(Region)。
    • 云服务器ECS(Linux)和SMB文件系统不处于可连通的网络(VPC或经典网络)中。
      说明 NAS支持本地挂载,如果Linux客户端在用户IDC中,可能是该IDC和SMB文件系统所处的网络(VPC或经典网络)没有通过阿里云高速通道连接成功。
    • SMB文件系统的白名单设置不允许云服务器ECS(Linux)连接。
    • 云服务器ECS(Linux)防火墙设置为不允许访问SMB文件系统的IP地址或445端口。
    • 云服务器ECS(Linux)试图通过不受支持的TCP端口连接,现在SMB只支持445端口。
    说明

    您可以通过ping <VolumeDomainName>telnet <VolumeDomainName> 445检查连通性。

    如果端口445未打开,请在目标ECS实例的安全组中添加关于端口445的安全组规则,详情请参见添加安全组规则

  • 云服务器ECS(Linux)管理员没有root权限或者没有被设置为有mount命令的sudo权限。
  • 挂载时使用的文件系统类型不是CIFS。
  • 挂载时使用的vers选项不是2.0。
  • 挂载时没有指定Guest方式挂载。
  • 挂载时指定的UID、GID、dir_mode或者file_mode不正确。
  • 挂载的目标目录的SELINUX设置不正确。
  • 云服务器ECS(Linux)挂载连接数太多,超过了单文件系统挂载上限(1000个),在容器场景较容易出现。
解决方案:
  1. 自行排查上述可能原因。更多信息,请参见Linux系统挂载SMB文件系统
  2. 检查/var/log/messages和dmesg输出,进行排查。
  3. 提交工单,联系阿里云NAS团队协助排查。

    同时请提供Linux版本信息、具体挂载命令、/var/log/messages和dmesg输出。

如何解决Linux挂载SMB文件系统性能不佳?

如果SMB文件系统性能不佳,您可以从以下方面进行排查。

  • 原因1:SMB单个文件系统的吞吐能力与存储量是相联系的。单文件系统的吞吐(读+写)上限与当前存储量呈线性关系。

    解决方案:使用fio工具来测试SMB文件系统性能。具体操作,请参见NAS性能测试

  • 原因2:云服务器ECS(Linux)的单机网络带宽较小。

    解决方案:使用多个云服务器ECS(Linux)达到文件系统的总体预期性能。

  • 原因3:禁用了SMB文件系统的客户端缓存。

    解决方案:在挂载SMB文件系统时,cache=none表示禁用缓存,默认或者cache=strict表示使用缓存;您可以通过sudo mount | grep cifs命令检查所用的选项是否正确。

  • 原因4:没有设置合适的SMB客户端的I/O大小。

    解决方案:根据业务需求调整rsize及wsize,默认值:1048576。

  • 原因5:云服务器ECS(Linux)的CPU或内存的规格过低,或被其它业务占用过多。

    解决方案:选择合适的云服务器ECS(Linux)规格、检查系统其它应用资源,确保系统满足CPU和内存要求。您可以通过top命令检查系统CPU、MEM使用情况。

  • 原因6:挂载时使用了atime选项。

    解决方案:如果您的业务不是对文件的访问时间(atime)极为敏感,请不要在挂载时使用atime选项。

  • 原因7:遇到大量小文件频繁读、少量写但需要写时通知的WebServer场景。

    解决方案:您可以在客户端配置该WebServer(如Apache)产品特定的缓存机制或者联系阿里云NAS团队开通WebServer场景加速功能。

为什么Linux挂载SMB文件系统迁移和复制文件时速度缓慢?

如果已经排除了文件系统本身的性能问题,则可能原因是您没有使用并发式迁移或复制文件。您可以通过以下开源工具进行迁移或复制。

  • GNU Parallel

    根据系统资源,选择合适的线程数。示例:find * -type | parallel --will-cite -j 10 cp {} /mnt/smb/ &

  • Fpart
  • Fpsync
  • multi

Linux访问SMB文件系统时,报Permission denied错误,该怎么解决?

原因:Linux管理员在挂载时使用了不正确的UID、GID、file_mode、dir_mode。

解决方案:检查是否正确设置了UID、GID、file_mode、dir_mode等挂载选项。更多信息,请参见Linux系统挂载SMB文件系统

如何变更SMB文件系统中文件名大小写?

SMB文件系统对文件名大小写不敏感,和Windows系统保持一致。但在文件名大小写改名这个场景暂时没有支持。

您可以先从大写文件名改成一个其它名字的文件,再改成小写文件名,反之亦然。

为什么不能改变文件owner,文件和目录mode?

现在暂时不支持动态改变,只能在挂载时指定。更多信息,请参见Linux系统挂载SMB文件系统

并发访问同一文件时,服务器端出现无响应35s现象,该如何处理?

原因:当前Linux SMB内核驱动有缺陷,会造成在使用vers=2.1或者3.0挂载时,在某些并发场景不能发出服务器端期待的SMB BreakAck协议包,导致服务器端无响应35s。

解决方案一:挂载文件系统时,使用vers=2.0协议。

解决方案二:执行以下操作。
  1. 在加载CIFS模块时,禁用oplock,执行以下命令。

    # modprobe cifs enable_oplocks=0

  2. 当CIFS模块加载完成时,禁用oplocks,执行以下命令。

    # echo 0 > /sys/module/cifs/parameters/enable_oplocks

  3. 检查oplock的状态,执行以下命令。

    # cat /sys/module/cifs/parameters/enable_oplocks

    输出结果中,Y代表启用(enabled)。N代表禁用(disabled)。

    说明
    • 为了使以上的修改生效,请卸载并重新挂载SMB文件系统。
    • 如果您想使以上的修改永久生效,请创建文件/etc/modprobe.d/cifs.conf并添加命令行options cifs enable_oplocks=0

为什么SMB文件系统挂载点无响应?

原因:在Linux内核为3.10.0-514之前的Linux分发版中,SMB内核驱动在并发场景有时会crash(内核stack如下所示),导致挂载点无法被访问。内核日志中有如下类似信息:
...
[<ffffffffc03c9bc1>] cifs_oplock_break+0x1f1/0x270 [cifs]
[<ffffffff810a881a>] process_one_work+0x17a/0x440
[<ffffffff810a8d74>] rescuer_thread+0x294/0x3c0
...
解决方案:
  • 使用cache=none重新挂载(性能会受影响)。
  • 升级云服务器ECS(Linux)的操作系统。

如何解决Windows挂载NFS文件系统的报错?

  • 问题描述:无效文件句柄

    解决方案:请您按照正确步骤及参数配置重新挂载。具体操作,请参见Windows系统挂载NFS文件系统

  • 问题描述:网络错误-53

    解决方案:请您按照正确步骤及参数配置重新挂载,具体操作,请参见Mounting NFS on a Windows Client

  • 问题描述:网络错误-1222MISTAKE

    解决方案:请您安装NFS客户端之后,重新执行挂载操作。具体操作,请参见安装NFS客户端

如何检查并解决Windows NFS soft挂载问题?

  • 问题描述
    在Windows系统上使用NFS文件系统时,默认使用soft模式进行挂载,而在以下场景中soft模式会对数据一致性造成影响,并且会造成应用异常退出。
    • 数据一致性:使用soft模式挂载时,如果请求超时,则返回错误。对于应用,这个操作是未完成的;对于服务端,这个请求可能已经执行,所以会造成数据不一致。
    • 应用异常退出:使用soft模式挂载时,如果请求超时,则返回超时错误。在某些语言中,会抛出异常,如果应用未处理,则会异常退出。
  • 解决方案2
    在Windows系统中,使用hard模式挂载NFS文件系统,可以避免以上问题。
    1. 执行mount命令检查当前的挂载模式。
      • 如果显示mount=soft,则按照以下步骤进行整改。
      • 如果显示mount=hard,则无需整改。
    2. 停止当前正在使用此NFS文件系统的应用。
    3. 卸载NFS文件系统。
      umount H:
      请根据实际挂载盘符进行替换挂载命令中的盘符H:
    4. 重新挂载NFS文件系统。
      mount -o nolock -o mtype=hard -o timeout=60 \\xxxxxx.cn-hangzhou.nas.aliyuncs.com\! h:
      请根据实际情况替换挂载点地址xxxxxx.cn-hangzhou.nas.aliyuncs.com和挂载盘符h:
    5. 执行mount命令验证挂载结果。
      如果回显信息包括mount=hard、locking=no以及timeout的参数值>=10,则表示挂载成功。

如何解决Windows客户端对NFS文件系统中的文件重命名时返回的invalid device错误?

如果NFS文件系统是挂载在ECS的子目录上,当执行文件重命名操作时,会返回的invalid device错误,请您将文件系统挂载在ECS的根目录上。

当文件系统无法结束进程时,如何清理客户端泄露的句柄?

您可以使用以下工具断开SMB文件系统的所有连接,从而释放所有句柄。
  • Windows客户端
    使用tcpview工具断开SMB文件系统的所有连接。具体操作,请参见tcpview4
  • Linux客户端

    使用killcx工具断开SMB文件系统的所有连接。具体操作,请参见killcx

如何避免多进程或多客户端并发写同一日志文件可能出现的异常?

  • 问题现象

    文件存储NAS为多客户端提供了统一名字空间的文件共享读写能力,但在多进程或多客户端并发写同一个文件的场景中(典型的例如并发写同一个日志文件),各进程分别维护了独立的文件描述符及写入位置等上下文信息,而NFS协议本身并没有提供Atomic Append语义的支持,因此可能会出现写覆盖、交叉、串行等异常现象。

  • 解决方案
    • (推荐)不同进程或不同客户端写入同一文件系统的不同文件中,后续分析处理时再进行归并,这个方案能够很好地解决并发写入导致的问题,同时无需使用文件锁,不会对性能造成影响。
    • 对于并发追加写同一个文件(如日志)的场景,可以使用文件锁+seek机制来保证写入的原子性和一致性。但是文件锁+seek是一个比较耗时的操作,可能会对性能产生显著的影响。下面将对这种方式进行一个简单的介绍,以供参考。
  • flock+seek使用方法

    由于NFS协议本身没有提供对Atomic Append语义的支持,因此当并发写入同一文件末尾(如日志)时,很可能会出现相互覆盖的情况。在Linux中,通过使用flock+seek的方式,可以在NFS文件系统上做到模拟Atomic Append,对并发追加写入同一文件提供保护和支持。

    使用方式如下:
    1. 调用fd=open(filename, O_WRONLY | O_APPEND | O_DIRECT) 以追加写的方式打开文件,并且指定 O_DIRECT(直写,不通过 Page Cache),获得文件描述符fd。
    2. 调用flock(fd, LOCK_EX|LOCK_NB)尝试获取文件锁,如果获取失败(如锁已被占用)则会返回错误,此时可以继续重试或进行错误处理。
    3. 文件锁获取成功后,调用lseek(fd, 0, SEEK_END)将fd当前的写入偏移定位到文件末尾。
    4. 执行正常的write操作,此时写入位置应该是文件的末尾,并且由于有文件锁的保护,不会出现并发写入相互覆盖的问题。
    5. 写操作执行完成后,调用flock(fd, LOCK_UN) 释放文件锁。
    下面是一个简单的C语言示例程序:
    #define _GNU_SOURCE
    #include<stdlib.h>
    #include<stdio.h>
    #include<fcntl.h>
    #include<string.h>
    #include<unistd.h>
    #include<sys/file.h>
    #include<time.h>
    
    const char *OUTPUT_FILE = "/mnt/blog";
    int WRITE_COUNT = 50000;
    
    int do_lock(int fd)
    {
        int ret = -1;
        while (1)
        {
            ret = flock(fd, LOCK_EX | LOCK_NB);
            if (ret == 0)
            {
                break;
            }
            usleep((rand() % 10) * 1000);
        }
        return ret;
    }
    
    int do_unlock(int fd)
    {
        return flock(fd, LOCK_UN);
    }
    
    int main()
    {
            int fd = open(OUTPUT_FILE, O_WRONLY | O_APPEND | O_DIRECT);
            if (fd < 0)
            {
                    printf("Error Open\n");
                    exit(-1);
            }
            for (int i = 0; i < WRITE_COUNT; ++i)
            {
                    char *buf = "one line\n";
    
                    /* Lock file */
                    int ret = do_lock(fd);
                    if (ret != 0)
                    {
                            printf("Lock Error\n");
                            exit(-1);
                    }
    
                    /* Seek to the end */
                    ret = lseek(fd, 0, SEEK_END);
                    if (ret < 0)
                    {
                            printf("Seek Error\n");
                            exit(-1);
                    }
    
                    /* Write to file */
                    int n = write(fd, buf, strlen(buf));
                    if (n <= 0)
                    {
                            printf("Write Error\n");
                            exit(-1);
                    }
    
                    /* Unlock file */
                    ret = do_unlock(fd);
                    if (ret != 0)
                    {
                            printf("UnLock Error\n");
                            exit(-1);
                    }
            }
            return 0;
    }
                
    更详细的flock()使用方式,请参见filck()
    说明 在NAS文件系统上使用flock()需要您的Linux内核版本在2.6.12及以上,如果您的内核版本较低,请使用fcntl()调用。

为什么要使用noresvport参数挂载NAS?

如果发生网络切换或者后端服务的HA倒换,小概率会造成NFS文件系统阻塞,若发生则可能需要几分钟时间连接才会自动恢复,极端情况下甚至需要重启ECS才能恢复。使用noresvport参数后,仅需要几秒即可自动完成恢复。

如何检查并修改noresvport挂载参数问题?

说明 只适用于Linux系统的用户,Windows用户及在阿里云容器服务ACK中通过CSI或Flexvolume插件使用NAS的用户请忽略。
  1. 检查文件系统挂载是否使用noresvport挂载参数。
    1. 执行以下命令,在ECS(Linux)下载check_noresvport.py检查脚本。
      wget -N https://code.aliyun.com/nas_team/nas-client-tools/raw/master/linux_client/check_noresvport.py -P /tmp/
    2. 执行检查脚本,以下命令是以python为示例。
      python2.7 /tmp/check_noresvport.py
      如果检查脚本输出:本台ECS无须处理noresvport问题,则无须处理,其他情况请执行以下步骤进行修复。
  2. 修复noresvport参数。
    说明 建议在业务低峰进行修复。
    请根据实际挂载场景选择以下修复方法:
    • 如果使用ECS直接挂载NAS,请使用参数-r再次执行检查脚本。
      python2.7 /tmp/check_noresvport.py -r
    • 如果使用容器挂载NAS,请使用参数-c再次执行检查脚本。
      python2.7 /tmp/check_noresvport.py -c
  3. 更新自动挂载配置。
    • 如果配置过自动挂载,请更新自动挂载参数,加入noresvport挂载参数。更多信息,请参见自动挂载NFS文件系统
    • 如果没有配置过自动挂载,跳过此步骤。
    修复完成后,请再次执行步骤1,确认修复生效。如果仍有问题请提交工单联系阿里云NAS团队协助排查。

什么情况会引发网络切换或者后端服务的HA倒换?

NAS服务是稳定的,网络切换或者后端服务的HA倒换都是罕见情况。后端服务升级会触发上述切换,但导致客户端阻塞的概率很低,并且在升级之前阿里云NAS团队会提前通知相关集群的用户,留出充足时间使用noresvport参数。其他可能引发切换的场景,还有负载均衡调整、服务端硬件故障等情况,有一定的不可预测性,所以即使服务端没有升级安排,也请尽快使用noresvport参数避免这样的风险。

为什么需要重新挂载?还有没有其他的方案?

需要重新挂载的原因是要把之前没有使用noresvport参数的TCP连接断开,然后使用noresvport参数挂载时,会建立新的TCP连接。为了把旧的TCP连接断开,就必须把NAS相关的业务都终止,然后执行umount卸载。

如果不希望重新挂载,可以考虑新建NAS挂载点,使用noresvport参数挂载到新的本地路径,然后把业务进程逐步迁移过去,最后废弃旧的挂载路径和挂载点。

前缀为.nfs的文件是怎么产生的?如何删除?

在应用程序已经打开某文件时,如果删除该文件,则会产生前缀为.nfs的临时文件。当访问进程关闭后,该临时文件将自动被删除。

访问NAS文件系统目录下的文件时,返回bind conn to session failed on NFSv4 server该如何解决?

  • 问题原因

    由于文件存储NAS不支持NFSv4.1协议,当您使用NFSv4.1协议挂载文件系统时产生该报错。

  • 解决方案

    请您根据业务场景选择使用NFSv3或NFSv4.0协议重新挂载文件系统。更多信息,请参见挂载说明