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

向 Azure 发送数据时,Azure Data Box Disk 允许保留访问控制列表 (ACL)、时间戳和文件属性。 本文介绍了将数据复制到 Data Box Disk 以便上传到 Azure 文件时可以传输的元数据。

传输的元数据

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

可以使用 Windows 数据复制工具复制元数据。 将数据传输到 Blob 存储时不保留元数据。

本文的后续部分会详细介绍在将 Data Box Disk 中的数据上传到 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 包含条件访问控制项 (ACE) 字符串的文件。 这是一个已知问题。 要解决此问题,请装载 Azure 文件共享,然后使用支持复制 ACL 的复制工具将这些文件手动复制到 Azure 文件共享。

复制数据和元数据

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

Windows 数据复制工具

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

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 Disk 中的数据具有读取访问权限。 只有当你打算将目录和文件上的所有 ACL 连同数据一起复制时,才使用 /copyall

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

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

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

    使用 /dcopy:DAT 选项只复制数据、属性和时间戳。 不会复制目录和文件上的 ACL。

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

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

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

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

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

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

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

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

    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)

后续步骤