跳到主要内容

配置卷上用于 SMB 文件名转换的字符映射

NFS 客户端可创建包含对 SMB 客户端和某些 Windows 应用无效的字符的文件名。您可以针对卷上的文件名转换配置字符映射,以使 SMB 客户端可使用 NFS 名称(否则会无效)访问文件。

关于本任务

当 SMB 客户端访问由 NFS 客户端创建的文件时,ONTAP 会查看该文件的名称。如果该名称为无效 SMB 文件名(例如,文件名嵌入有冒号 : 字符),则 ONTAP 会返回对每个文件所保持的 8.3 文件名。但是,这会对将重要信息编码到长文件名的应用程序造成问题。

因此,如果您在不同操作系统上的客户端之间共享文件,则文件名中应该使用对这两个操作系统均有效的字符。

但是,如果您的 NFS 客户端创建的文件名中包含对 SMB 客户端而言是无效文件名的字符,那么您可以定义一个映射,该映射可将无效 NFS 字符转换为 SMB 和某些 Windows 应用程序均可接受的 Unicode 字符。例如,此功能支持 CATIA MCAD 和 Mathematica 应用程序以及具有此需求的其他应用程序。

您可以逐卷配置字符映射。

在卷上配置字符映射时必须牢记以下几点:

  • 字符映射不会在接合点之间应用。

    必须针对各个接合卷明确配置字符映射。

  • 必须确保用于代表无效或非法字符的 Unicode 字符为通常不会出现在文件名中的字符。否则,会产生无用的映射。

    例如,如果尝试将冒号(:)映射为连字符(-),但文件名中已正确使用连字符(-)时,尝试访问名为a-b文件的 Windows 客户端会将其请求映射为a:bNFS 名称(并非所需结果)。

  • 在应用字符映射后,如果映射仍包含无效的 Windows 字符,ONTAP 会将该文件名恢复为 Windows 8.3 文件名。

  • FPolicy 通知、NAS 审核日志以及安全跟踪消息中会显示映射后的文件名。

  • 当创建了 DP 类型的 SnapMirror 关系时,源卷的字符映射不会被复制到目标 DP 卷上。

  • 区分大小写:由于映射的 Windows 名称变成了 NFS 名称,因此名称查找遵循 NFS 语义。这包括 NFS 查找区分大小写的事实。这意味着访问映射共享的应用程序不得依赖于 Windows 的区分大小写行为。不过,8.3 名称是可用的,并且不区分大小写。
  • 部分或无效映射:在映射名称以返回到进行目录枚举(“dir”)的客户端之后,将检查生成的 Unicode 名称的 Windows 有效性。如果该名称仍然包含无效字符,或者由于其他原因对 Windows 无效(例如以“.”或空白结尾),则返回 8.3 名称而不是无效名称。
配置字符映射:vserver cifs character-mapping create -vserver vserver_name -volume volume_name -mapping mapping_text, ...

映射由一系列使用:隔开的源-目标字符对组成。字符为使用位十六进制数输入的 Unicode 字符。例如:3C:E03C。

以冒号分隔的每个 mapping_text 对的第一个值是您想转换的 NFS 字符的十六进制值,第二个值是 SMB 使用的 Unicode 值。映射对必须是唯一的(应存在一对一映射)。

  • 源映射

    下表显示了源映射的允许 Unicode 字符集:

    Unicode 字符打印字符描述
    0x01-0x19不适用非打印控制字符
    0x5C\反斜线
    0x3A:冒号
    0x2A*星号
    0x3F?问号
    0x22"引号
    0x3C<小于符号
    0x3E>大于符号
    0x7C|竖线
    0xB1±加减符号
  • 目标映射

    您可在 Unicode 的专用区指定以下范围内的目标字符:U + E0000...U + F8FF。

示例

以下命令将为存储虚拟机(SVM) vs1 上名为data的卷创建字符映射:

cluster1::> vserver cifs character-mapping create -volume data -mapping 3c:e17c,3e:f17d,2a:f745
cluster1::> vserver cifs character-mapping show

Vserver Volume Name Character Mapping
-------------- ----------- ------------------------------------------
vs1 data 3c:e17c, 3e:f17d, 2a:f745