- Updated Golang to 1.22.4 to address security vulnerabilities
- Golang 1.22.3 -> 1.22.4
- azidentity 1.5.1 -> 1.6.0
- Fixed a regression in
list
where--output-type=text
would not output any information - Adjusted parsing of
AZCOPY_OAUTH_TOKEN_INFO
to support both enum names as a string and integers (for users that took dependency upon the accidental changes in 10.25)
- Updated Golang version to 1.22.3 to address security vulnerabilities
- Workload Identity authentication is now available (#2619)
azcopy list
now supports a--location
flag, to support ambiguous URIs (#2595)azcopy list
now properly supports--output-type=json
for users in automated scenarios. (#2629)
- Fixed a bug where AzCopy was not reporting performance info in
-output-type=json
(#2636) - Fixed a bug AzCopy would crash when operating on extremely large (16.5+TB) managed disks (#2635)
- Fixed a bug with hash-based sync where the directory structure would not be replicated when using
--local-hash-storage-mode=HiddenFiles
with--hash-meta-dir
(#2611) - Fixed a bug where attempting to use a non-S3/GCP/Azure storage URI would result in treating the URI as a local path (#2652)
- Updated inaccurate helptext and filled in missing helptext (#2649)
- Many important errors now include a link to relevant documentation to assist users in troubleshooting AzCopy (#2647)
- Ambiguous flags (such as
--cpk-by-value
) have improved clarity in documentation (#2615) - A clearer error message is provided when failing a transfer due to authorization. (#2644)
- A special error has been created when performing an Azure Files to Azure Blob Storage transfer, indicating present lack of service-side support (#2616)
- Updated version of GoLang used to 1.21 to address security vulnerabilities.
- Print summary logs at lower log levels and add BytesTransferred to the output in the
jobs show
command. (#1319) - Added a flag
--put-blob-size-mb
tocopy
,sync
andbench
commands to specify the maximum size of a blob to be uploaded using PutBlob. (#2561) - Added support for latest put blob service limits. Block blob put blob size can now be set up to 5000MB. (#2569)
- Updated all SDK dependencies to their latest version. (#2599)
- Updated summary logs to use consistent wording across all commands. (#2602)
- Fixed an issue where AzCopy would fail to auto login with the AZCOPY_AUTO_LOGIN_TYPE environment variable set to PSCRED on certain Linux and MacOS environments. (#2491)(#2555)
- Fixed a bug where page blob download optimizer would behave incorrectly on highly fragemented blobs if the service times out. (#2445)
- Ignore 404 errors on retried deletes. (#2554)
- Fixed a bug where the
VersionID
property would not be honored on thelist
command. (#2007) - Fixed a bug where ADLS Gen2 paths with encoded special characters would fail to transfer. (#2549)
- Fixed an issue where ACL copying would fail when specifying an ADLS Gen2 account with the blob endpoint. (#2546)
- Fixed an issue where the snapshot ID would not be preserved when testing which authentication type to use for managed disks. (#2547)
- Fixed an issue where
copy
would panic if a root directory is specified as the destination. (#2036)
- Removed the azcopy login/logout deprecation notice. (#2589)
- Added a warning for customers using Shared Key for Azure Datalake transfers to indicate that Shared Key authentication will be deprecated and removed in a future release. (#2569)
- Updated the list help text to clearly indicate the services and authentication types supported.(#2563)
- Updated dependencies to address security vulnerabilities.
- Added support to ignore the error and output a summary if a cancelled job has already completed through the use of the --ignore-error-if-completed flag. (#2519)
- Added support for high throughput append blob. Append blob block size can now be set to up to 100 MB. (#2480)
- Added support to exclude containers when transferring from account to account through the use of the --exclude-container flag. (#2504)
- Fixed an issue where specifying AZCOPY_AUTO_LOGIN_TYPE in any form other than uppercase would be incorrectly parsed. (#2499)
- Fixed an issue where a failure to rename a file from the temporary prefix to the file name would not be considered to be a failed transfer. (#2481)
- Fixed an issue where closing the log would panic for benchmark jobs. (#2537)
- Fixed an issue where --preserve-posix-properties would not work on download. (#2497)
- Fixed an issue where --decompress would not be honored in Linux. (#2392)
- Fixed an issue where log files would miss the .log extension. (#2529)
- Fixed an issue where AzCopy would fail to set metadata properties on a read only directory when using the --force-if-read-only flag. (#2515)
- Fixed an issue where the AzCopy log location on resumed jobs would be reported incorrectly. (#2466)
- Fixed an issue with preserving SMB properties in Linux. (#2530)
- Fixed an issue where long-running service to service copies using OAuth at the source would result in the token expiring too early. (#2513)
- Fixed an issue where AzCopy would try to create folders that already existed, resulting in many unnecessary requests. (#2511)
- Updated --include-directory-stub inline help to match public documentation. (#2488)
- Fixed an issue where AzCopy operations pointed at a snapshot or version object would operation on the base object instead.
- Fixed an issue where AzCopy would download only the base blob when the --list-of-versions flag was used.
- Fixed a regression with Azurite support. (#2485)
- Fixed an issue where AZCOPY_OAUTH_TOKEN_INFO would be refreshed too often. (#2503)
- Fixed an issue where commands would lag for multiple seconds. (#2482)
- Fixed an issue where azcopy version would crash. (#2483)
- Updated documentation to include AZCLI and PSCRED auto login types. (#2494)
- Updated dependencies to address security vulnerabilities.
- Migrated to the latest azdatalake SDK.
- Added support for OAuth when performing File -> File and Blob -> File copy/sync and File make/list/remove (#2302).
- Added support to set tier on premium block blob accounts. (#2337)
- Added support to cache latest AzCopy version and check the remote version every 24 hours instead of every run. (#2426)
- Updated all SDK dependencies to their latest version and the default service version to
2023-08-03
for all services. (#2402) - Added support to rotate AzCopy logs. (#2213)
- Added support to authenticate with Powershell and Azure CLI credentials. (#2433)
- Fixed an issue where http headers and access tier would sometimes be sent as empty headers.
- Fixed an issue where AzCopy would panic when passing an un-parseable URL. (#2404)
- Fixed an issue where Object ID would be set as Resource ID when using MSI. (#2395)
- Fixed an issue where the percent complete stat could round incorrectly. (#1078)
- Fixed an issue where
no transfers were scheduled
would be logged as an error, it is now logged as a warning. (#874) - Fixed an issue where non canonicalized headers would not be printed in the log. (#2454)
- Fixed an issue where cold tier would not be recognized as an allowed tier. (#2447)
- Fixed an issue where s2s append blob copies would fail with
AppendPositionConditionNotMet
error on retry after first experiencing a service timeout error. (#2430) - Fixed an issue where AZCOPY_OAUTH_TOKEN_INFO would not be refreshed. (#2434)
- Updated
--preserve-permissions
documentation to indicate the correct roles necessary to perform the operation. (#2440) - Updated help message for
sync
andcopy
to include all ADLS Gen2 supported auth methods. (#2440)
- Updated dependencies to address security vulnerabilities.
- Migrated to the latest azdatalake SDK.
- Fixed an issue where http headers and access tier would sometimes be sent as empty headers.
- Fixed an issue where AzCopy would panic when passing an un-parseable URL. (#2404)
- Updated dependencies to address security vulnerabilities.
- Updated dependencies to address security vulnerabilities.
- Fixed an issue where validating destination length would fail a job instead of logging the error if read permissions are not provided.
- Migrated to the latest azblob SDK.
- Migrated to the latest azfile SDK.
- Migrated from deprecated ADAL to MSAL through the latest azidentity SDK.
- Added support for sync with Azure Data Lake Storage Gen2. (#2376)
- Fixed an issue where ACL data would not copy when specifying
*.dfs.core.windows.net
endpoints (#2347). - Fixed an issue where Sync would incorrectly log that all files, even those that didn't get overwritten, would be overwritten. (#2372)
- Updated
--dry-run
documentation to indicate the effects of--overwrite
are ignored. (#2325)
- Due to the migration from ADAL to MSAL, tenant ID must now be set when authorizing with single tenant applications created after 10/15/2018.
- Migrated to the latest azblob SDK.
- Migrated to the latest azfile SDK.
- Migrated from deprecated ADAL to MSAL through the latest azidentity SDK.
- Deprecated support for object IDs in MSI. Client ID or Resource ID can be used as an alternative.
- Due to the migration from ADAL to MSAL, tenant ID must now be set when authorizing with single tenant applications created after 10/15/2018.
- Fixed an issue where LMT data is not returned on
list
command for Azure Files.
- Mac M1/ARM64 Support
- Force small blobs to use PutBlob for any source.
- Support to delete CPK encrypted blobs.
- Support to follow symlinks when
--preserve-smb-permissions
is enabled. - Support to return LMT data on
list
command for Azure Files.
- Fixed an issue where source trailing dot header was passed when source for a S2S copy is not file service
- Gracefully handle File Share trailing dot paths to Windows/Blob (that do not support trailing dot) by skipping such files
- Allow trailing dot option to be ignored instead of erroring out in situations it does not apply.
- Issue #2186 where AzCopy would panic when using
--include-before
and--include-after
flags on remove file share resources. - Issue #2183 where AzCopy would panic when providing Azure Files URLs with no SAS token.
- Fixed a bug where AzCopy would automatically assume a HNS path to be a file if the path did not have a slash terminator.
- Fixed an issue where
--skip-version-check
would not be honored forlogin
,logout
,help
commands. #2299
- Add a log for LMTs when a mismatch is encountered.
- Added documentation indicating the
login
andlogout
commands will be deprecated in the future.
- Updated dependencies to address security vulnerabilities.
Mac M1/ARM64 Support
- Support for new Cold Tier feature for Azure Blobs (--block-blob-tier=Cold)
- Support preserving a trailing dot ('.') in names of files and directories in Azure Files (default is
--trailing-dot=Enable
) - Alternate modes to preserve hash for hash-based sync (#2214) (default is OS-dependent, either
--local-hash-storage-mode=XAttr
on MacOS/Linux or--local-hash-storage-mode=AlternateDataStreams
on Windows)- OS-specific hashing modes are expected to be available on all filesystems the source would traverse. (
user_xattr
enabled on filesystems on Unix systems,FILE_NAMED_STREAMS
flag expected on Windows volumes) - HiddenFiles provides an OS-agnostic method to store hash data; to prevent "dirtying" the source, also specify
--hash-meta-dir
directing AzCopy to store & read hidden hash metadata files elsewhere.
- OS-specific hashing modes are expected to be available on all filesystems the source would traverse. (
- Support 'force-if-readonly' flag for Sync. (
false
by default) - Preserve posix properties while uploading or downloading from HNS enabled accounts (
--preserve-posix-properties
,false
by default.)
- Fix situation where large-files would hang infinitely with low value for 'cap-mbps'
- Issue #2074 where AzCopy would hang after cancelling
- Issue #1888 where directories with empty name are incorrectly handled.
- Cancel HNS delete jobs #2117
- Fix issue where large chunks could not be scheduled #2228
- Fixed segfault on MacOS #1790
- Fixed panic on attempt to create AzCopy dir #2191
- Fixed a data race when utilizing hash-based sync. (Issue 2146)
- Fixed the destination naming behavior for container-to-container transfers while using --preserve-permissions (Issue 2141)
- Temporarily disabled hostname lookup before enumeration (Issue 2144)
- Modified
--from-to
flag to be more clear (Issue 2153)
- Added support for
Content-MD5
inlist
command. User can now list the MD5 hash of the blobs in the target container. - Added support to resume incomplete blobs. User can now resume the upload of a blob which was interrupted in the middle.
- Added support for download of POSIX properties.
- Added support for persisting symlink data.
- Fixed Issue 2120
- Fixed Issue 2062
- Fixed Issue 2046
- Fixed Issue 1762
- Added example for
--include-pattern
. - Added documentation for
--compare-hash
.
- CPK-related headers are now sanitized from the logs.
- Updated dependencies to address security vulnerabilities.
- Added support for hash-based sync. AzCopy sync can now take two new flags
--compare-hash
and--missing-hash-policy=Generate
, which which user will be able to transfer only those files which differ in their MD5 hash.
- Fixed issue 1994: Error in calculation of block size
- Fixed issue 1957: Repeated Authentication token refresh
- Fixed issue 1870: Fixed issue where CPK would not be injected on retries
- Fixed issue 1946: Fixed Metadata parsing 5: Fixed issue 1931
- Fixed an issue where sync would always re-download files as we were comparing against the service LMT, not the SMB LMT
- Fixed a crash when copying objects service to service using a user delegation SAS token
- Fixed a crash when deleting folders that may have a raw path string
all
was historically an available status option forjobs show
but is now documented.
- Fixed a hard crash when persisting ACLs from remote filesystems on Windows.
- Fixed a hard crash when deleting folders containing a
%
in the name from Azure Files. - Fixed a bug which made Managed Disks data access authentication mode unusable with auto login.
- Added time-based flag for remove to include files modified before/after certain date/time.
- Added --output-level flag which allows users to set output verbosity.
- Added --preserve-posix-properties flag that allows user to persist the results of statx(2)/stat(2) syscall on upload.
- Implemented setprops command that allows users to set specific properties of Blobs, BlobFS, and Files.
- Implemented multi-auth for managed disks (SAS+OAuth) when the managed disk export account requests it.
- Fixed issue 1506: Added input watcher to resolve issue since job could not be resumed.
- Fixed issue 1794: Moved log-level to root.go so log-level arguments do not get ignored.
- Fixed issue 1824: Avoid creating .azcopy under HOME if plan/log location is specified elsewhere.
- Fixed issue 1830, issue 1412, and issue 873: Improved error message for when AzCopy cannot determine if source is directory.
- Fixed issue 1777: Fixed job list to handle respective output-type correctly.
- Fixed win64 alignment issue.
- Added support for OAuth forwarding when performing Blob -> Blob copy.
- Allow users to dynamically change the bandwidth cap via messages through the STDIN.
- GCS -> Blob is now GA.
- Enable MinIO(S3) logs in DEBUG mode.
- Upgraded Go version to 1.17.9.
- Resolved alignment of atomicSuccessfulBytesInActiveFiles.
- Fixed issue where last-write-time was still getting persisted even when --preserve-smb-info is false.
- Fixed issue where concurrency was always AUTO for Azure Files despite explicit override.
- Removed outdated load command following the deprecation of the cflsload package.
- Fixed issue #1625 where a panic occurs during sync scanning.
- Fixed remove issue when account has versioning enabled.
- Feature to permanently delete soft-deleted
snapshots/versions of the blobs has been added (preview).
--permanent-delete=none/snapshots/version/snapshotsandversions
. - Feature to preserve properties and ACLs when copying to Azure file share root directory.
- Pin all APIs to use the default service version
2020-04-08
and let users decide the service version viaAZCOPY_DEFAULT_SERVICE_API_VERSION
environment variable. Previously, few APIs were not respecting theAZCOPY_DEFAULT_SERVICE_API_VERSION
environment variable.
- Fixed issue in which AzCopy failed to copy to classic blob container with
preserve blob access tier
. - Fixed issue 1630 : AzCopy created extra empty directories at destination while performing S2S transfer from one ADLS Gen2 account to another ADLS Gen2 account.
- Changed the way AzCopy was using to obtain and set ACLs to ensure accuracy.
- Clarify error message for
azcopy sync
when source or destination cannot be detected. - Report error when client provided key(CPK) encryption is applied to DFS endpoint.
- Fixed issue 1596 : AzCopy failed to transfer files (with '/.' in their path) from AWS S3 to Azure blob storage.
- Fixed issue 1474 : AzCopy panicked when trying to re-create an already open plan file.
- Improved handling of Auth error against single file.
- Fixed issue 1640 : Recursive copy from GCS bucket to Azure container failed
with
FileIgnored
error when using--exclude-path
. - Fixed issue 1655 : AzCopy panicked when using
--include-before
flag. - Fixed issue 1609 :
blockid
converted to lower case in AzCopy logs. - Fixed issue 1643, issue 1661 : Updated Golang version to
1.16.10
to fix security vulnerabilities in Golang packages.
- Added Arc VM support for authorization via managed identity.
- Widen managed disk scenario to all md- accounts instead of just md-impexp- accounts.
- The concurrency is now set to AUTO for Azure Files by default to avoid throttling.
- Decrease the number of create directory calls for Azure Files to avoid throttling.
- Added the from-to flag for sync.
- Fixed the memory usage issue with generating the list of skipped/failed transfers in JSON output.
- Fixed ADLS Gen2 ACL copying where intermediate folders were missed.
- Fixed the S3 to Blob scenario using the login command.
- Fixed dry-run for dfs endpoints.
- Fixed incorrect percentage-done shown while resuming job.
- Fixed login issues on the ARM platforms.
- Fixed incorrect progress status for the sync command.
- Fixed concurrency map access problem for folder creation tracker.
- Fixed resuming with a public source.
- Fix deleting blobs that are of a different type than the specified copy
- Fix --delete-destination on Windows download
- Fixed the problem of always receiving overwrite prompt on azure files folders.
- Fixed the problem of always receiving overwrite prompt on azure files folders.
- Added support for include and exclude regex flags, which allow pattern matching on the entire paths.
- Added dry run mode for copy, remove, and sync. This feature allows the user to visualize the changes before committing them.
- For SMB aware locations, preserve-smb-info flag is now true by default.
- Improved how folder lmts are obtained to allow time-based filters for folders.
- Added support for ACL copying between HNS enabled accounts. The preserve-smb-permissions flag is now deprecated and has been renamed to preserve-permissions.
- Allow from-to to be set for the remove command.
- Fixed the problem where resume command did not honor AZCOPY_DEFAULT_SERVICE_API_VERSION.
- Fixed the new version check.
- Fixed sync issue on Windows where paths are case-insensitive.
- Added prompt for invalid characters when importing from S3.
- Fixed bug where public S3 buckets cannot be listed.
- Sanitize SAS tokens in JSON output for skipped and failed transfers.
- Improved folder property preservation across resumes.
- Improved performance for copying small blobs (with size less than
256MiB
) with Put Blob from URL. - Added mirror mode support in sync operation via
mirror-mode
flag. The new mode disables last-modified-time based comparisons and overwrites the conflicting files and blobs at the destination if this flag is set to true. - Added flag
disable-auto-decoding
to avoid automatic decoding of URL-encoded illegal characters when uploading from Windows. These illegal characters could have encoded as a result of downloading them onto Windows which does not support them. - Support custom mime type mapping via environment variable
AZCOPY_CONTENT_TYPE_MAP
. - Output message on the CLI when AzCopy detects a proxy for each domain.
- Interpret DFS endpoints as Blob endpoint automatically when performing service-to-service copy.
- Tolerate enumeration errors for Azure Files and not fail the entire job when a directory is deleted/modified during scanning.
- Log skipped transfers to the scanning log.
- Fixed pipe upload by adding missing fields such as Metadata, Blob Index Tags, Client Provided Key, Blob Access Tier, etc.
- Fixed issue of clean up for the benchmark command.
- Support sync for Local/Blob <-> Azure File.
- Download to temporary file path (.azDownload-[jobID]-[name]) before renaming to the original path.
- Support CPK by name and CPK by value.
- Offer knob to disable application logging (Syslog/Windows Event Log).
- Trust zonal DNS suffix for OAuth by default.
- Added include-directory-stub flag for the copy command, to allow copying of blobs with metadata of
hdi_isfolder:true
. - Display more fields for the list command, please refer to the help message for example.
- Provide environment variable to set request try timeout, to allow faster retries.
- Improve job progress updating mechanism to improve scalability for larger jobs.
- Time limit the container creation step, to avoid hanging and improve UX.
- Set SMB info/permission again after file upload and copy, to fully preserve the integrity of the permission string and last-write-time.
- Fixed module import problem for V10.
- Added preview support for importing from GCP Storage to Azure Block Blobs.
- Added scanning logs which have low output by default but can become verbose if desired to help in debugging.
- Support preservation of tags when copying blobs.
- Added last modified time info to the list command.
- Removed unexpected conflict prompt for file share folders with special characters in the name, such as ";".
- Added option to disable parallel blob listing
- Added support for uploading large files up to 4TiB. Please refer the public documentation for more information
- Added support for
include-before
flag. Refer this for more information
- Fixed issue #1246 of security vulnerability in x/text package
- Fixed issue share snapshot->share copy with smb permissions
- Added support for auto-login when performing data commands(copy/sync/list/make/remove). Please refer to our documentation for more info.
- Added
blob-tags
flag for setting blob index tags when performing copy command. Please note that we support setting blob tags only when tags are explicitly specified. Refer to the public documentations to know more.
- Fixed issue #1139 to preserve content-type in service-to-service transfer.
- Fixed issue to allow snapshot restoring.
- Fixed issue with setting content-type of an empty file when performing copy command.
- Added support for setting tier directly at the time of upload API call instead of performing a separate set tier API call.
- Fix issue #971 with scanning directories on a public container
- Fix issue with piping where source and destinations were reversed
- Allow piping to use OAuth login
- Fix issue where transfers with
overwrite
flag set toIfSourceNewer
would work incorrectly - Fix issue #1139, incorrect content type in BlobStorage
- Issue #1192, intermittent panic when AzCopy job is abort
- Fix issue with auto-detected content types for 0 length files
azcopy sync
now supports the persistence of ACLs between supported resources (Azure Files) using the--preserve-smb-permissions
flag.azcopy sync
now supports the persistence of SMB property info between supported resources (Azure Files) using the--preserve-smb-info
flag. The information that can be preserved is Created Time, Last Write Time and Attributes (e.g. Read Only).- Added support for higher block & blob size
- For service version
2019-12-12
or higher, the block size can now be less than or equal to4000 MiB
. The maximum size of a block blob therefore can be190.7 TiB (4000 MiB X 50,000 blocks)
- For service version
- Added support for Blob Versioning
- Added
list-of-versions
flag (specifies a file where each version id is listed on a separate line) to download/delete versions of a blob from Azure Storage. - Download/Delete a version of blob by directly specifying its version id in the source blob URL.
- Added
- Logging input command at ERROR level.
- Allow more accurate values for job status in
jobs
commands, e.g. completed with failed or skipped transfers.
- Fixed issue with removing blobs with hdi_isfolder=true metadata when the list-of-files flag is used.
- Manually unfurl symbolic links to fix long file path issue on UNC locations.
- Improved scanning performance for most cases by adding support for parallel local and Blob enumeration.
- Added download support for the benchmark command.
- A new way to quickly copy only files changed after a certain date/time. The
copy
command now accepts the parameter--include-after
. It takes an ISO 8601-formatted date, and will copy only those files that were changed on or after the given date/time. When processing large numbers of files, this is faster thansync
or--overwrite=IfSourceNewer
. But it does require the user to specify the date to be used. E.g.2020-08-19T15:04:00Z
for a UTC time,2020-08-19T15:04
for a time in the local timezone of the machine running Azcopy, or2020-08-19
for midnight (00:00), also in the local timezone. - When detecting content type for common static website files, use the commonly correct values instead of looking them up in the registry.
- Allow the remove command to delete blob directory stubs which have metadata hdi_isfolder=true.
- The S3 to Blob feature now has GA support.
- Added support for load command on Linux based on Microsoft Avere's CLFSLoad extension.
- Each job now logs its start time precisely in the log file, using ISO 8601 format. This is useful if you want to
use that start date as the
--include-after
parameter to a later job on the same directory. Look for "ISO 8601 START TIME" in the log. - Stop treating zero-item job as failure, to improve the user experience.
- Improved the naming of files being generated in benchmark command, by reversing the digits. Doing so allows the names to not be an alphabetic series, which used to negatively impact the performance on the service side.
- Azcopy can now detect when setting a blob tier would be impossible. If azcopy cannot check the destination account type, a new transfer failure status will be set:
TierAvailabilityCheckFailure
- Fixed the persistence of last-write-time (as part of SMB info when uploading) for Azure Files. It was using the creation time erroneously.
- Fixed the SAS timestamp parsing issue.
- Transfers to the File Service with a read-only SAS were failing because we try listing properties for the parent directories. The user experience is improved by ignoring this benign error and try creating parent directories directly.
- Fixed issue with mixed SAS and AD authentication in the sync command.
- Fixed file creation error on Linux when decompression is turned on.
- Fixed issue on Windows for files with extended charset such as [%00 - %19, %0A-%0F, %1A-%1F].
- Enabled recovering from unexpectedEOF error.
- Fixed issue in which attribute filters does not work if source path contains an asterisk in it.
- Fixed issue of unexpected upload destination when uploading a whole drive in Windows (e.g. "D:").
- Fixed bug where AzCopy errored if a filename ended with slash character. (E.g. backslash at end of a Linux filename.)
- Fixed bug in overwrite prompt for folders.
- Added overwrite prompt support for folder property transfers.
- Perform proxy lookup when the source is S3.
- When downloading from Azure Files to Windows with the
--preserve-smb-permissions
flag, sometimes the resulting permissions were not correct. This was fixed by limiting the concurrent SetNamedSecurityInfo operations. - Added check to avoid overwriting the file itself when performing copy operations.
azcopy copy
now supports the persistence of ACLs between supported resources (Windows and Azure Files) using the--persist-smb-permissions
flag.azcopy copy
now supports the persistence of SMB property info between supported resources (Windows and Azure Files) using the--persist-smb-info
flag. The information that can be preserved is Created Time, Last Write Time and Attributes (e.g. Read Only).- AzCopy can now transfer empty folders, and also transfer the properties of folders. This applies when both the source and destination support real folders (Blob Storage does not, because it only supports virtual folders).
- On Windows, AzCopy can now activate the special privileges
SeBackupPrivilege
andSeRestorePrivilege
. Most admin-level accounts have these privileges in a deactivated state, as do all members of the "Backup Operators" security group.
If you run AzCopy as one of those users and supply the new flag--backup
, AzCopy will activate the privileges. (Use an elevated command prompt, if running as Admin). At upload time, this allows AzCopy to read files which you wouldn't otherwise have permission to see. At download time, it works with the--preserve-smb-permissions
flag to allow preservation of permissions where the Owner is not the user running AzCopy. The--backup
flag will report a failure if the privileges cannot be activated. - Status output from AzCopy
copy
,sync
,jobs list
, andjobs status
now contains information about folders. This includes new properties in the JSON output of copy, sync, list and jobs status commands, when--output-type json
is used. - Empty folders are deleted when using
azcopy rm
on Azure Files. - Snapshots of Azure File Shares are supported, for read-only access, in
copy
,sync
andlist
. To use, add asharesnapshot
parameter at end of URL for your Azure Files source. Remember to separate it from the existing query string parameters (i.e. the SAS token) with a&
. E.g.https://<youraccount>.file.core.windows.net/sharename?st=2020-03-03T20%3A53%3A48Z&se=2020-03-04T20%3A53%3A48Z&sp=rl&sv=2018-03-28&sr=s&sig=REDACTED&sharesnapshot=2020-03-03T20%3A24%3A13.0000000Z
- Benchmark mode is now supported for Azure Files and ADLS Gen 2 (in addition to the existing benchmark support for Blob Storage).
- A special performance optimization is introduced, but only for NON-recursive cases in this release. An
--include-pattern
that contains only*
wildcards will be performance optimized when querying blob storage without the recursive flag. The section before the first*
will be used as a server-side prefix, to filter the search results more efficiently. E.g.--include-pattern abc*
will be implemented as a prefix search for "abc". In a more complex example,--include-pattern abc*123
, will be implemented as a prefix search forabc
, followed by normal filtering for all matches ofabc*123
. To non-recursively process blobs contained directly in a container or virtual directory include/*
at the end of the URL (before the query string). E.g.http://account.blob.core.windows.net/container/*?<SAS>
. - The
--cap-mbps
parameter now parses floating-point numbers. This will allow you to limit your maximum throughput to a fraction of a megabit per second.
- A more user-friendly error message is returned when an unknown source/destination combination is supplied
- AzCopy has upgraded to service revision
2019-02-02
. Users targeting local emulators, Azure Stack, or other private/special instances of Azure Storage may need to intentionally downgrade their service revision using the environment variableAZCOPY_DEFAULT_SERVICE_API_VERSION
. Prior to this release, the default service revision was2018-03-28
. - For Azure Files to Azure Files transfers, --persist-smb-permissions and --persist-smb-info are available on all OS's. (But for for uploads and downloads, those flags are only available on Windows.)
- AzCopy now includes a list of trusted domain suffixes for Azure Active Directory (AAD) authentication.
After
azcopy login
, the resulting token will only be sent to locations that appear in the list. The list is:*.core.windows.net;*.core.chinacloudapi.cn;*.core.cloudapi.de;*.core.usgovcloudapi.net
. If necessary, you can add to the the list with the command-line flag:--trusted-microsoft-suffixes
. For security, you should only add Microsoft Azure domains. - When transferring over a million files, AzCopy will reduces its progress reporting frequency from every 2 seconds to every 2 minutes.
- To accommodate interfacing with JavaScript programs (and other languages that have similar issue with number precision), all the numbers in the JSON output have been converted to strings (i.e. with quotes around them).
- The TransferStatus value
SkippedFileAlreadyExists
has been renamedSkippedEntityExists
and may now be used both for when files are skipped and for when the setting of folder properties is skipped. This affects the input and output ofazcopy jobs show
and the status values shown in the JSON output format fromcopy
andsync
. - The format and content of authentication information messages, in the JSON output format, e.g. "Using OAuth token for authentication" has been changed.
- AzCopy can now overwrite even Read-Only and Hidden files when downloading to Windows. (The read-only case requires the use of
the new
--force-if-read-only
flag.) - Fixed a nil dereference when a prefetching error occurs in a upload
- Fixed a nil dereference when attempting to close a log file while log-level is none
- AzCopy's scanning of Azure Files sources, for download or Service to Service transfers, is now much faster.
- Sources and destinations that are identified by their IPv4 address can now be used. This enables usage with storage
emulators. Note that the
from-to
flag is typically needed when using such sources or destinations. E.g.--from-to BlobLocal
if downloading from a blob storage emulator to local disk. - Filenames containing the character
:
can now safely be downloaded on Windows and uploaded to Azure Files - Objects with names containing
+
can now safely be used in imported S3 object names - The
check-length
flag is now exposed in benchmark mode, so that length checking can be turned off for more speed, when benchmarking with small file sizes. (When using large file sizes, the overhead of the length check is insignificant.) - The in-app documentation for Service Principal Authentication has been corrected, to now include the application-id parameter.
- ALL filter types are now disallowed when running
azcopy rm
against ADLS Gen2 endpoints. Previously include/exclude patterns were disallowed, but exclude-path was not. That was incorrect. All should have been disallowed because none (other than include-path) are respected. - Fixed empty page range optimization when uploading Managed Disks. In an edge case, there was previously a risk of data corruption if the user uploaded two different images into the same Managed Disk resource one after the other.
- Fixed feature parity issue by adding support for "ifSourceNewer" option on the
overwrite
flag. It serves as a replacement of the '\XO' flag in V8.
- Fixed
jobs clean
command on Windows which was previously crashing when thewith-status
flag was used.
azcopy list
is now supported on Azure Files and ADLS Gen 2, in addition to Blob Storage.- The
--exclude-path
flag is now supported in thesync
command. - Added new environment variable
AZCOPY_USER_AGENT_PREFIX
to allow a prefix to be appended to the user agent strings.
- Content properties (such as Content-Encoding and Cache-Control) are now included when syncing Blob -> Blob and Azure Files -> Azure Files
- Custom metadata is now included when syncing Blob -> Blob and Azure Files -> Azure Files
- The
azcopy list
command no longer repeats parts of its output. (Previously it would sometimes repeat itself and show the same blob multiple times in the output.) - The
--aad-endpoint
parameter is now visible, instead of hidden. It allows use of Azure Active Directory authentication in national clouds (e.g. Azure China). - On Windows, AzCopy now caches information about which proxy server should be used, instead of looking it up every time. This significantly reduces CPU usage when transferring many small files. It also solves a rare bug when transfers got permanently "stuck" with one uncompleted file.
- When uploading to a write-only destination, there is now a clearer error message when the built-in file length check
fails. The message says how to fix the problem using
--check-length=false
. - Size checks on managed disk imports are now clearer, and all run at the start of the import process instead of the end.
- Jobs could not be cancelled while scanning was still in progress.
- Downloading large managed disks (8 TB and above) failed with errors.
- Downloading large page blobs might make no progress for the first 15 or 20 minutes.
- There was a rare error where the final output could under-report the total number of files in the job. That error has been fixed.
- When using JSON output mode, the output from the rm command on ADLS Gen2 was inconsistent with the output from other commands
- After authentication errors, files in progress were not cleaned up (deleted) at the destination. If there was an authentication failure during a job (e.g. a SAS token expired while in use) this could result in files being left behind that had incomplete contents (even though their size looked correct).
- The AUTO concurrency option, for automatically tuning concurrency as AzCopy runs, started working too late if scanning (aka enumeration) took a long time. This resulted in reduced throughput when using this setting.
- It was not possible to access the root of Windows drives with lowercase drive letters. E.g. d:\
- Service to Service transfers would fail when using environment variable to specify OAuth authentication.
- Certain errors parsing URLs were not reported clearly.
- When downloading to NUL (/dev/null on Linux), files of zero length no longer trigger errors. (Downloads to NUL can be used in performance testing and bulk MD5 checking.
- Added helpful deprecation notice for legacy include/exclude flags.
- Added back request ID at log level INFO.
- Added back cancel-from-stdin option for partner integration.
- Added flag to define delete snapshot options for the remove command.
- Fixed race condition in shutdown of decompressingWriter.
- Made progress reporting more accurate.
- The
*
character is no longer supported as a wildcard in URLs, except for the two exceptions noted below. It remains supported in local file paths.- The first exception is that
/*
is still allowed at the very end of the "path" section of a URL. This is illustrated by the difference between these two source URLs:https://account/container/virtual?SAS
andhttps://account/container/virtualDir/*?SAS
. The former copies the virtual directoryvirtualDir
by creating a folder of that name at the destination. The latter copies the contents ofvirtual
dir directly into the target without creating a folder named "virtualDir".' - The second exception is when you are transferring multiple whole containers (or S3 buckets). You can use * as a wildcard in the container or bucket name.
- The first exception is that
- The
--include
and--exclude
parameters have been replaced by--include-pattern
and--exclude-pattern
(for filenames) and--include-path
and--exclude-path
(for paths, including directory and filenames). The new parameters have behaviour that is better defined in complex situations (such as recursion). The*
wildcard is supported in the pattern parameters, but not in the path ones. - There have been two breaking changes to the JSON output that is produced if you request
JSON-formatted output. The
sync
command's output in JSON has changed for consistency reasons, and the final message type, forcopy
andsync
has changed its name fromExit
toEndOfJob
. Tools using the JSON output format to integrate AzCopy should be aware. - If downloading to "null" on Windows the target must now be named "NUL", according to standard Windows conventions. "/dev/null" remains correct on Linux. (This feature can be used to test throughput or check MD5s without saving the downloaded data.)
- The file format of the (still undocumented)
--list-of-files
parameter is changed. (It remains undocmented because, for simplicity, users are encouraged to use the new--include-pattern
and--include-path
parameters instead.)
sync
is supported from Blob Storage to Blob Storage, and from Azure Files to Azure Files.copy
is supported from Azure Files to Azure Files, and from Blob Storage to Azure Files.- Percent complete is displayed as each job runs.
- VHD files are auto-detected as page blobs.
- A new benchmark mode allows quick and easy performance benchmarking of your network connection to
Blob Storage. Run AzCopy with the parameters
bench --help
for details. This feature is in Preview status. - The location for AzCopy's "plan" files can be specified with the environment variable
AZCOPY_JOB_PLAN_LOCATION
. (If you move the plan files and also move the log files using the existingAZCOPY_LOG_LOCATION
, then AzCopy will not store anything under your home directory on Linux and MacOS. On Windows AzCopy will keep just one small encrypted file underc:\users\<username>\.azcopy
) - Log files and plan files can be cleaned up to save disk space, using AzCopy's new
jobs rm
andjobs clean
commands. - When listing jobs with
jobs show
, the status of each job is included in the output. - The
--overwrite
parameter now supports the value of "prompt" to prompt the user on a file-by-file basis. (The old values of true and false are also supported.) - The environment variable
AZCOPY_CONCURRENCY_VALUE
can now be set to "AUTO". This is expected to be useful for customers with small networks, or those running AzCopy on moderately-powered machines and transfer blobs between accounts. This feature is in preview status. - When uploading from Windows, files can be filtered by Windows-specific file attributes (such as "Archive", "Hidden" etc)
- Memory usage can be controlled by setting the new environment variable
AZCOPY_BUFFER_GB
. Decimal values are supported. Actual usage will be the value specified, plus some overhead. - An extra integrity check has been added: the length of the completed destination file is checked against that of the source.
- When downloading, AzCopy can automatically decompress blobs (or Azure Files) that have a
Content-Encoding
ofgzip
ordeflate
. To enable this behaviour, supply the--decompress
parameter. - The number of disk files accessed concurrently can be controlled with the new
AZCOPY_CONCURRENT_FILES
environment variable. This is an advanced setting, which generally should not be modified. It does not affect the number of HTTP connections, which is still controlled byAZCOPY_CONCURRENCY_VALUE
. - The values of key environment variables are listed at the start of the log file.
- An official Windows 32-bit build is now released, in addition to the usual 64-bit builds for Linux, Mac and Windows.
- If you need to refer a literal
*
in the name of a blob or Azure Files file, e.g. for a blob named "*", escape the*
using standard URL escaping. To do this, replace the*
with the following character sequence: %2A
- When an AzCopy job is cancelled with CTRL-C, any partially-updated files are now deleted from the destination. Previous releases of AzCopy v10 would just immediately exit, leaving destination files potentially containing an unknown mix of old and new data. E.g. if uploading a new version of a file over top of an old version, cancellation could result in the file being left with some parts containing old data, and some containing new data. This issue affected downloads to local disk and uploads to Azure Files, ADLS Gen 2, page blobs and append blobs. The bug did not affect transfers to block blobs.
- If a transfer to a brand-new block blob is cancelled before it completes, the uncommitted blocks are now cleaned up immediately. Previous versions would leave them, for automatic garbage collection to delete 7 days later.
- Long pathnames (over 260 characters) are now supported everywhere on Windows, including on UNC shares.
- Safety is improved in the rare cases where two source files correspond to just one destination file. This can happen
when transferring to a case-insensitive destination, when the new
--decompress
flag removes an extension but there's already a file without the extension, and in very rare cases related to escaping of filenames with illegal characters. The bug fix ensures that the single resulting file contains data from only one of the source files. - When supplying a
--content-type
on the command line it's no longer necessary to also specify--no-guess-mime-type
. - There is now no hard-coded limit on the number of files that can be processed by the
sync
command. The number that can be processed (without paging of memory to disk) depends only on the amount of RAM available. - Transfer of sparse page blobs has been improved, so that for many sparse page blobs only the populated pages will transferred. The one exception is blobs which have had a very high number of updates, but which still have significant sparse sections. Those blobs may not be transferred optimally in this release. Handling of such blobs will be improved in a future release.
- Accessing root of drive (e.g.
d:\
) no longer causes an error. - On slow networks, there are no longer excessive log messages sent to the Event Log (Windows) and SysLog (Linux).
- If AzCopy can't check whether it's up to date, it will no longer hang. (Previously, it could hang if its version check URL, https://aka.ms/azcopyv10-version-metadata, was unreachable due to network routing restrictions.)
- High concurrency values are supported (e.g. over 1000 connections). While these values are seldom needed, they are occasionally useful - e.g. for service-to-service transfer of files around 1 MB in size.
- Files skipped due to "overwrite=false" are no longer logged as "failed".
- Logging is more concise at the default log level.
- Error message text, returned by Blob and File services, is now included in the log.
- A log file is created for copy jobs even when there was nothing to copy.
- In the log, UPLOAD SUCCESSFUL messages now include the name of the successful file.
- Clear error messages are given to show that AzCopy does not currently support Customer-Provided Encryption Keys.
- On Windows, downloading a filename with characters not supported by the operating system will result in those characters being URL-encoded to construct a Windows-compatible filename. The encoding process is reversed if the file is uploaded.
- Uploading a single file to ADLS Gen 2 works now.
- The
remove
command no longer hangs when removing blobs that have snapshots. Instead it will fail to delete them, and report the failures clearly. - Jobs downloading from ADLS Gen 2 that result in no scheduled transfers will no longer hang.
- Fixed outputting error message for SPN login failures.
- Security: fixed signature redaction in logs to include all error types: the log entries for network failures and HTTP errors could include SAS tokens. In previous releases, the SAS tokens were not always redacted correctly and could be written to the AzCopy log file and also to the Windows Event Log or the Linux Syslog. Now, SAS tokens are correctly redacted when logging those errors. Note that errors returned by the Storage service itself - such as authentication errors and bad container names – were already redacted correctly.
- Added error to using Azure Files without a SAS token (invalid auth configuration).
- AzCopy v10 now outputs a sensible error & warning when attempting to authenticate a storage account business-to-business.
--log-level=none
now drops no logs, and has a listing in--help
.- Fixed bug where piping was not picking up the service version override, making it not work well against Azure Stack.
- Fixed a timeout when uploading particularly large files to ADLSG2.
- Fixed single wildcard match uploads.
- Enabled copying from page/block/append blob to another blob of a different type.
- AzCopy now grabs proxy details (sans authentication) from the Windows Registry using
mattn/go-ieproxy
. - Service Principal Authentication is now available under
azcopy login
-- checkazcopy env
for details on client secrets/cert passwords. - SAS tokens are supported on HNS (Hierarchical Namespace/Azure Data Lake Generation 2) Storage Accounts.
- Added support for custom headers on ADLS Gen 2.
- Added support for fractional block size for copy and sync.
- Use different log output for skipped files (so they don't look like failures).
- Added bandwidth cap (--cap-mbps) to limit AzCopy's network usage, check
azcopy cp -h
for details. - Added ADLS Gen2 support for rm command.
- Jobs created with earlier releases cannot be resumed with this release. We recommend you update to this release only when you have no partially-completed jobs that you want to resume.
-
Files with
Content-Encoding: gzip
are now downloaded in compressed form. Previous versions tried to save a decompressed version of the file. But they incorrectly truncated it at the original compressed length, so the downloaded file was not complete.By changing AzCopy to save the compressed version, that problem is solved, and Content-MD5 checks now work for such files. (It is assumed that the Content-MD5 hash is the hash of the compressed file.)
- Headers for Content-Disposition, Content-Language and Cache-Control can now be set when uploading
files to Blob Storage and to Azure Files. Run
azcopy copy --help
to see command line parameter information, including those needed to set the new headers. - On-screen job summary is output to the log file at end of job, so that the log will include those summary statistics.
- Fixed typo in local traverser (error handling in walk).
- Fixed memory alignment issue for atomic functions on 32 bit system.
- The
--block-size
parameter has been replaced by--block-size-mb
. The old parameter took a number of bytes; the new one takes a number of Megabytes (MiB). - The following command line parameters have been renamed, for clarity
--output
is now--output-type
--md5-validation
is now called--check-md5
--s2s-source-change-validation
is now called--s2s-detect-source-changed
--s2s-invalid-metadata-handle
is is now called--s2s-handle-invalid-metadata
--quota
(in themake
command) is now called--quota-gb
. Note that the values were always in GB, the new name simply clarifies that fact
- AzCopy is now able to be configured to use older API versions. This enables (limited) support for Azure Stack.
- Listing command now shows file sizes.
- AzCopy v10 now works correctly with ADLS Gen 2 folders that contain spaces in their names.
- When cancelling with CRTL-C, status of in-progress transfers is now correctly recorded.
- For security, the Service-to-Service (S2S) feature will only work if both the source and destination connections are HTTPS.
- Use of the
--overwrite
parameter is clarified in the in-application help. - Fixed incorrect behavior with setting file descriptor limits on platforms including OS X and BSD.
- On Linux and OS X, log files are now created with same file permissions as all other files created by AzCopy.
- ThirdPartyNotice.txt is updated.
- Load DLL in a more secure manner compatible with Go's sysdll registration.
- Fixed support for relative paths and shorthands.
- Fixed bug in pattern matching for blob download when recursive is off.
- For creating MD5 hashes when uploading, version 10.x now has the OPPOSITE default to version
AzCopy 8.x. Specifically, as of version 10.0.9, MD5 hashes are NOT created by default. To create
Content-MD5 hashes when uploading, you must now specify
--put-md5
on the command line.
- Can migrate data directly from Amazon Web Services (AWS). In this high-performance data path the data is read directly from AWS by the Azure Storage service. It does not need to pass through the machine running AzCopy. The copy happens synchronously, so you can see its exact progress.
- Can migrate data directly from Azure Files or Azure Blobs (any blob type) to Azure Blobs (any blob type). In this high-performance data path the data is read directly from the source by the Azure Storage service. It does not need to pass through the machine running AzCopy. The copy happens synchronously, so you can see its exact progress.
- Sync command prompts with 4 options about deleting unneeded files from the target: Yes, No, All or
None. (Deletion only happens if the
--delete-destination
flag is specified). - Can download to /dev/null. This throws the data away - but is useful for testing raw network performance unconstrained by disk; and also for validating MD5 hashes in bulk (when run in a cloud VM in the same region as the Storage account)
- Fixed memory leak when downloading large files
- Fixed performance when downloading a single large file
- Fixed bug with "too many open files" on Linux
- Fixed memory leak when uploading sparse files (files with big blocks of zeros) to Page Blobs and Azure Files.
- Fixed issue where application crashed after being throttled by Azure Storage Service. (The primary fix here is for Page Blobs, but a secondary part of the fix also helps with Block Blobs.)
- Fixed functionality and usabilty issues with
remove
command - Improved performance for short-duration jobs (e.g. those lasting less than a minute)
- Prevent unnecessary error message that sometimes appeared when cancelling a job
- Various improvements to the online help and error messages.
- Rewrote sync command to eliminate numerous bugs and improve usability (see wiki for details)
- Implemented various improvements to memory management
- Added MD5 validation support (available options: NoCheck, LogOnly, FailIfDifferent, FailIfDifferentOrMissing)
- Added last modified time checks for source to guarantee transfer integrity
- Formalized outputs in JSON and elevated the output flag to the root level
- Eliminated outputs to STDERR (for new version notifications), which were causing problems for certain CI systems
- Improved log format for Windows
- Optimized plan file sizes
- Improved command line parameter names as follows (to be consistent with naming pattern of other parameters):
- fromTo -> from-to
- blobType -> blob-type
- excludedBlobType -> excluded-blob-type
- outputRaw (in "list" command) -> output
- stdIn-enable (reserved for internal use) -> stdin-enable