使用 Azure 資料箱保留檔案 ACL、屬性和時間戳記
Azure 資料箱可讓您在將資料傳送至 Azure 時保留存取控制清單 (ACL)、時間戳記和檔案屬性。 本文說明透過伺服器訊息區 (SMB) 將資料複製到資料箱,以上傳至Azure 檔案儲存體時可傳輸的中繼資料。
傳輸的中繼資料
ACL、時間戳記和檔案屬性是將資料從資料箱上傳至 Azure 檔案儲存體時所傳輸的中繼資料。 在本文中,ACL、時間戳記和檔案屬性統稱為中繼資料。
您可以使用 Windows 和 Linux 資料複製工具來複製中繼資料。 將資料傳送至 Blob 儲存體時,不會保留中繼資料。 透過 NFS 複製資料時,也不會傳輸中繼資料。
本文的後續各節會詳細討論當資料箱中的資料上傳至 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 用戶端而定,檔案和資料夾的部分或所有任意和預設存取控制清單 (ACL) 可能會在資料複製到 Azure 檔案儲存體期間傳輸。
預設會啟用 ACL 傳輸。 您可能想要在資料箱上的本機 Web UI 中停用此設定。 如需詳細資訊,請參閱使用本機 Web UI 來管理您的資料箱和 Data Box Heavy。
注意
系統不會複製具有包含條件式存取控制項目 (ACE) 字串的檔案。 這是已知的問題。 若要解決此問題,請掛接共用,然後使用支援複製 ACL 的複製工具以手動方式將這些檔案複製到 Azure 檔案儲存體共用。
透過 SMB 傳輸 ACL
在 SMB 檔案傳輸期間會傳輸下列 ACL:
- 您複製到資料箱的目錄和檔案之任意 ACL (DACL) 和系統 ACL (SCL)
- 如果您使用 Linux 用戶端,則只會傳輸 Windows NT ACL。
透過資料複製服務傳輸 ACL
在資料複製服務檔案傳輸期間會傳輸下列 ACL:
- 您複製到資料箱的目錄和檔案之任意 ACL (DACL) 和系統 ACL (SCL)
如要從檔案複製 SACL,您必須針對具有 SeBackupPrivilege 的使用者提供認證。 系統管理員或備份操作員群組中的使用者預設會有此權限
如果您沒有 SeBackupPrivilege:
- 您將無法複製 Azure 檔案儲存體複製服務作業的 SCL。
- 您可能會遇到存取問題,並在錯誤記錄檔中收到此錯誤:權限不足,無法從共用中讀取 SACL。
如需詳細資訊,請深入了解 SeBackupPrivilege。
透過 NFS 傳輸 ACL
當您透過 NFS 複製資料時,不會傳送 ACL (和中繼資料屬性)。
預設 ACL 傳輸
即使您的資料複製工具未複製 ACL,當您使用 Windows 用戶端時,目錄和檔案上的預設 ACL 也會傳輸至 Azure 檔案儲存體。 當您使用 Linux 用戶端時,不會傳輸預設 ACL。
會傳輸下列預設 ACL:
帳戶權限:
- 內建的 Administrator 帳戶
- 系統帳戶
- 用來在資料箱中掛接和複製資料的 SMB 共用使用者帳戶
具有下列屬性的安全性描述項:DACL、擁有者、群組、SACL
複製資料和中繼資料
若要傳輸資料的 ACL、時間戳記和屬性,請使用下列程式將資料複製到資料箱。
Windows 資料複製工具
如要透過 SMB 將資料複製到資料箱,請使用與 SMB 相容的檔案複製工具,例如 robocopy
。 下列範例命令會複製所有檔案和目錄,連同資料一起傳輸中繼資料。
使用 /copyall
或 /dcopy:DAT
選項時,請確定未停用必要的備份操作員權限。 如需詳細資訊,請參閱使用本機 Web UI 來管理您的資料箱和 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>
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 資料箱
注意
如果您使用 /copyall
來複製資料,目錄和檔案上的來源 ACL 會傳輸到 Azure 檔案儲存體。 如果您只有來源資料的讀取權限而且無法修改來源資料,則您只有資料箱中資料的讀取權限。 只有在您想要複製目錄和檔案上的所有 ACL 和資料時使用 /copyall
。
使用 Robocopy 列出、複製、修改資料箱上的檔案
以下是使用 robocopy
複製資料時會使用的一些常見案例。
只將資料複製到資料箱,而非目錄和檔案上的 ACL
僅使用
/dcopy:DAT
選項複製資料、屬性、時間戳記。 不會複製目錄和檔案上的 ACL。將目錄和檔案上的資料和 ACL 複製到資料箱
使用
/copyall
複製所有來源資料,包括目錄和檔案上的所有 ACL。使用 Robocopy 列出資料箱上的檔案系統
使用此命令來列出目錄內容:
robocopy <source-dir> NULL /l /s /xx /njh /njs /fp /B
請注意,檔案總管不允許列出這些檔案。
複製或刪除資料箱上的資料夾和檔案
使用此命令複製單一檔案:
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)