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

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

传输的元数据

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

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

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

时间戳

传输以下时间戳:

  • CreationTime
  • LastWriteTime

不传输以下时间戳:

  • LastAccessTime

文件属性

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

传输以下文件属性:

  • FILE_ATTRIBUTE_READONLY(仅限文件)
  • FILE_ATTRIBUTE_HIDDEN
  • FILE_ATTRIBUTE_SYSTEM
  • FILE_ATTRIBUTE_DIRECTORY(仅限目录)
  • FILE_ATTRIBUTE_ARCHIVE
  • FILE_ATTRIBUTE_TEMPORARY(仅限文件)
  • FILE_ATTRIBUTE_NO_SCRUB_DATA

不传输以下文件属性:

  • 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

注意

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

通过 SMB 传输 ACL

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

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

ACL 通过数据复制服务传输

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

  • 复制到 Data Box 的目录和文件的自定义 ACL (DACL) 和系统 ACL (SACL)。

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

如果你不拥有 SeBackupPrivilege:

  • 将无法复制 Azure 文件存储复制服务作业的 SACL。
  • 你可能会遇到访问问题并在错误日志中收到以下错误:“由于特权不足,无法从共享中读取 SACL”。

有关详细信息,请参阅 SeBackupPrivilege

ACL 通过 NFS 传输

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

默认 ACL 传输

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

传输以下默认 ACL:

  • 帐户权限:

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

复制数据和元数据

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

Windows 数据复制工具

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

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

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

where

选项 说明
/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 上的 filesystem

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

    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)

后续步骤