你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Data Box 保留文件 ACL、属性和时间戳

Azure Data Box 允许在将数据发送到 Azure 时保留访问控制列表(ACL)、时间戳和文件属性。 本文介绍通过服务器消息块 (SMB) 将数据复制到 Data Box 以便上传到 Azure 文件时可以传输的元数据。

传输的元数据

ACL、时间戳和文件属性是将数据从 Data Box 上传到 Azure 文件时传输的元数据。 在本文中,ACL、时间戳和文件属性统称为 元数据

可以使用 Windows 和 Linux 数据复制工具复制元数据。 将数据传输到 Blob 存储时,不会保留元数据。 通过 NFS 复制数据时,也不会传输元数据。

本文的后续部分详细介绍了将数据从 Data Box 上传到 Azure 文件时如何传输时间戳、文件属性和 ACL。

时间戳

以下时间戳被传递:

  • 创建时间
  • 最后写入时间

不会传输以下时间戳:

  • 最后访问时间

文件属性

除非另有说明,否则文件和目录上的文件属性都会传输。

传输以下文件属性:

  • FILE_ATTRIBUTE_READONLY(仅限文件)
  • FILE_ATTRIBUTE_HIDDEN
  • 文件属性系统
  • FILE_ATTRIBUTE_DIRECTORY(仅限目录)
  • FILE_ATTRIBUTE_ARCHIVE
  • 文件属性:临时(仅限文件)
  • 文件属性_无数据清理

不会传输以下文件属性:

  • FILE_ATTRIBUTE_OFFLINE
  • FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

不会传输目录上的只读属性。

备用数据流和扩展属性

Azure 文件存储、页 Blob 或块 Blob 存储不支持备用数据流和扩展属性,因此复制数据时不会传输它们。

ACL

根据所使用的传输方法以及你使用的是 Windows 或 Linux 客户端,在将数据复制到 Azure 文件的过程中,可能会传输文件和文件夹上的部分或全部任意和默认访问控制列表(ACL)。

默认情况下启用 ACL 传输。 你可能希望在 Data Box 上的本地 Web UI 中禁用此设置。 有关详细信息,请参阅 使用本地 Web UI 管理 Data Box 和 Data Box Heavy

注释

不复制包含条件访问控制项 (ACE) 字符串的 ACL 的文件。 这是一个已知问题。 若要解决此问题,请通过装载共享并使用支持复制 ACL 的复制工具手动将这些文件复制到 Azure 文件共享。

ACL 通过 SMB 传输

SMB 文件传输期间,将传输以下 ACL:

  • 复制到 Data Box 的目录和文件的任意 ACL (DACL) 和系统 ACL (SCL)。
  • 如果使用 Linux 客户端,则只会传输 Windows NT ACL。

通过数据复制服务传输 ACL

在数据复制服务文件传输期间,将传输以下 ACL:

  • 复制到 Data Box 的目录和文件的任意 ACL (DACL) 和系统 ACL (SCL)。

若要从文件中复制 SACL,必须提供拥有 SeBackupPrivilege 的用户的凭据。 默认情况下,管理员或备份操作员组中的用户拥有此特权

如果你不拥有 SeBackupPrivilege:

  • 无法复制 Azure 文件复制服务作业的 SCL。
  • 可能会遇到访问问题并在错误日志中收到此错误: 由于权限不足,无法从共享中读取 SCL

有关详细信息,请参阅 SeBackupPrivilege

ACL 通过 NFS 传输

通过 NFS 复制数据时,ACL(和元数据属性)不会传输。

默认 ACL 传输

使用 Windows 客户端时,即使数据复制工具不复制 ACL,目录和文件上的默认 ACL 也会传输到 Azure 文件。 使用 Linux 客户端时,不会传输默认 ACL。

传输以下默认 ACL:

  • 帐户权限:

    • 内置管理员帐户
    • 系统帐户
    • 用于在 Data Box 中装载和复制数据的 SMB 共享用户帐户
  • 具有以下属性的安全描述符:DACL、所有者、组、SACL

复制数据和元数据

若要传输数据的 ACL、时间戳和属性,请使用以下过程将数据复制到 Data Box。

Windows 数据复制工具

若要通过 SMB 将数据复制到 Data Box,请使用与 SMB 兼容的文件复制工具,例如 robocopy。 以下示例命令可复制所有文件和目录,并将元数据与数据一起传输。

使用 /copyall/dcopy:DAT 选项时,请确保未禁用所需的备份操作员权限。 有关详细信息,请参阅 使用本地 Web UI 管理 Data Box 和 Data Box Heavy

robocopy <Source> <Target> * /copyall /e /dcopy:DAT /B /r:3 /w:60 /is /nfl /ndl /np /MT:32 or 64 /fft /log+:<LogFile>

其中

选项 DESCRIPTION
/copyall 复制所有属性。
/e 复制子目录,包括空目录。
/dcopy:DAT 复制数据、属性和时间戳。 注意:/dcopy:DAT 选项必须用于在目录上传输 CreationTime
/B 在备份模式下复制文件。
/r:3 指定在复制失败时重试 3 次。
/w:60 指定重试之间的等待时间为 60 秒。
/is 包括相同的文件。
/nfl 不记录文件名。
/ndl 不记录目录名称。
/np 不显示复制操作的进度。
/MT:32 or 64 使用具有 32 个或 64 个线程的多线程。
/fft 减小任何文件系统的时间戳精细度。
/log+:<LogFile> 将输出追加到现有的日志文件。

有关这些 robocopy 参数的详细信息,请参阅 教程:通过 SMB 将数据复制到 Azure Data Box

注释

如果使用 /copyall 复制数据,则会将目录和文件上的源 ACL 传输到 Azure 文件。 如果仅对源数据具有读取访问权限,并且无法修改源数据,则仅对 Data Box 中的数据具有只读访问权限。 只有当你打算将目录和文件上的所有 ACL 连同数据一起复制时,才使用 /copyall

使用 robocopy 列出、复制、修改 Data Box 上的文件

下面是使用 robocopy 复制数据时使用的一些常见方案。

  • 仅将数据复制到 Data Box,目录和文件上没有 ACL

    使用 /dcopy:DAT 选项只复制数据、属性和时间戳。 目录和文件的访问控制列表(ACL)不会被复制。

  • 将目录和文件上的数据和 ACL 复制到 Data Box

    使用 /copyall 来复制所有源数据,包括目录和文件上的所有 ACL。

  • 使用 robocopy 列出 Data Box 上的文件系统

    使用此命令列出目录内容:

    robocopy <source-dir> NULL /l /s /xx /njh /njs /fp /B

    请注意,文件资源管理器不允许列出这些文件。

  • 在 Data Box 上复制或删除文件夹和文件

    使用此命令复制单个文件:

    robocopy <source-dir> <destination-dir> <file-name> /B

    使用此命令删除单个文件:

    robocopy <source-dir> <destination-dir> <file-name> /purge /B

    在上述命令中,<source-dir> 不应包含文件:<file-name>。 然后,上述命令会将目标与源同步,从而从目标中删除文件。

    请注意,文件资源管理器可能不允许你执行上述操作。

有关详细信息,请参阅 使用 robocopy 命令

Linux 数据复制工具

在 Linux 中传输元数据的过程分为两步。 首先,使用不复制元数据的工具(例如 rsync)复制源数据。 复制数据后,可以使用工具(如 smbcaclscifsacl)复制元数据。

以下示例命令执行第一步,使用 rsync 复制数据。

cp -aR /etc /opt/ 
rsync -avP /etc /opt (-a copies a directory)

后续步骤