你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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
)复制源数据。 复制数据后,可以使用工具(如 smbcacls
或 cifsacl
)复制元数据。
以下示例命令执行第一步,使用 rsync
复制数据。
cp -aR /etc /opt/
rsync -avP /etc /opt (-a copies a directory)