Import/Export Service Log File Format
When the Microsoft Azure Import/Export service performs an action on a drive as part of an import job or an export job, logs are written to block blobs in the storage account associated with that job.
There are two logs that may be written by the Import/Export service:
The error log is always generated in the event of an error.
The verbose log is not enabled by default, but may be enabled by setting the EnableVerboseLog property on a Put Job or Update Job Properties operation.
Log File Location
The logs are written to block blobs in the container or virtual directory specified by the ImportExportStatesPath setting, which you can set on a Put Job operation. The location to which the logs are written depends on how authentication is specified for the job, together with the value specified for ImportExportStatesPath. Authentication for the job may be specified via a storage account key, or a container SAS (shared access signature).
The name of the container or virtual directory may either be the default name of waimportexport, or another container or virtual directory name that you specify.
The table below shows the possible options:
Authentication Method |
Value of ImportExportStatesPathElement |
Location of Log Blobs |
---|---|---|
Storage account key |
Default value |
A container named waimportexport, which is the default container. For example: https://myaccount.blob.core.windows.net/waimportexport |
Storage account key |
User-specified value |
A container named by the user. For example: https://myaccount.blob.core.windows.net/mylogcontainer |
Container SAS |
Default value |
A virtual directory named waimportexport, which is the default name, beneath the container specified in the SAS. For example, if the SAS specified for the job is https://myaccount.blob.core.windows.net/mylogcontainer?sv=2012-02-12&se=2015-05-22T06%3A54%3A55Z&sr=c&sp=wl&sig=sigvalue, then the log location would be https://myaccount.blob.core.windows.net/mylogcontainer/waimportexport |
Container SAS |
User-specified value |
A virtual directory named by the user, beneath the container specified in the SAS. For example, if the SAS specified for the job is https://myaccount.blob.core.windows.net/mylogcontainer?sv=2012-02-12&se=2015-05-22T06%3A54%3A55Z&sr=c&sp=wl&sig=sigvalue, and the specified virtual directory is named mylogblobs, then the log location would be https://myaccount.blob.core.windows.net/mylogcontainer/waimportexport/mylogblobs. |
You can retrieve the URl for the error and verbose logs by calling the Get Job operation. The logs are available after processing of the drive is complete.
Log File Format
The format for both logs is the same: a blob containing XML descriptions of the events that occurred while copying blobs between the hard drive and the customer's account.
The verbose log contains complete information about the status of the copy operation for every blob (for an import job) or file (for an export job), whereas the error log contains only the information for blobs or files that encountered errors during the import or export job.
The verbose log format is shown below. The error log has the same structure, but filters out successful operations.
<DriveLog Version="2014-11-01">
<DriveId>drive-id</DriveId>
[<Blob Status="blob-status">
<BlobPath>blob-path</BlobPath>
<FilePath>file-path</FilePath>
[<Snapshot>snapshot</Snapshot>]
<Length>length</Length>
[<LastModified>last-modified</LastModified>]
[<ImportDisposition Status="import-disposition-status">import-disposition</ImportDisposition>]
[page-range-list-or-block-list]
[metadata-status]
[properties-status]
</Blob>]
[<Blob>
. . .
</Blob>]
<Status>drive-status</Status>
</DriveLog>
page-range-list-or-block-list ::=
page-range-list | block-list
page-range-list ::=
<PageRangeList>
[<PageRange Offset="page-range-offset" Length="page-range-length"
[Hash="md5-hash"] Status="page-range-status"/>]
[<PageRange Offset="page-range-offset" Length="page-range-length"
[Hash="md5-hash"] Status="page-range-status"/>]
</PageRangeList>
block-list ::=
<BlockList>
[<Block Offset="block-offset" Length="block-length" [Id="block-id"]
[Hash="md5-hash"] Status="block-status"/>]
[<Block Offset="block-offset" Length="block-length" [Id="block-id"]
[Hash="md5-hash"] Status="block-status"/>]
</BlockList>
metadata-status ::=
<Metadata Status="metadata-status">
[<GlobalPath Hash="md5-hash">global-metadata-file-path</GlobalPath>]
[<Path Hash="md5-hash">metadata-file-path</Path>]
</Metadata>
properties-status ::=
<Properties Status="properties-status">
[<GlobalPath Hash="md5-hash">global-properties-file-path</GlobalPath>]
[<Path Hash="md5-hash">properties-file-path</Path>]
</Properties>
The following table describes the elements of the log file.
XML Element |
Type |
Description |
---|---|---|
DriveLog |
XML Element |
Represents a drive log. |
Version |
Attribute, String |
The version of the log format. |
DriveId |
String |
The drive's hardware serial number. |
Status |
String |
Status of the drive processing. See the Drive Status Codes table below for more information. |
Blob |
Nested XML element |
Represents a blob. |
Blob/BlobPath |
String |
The URI of the blob. |
Blob/FilePath |
String |
The relative path to the file on the drive. |
Blob/Snapshot |
DateTime |
The snapshot version of the blob, for an export job only. |
Blob/Length |
Integer |
The total length of the blob in bytes. |
Blob/LastModified |
DateTime |
The date/time that the blob was last modified, for an export job only. |
Blob/ImportDisposition |
String |
The import disposition of the blob, for an import job only. |
Blob/ImportDisposition/@Status |
Attribute, String |
The status of the import disposition. |
PageRangeList |
Nested XML element |
Represents a list of page ranges for a page blob. |
PageRange |
XML element |
Represents a page range. |
PageRange/@Offset |
Attribute, Integer |
Starting offset of the page range in the blob. |
PageRange/@Length |
Attribute, Integer |
Length in bytes of the page range. |
PageRange/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the page range. |
PageRange/@Status |
Attribute, String |
Status of processing the page range. |
BlockList |
Nested XML element |
Represents a list of blocks for a block blob. |
Block |
XML element |
Represents a block. |
Block/@Offset |
Attribute, Integer |
Starting offset of the block in the blob. |
Block/@Length |
Attribute, Integer |
Length in bytes of the block. |
Block/@Id |
Attribute, String |
The block ID. |
Block/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the block. |
Block/@Status |
Attribute, String |
Status of processing the block. |
Metadata |
Nested XML element |
Represents the blob's metadata. |
Metadata/@Status |
Attribute, String |
Status of processing of the blob metadata. |
Metadata/GlobalPath |
String |
Relative path to the global metadata file. |
Metadata/GlobalPath/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the global metadata file. |
Metadata/Path |
String |
Relative path to the metadata file. |
Metadata/Path/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the metadata file. |
Properties |
Nested XML element |
Represents the blob properties. |
Properties/@Status |
Attribute, String |
Status of processing the blob properties, e.g. file not found, completed. |
Properties/GlobalPath |
String |
Relative path to the global properties file. |
Properties/GlobalPath/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the global properties file. |
Properties/Path |
String |
Relative path to the properties file. |
Properties/Path/@Hash |
Attribute, String |
Base16-encoded MD5 hash of the properties file. |
Blob/Status |
String |
Status of processing the blob. |
Drive Status Codes
The following table lists the status codes for processing a drive.
Status code |
Description |
---|---|
Completed |
The drive has finished processing without any errors. |
CompletedWithWarnings |
The drive has finished processing with warnings in one or more blobs per the import dispositions specified for the blobs. |
CompletedWithErrors |
The drive has finished with errors in one or more blobs or chunks. |
DiskNotFound |
No disk is found on the drive. |
VolumeNotNtfs |
The first data volume on the disk is not in NTFS format. |
DiskOperationFailed |
An unknown failure occurred when performing operations on the drive. |
BitLockerVolumeNotFound |
No BitLocker encryptable volume is found. |
BitLockerNotActivated |
BitLocker is not enabled on the volume. |
BitLockerProtectorNotFound |
The numerical password key protector does not exist on the volume. |
BitLockerKeyInvalid |
The numerical password provided cannot unlock the volume. |
BitLockerUnlockVolumeFailed |
Unknown failure has happened when trying to unlock the volume. |
BitLockerFailed |
An unknown failure occurred while performing BitLocker operations. |
ManifestNameInvalid |
The manifest file name is invalid. |
ManifestNameTooLong |
The manifest file name is too long. |
ManifestNotFound |
The manifest file is not found. |
ManifestAccessDenied |
Access to the manifest file is denied. |
ManifestCorrupted |
The manifest file is corrupted (the content does not match its hash). |
ManifestFormatInvalid |
The manifest content does not conform to the required format. |
ManifestDriveIdMismatch |
The drive ID in the manifest file does not match the one read from the drive. |
ReadManifestFailed |
A disk I/O failure occurred while reading from the manifest. |
BlobListFormatInvalid |
The export blob list blob does not conform to the required format. |
BlobRequestForbidden |
Access to the blobs in the storage account is forbidden. This might be due to invalid storage account key or container SAS. |
InternalError |
And internal error occurred while processing the drive. |
Blob Status Codes
The following table lists the status codes for processing a blob.
Status code |
Description |
---|---|
Completed |
The blob has finished processing without errors. |
CompletedWithErrors |
The blob has finished processing with errors in one or more page ranges or blocks, metadata, or properties. |
FileNameInvalid |
The file name is invalid. |
FileNameTooLong |
The file name is too long. |
FileNotFound |
The file is not found. |
FileAccessDenied |
Access to the file is denied. |
BlobRequestFailed |
The Blob service request to access the blob has failed. |
BlobRequestForbidden |
The Blob service request to access the blob is forbidden. This might be due to invalid storage account key or container SAS. |
RenameFailed |
Failed to rename the blob (for an import job) or the file (for an export job). |
BlobUnexpectedChange |
An unexpected change has occurred with the blob (for an export job). |
LeasePresent |
There is a lease present on the blob. |
IOFailed |
A disk or network I/O failure occurred while processing the blob. |
Failed |
An unknown failure occurred while processing the blob. |
Import Disposition Status Codes
The following table lists the status codes for resolving an import disposition.
Status code |
Description |
---|---|
Created |
The blob has been created. |
Renamed |
The blob has been renamed per rename import disposition. The Blob/BlobPath element contains the URI for the renamed blob. |
Skipped |
The blob has been skipped per no-overwrite import disposition. |
Overwritten |
The blob has overwritten an existing blob per overwrite import disposition. |
Cancelled |
A prior failure has stopped further processing of the import disposition. |
Page Range/Block Status Codes
The following table lists the status codes for processing a page range or a block.
Status code |
Description |
---|---|
Completed |
The page range or block has finished processing without any errors. |
Committed |
The block has been committed, but not in the full block list because other blocks have failed, or put full block list itself has failed. |
Uncommitted |
The block is uploaded but not committed. |
Corrupted |
The page range or block is corrupted (the content does not match its hash). |
FileUnexpectedEnd |
An unexpected end of file has been encountered. |
BlobUnexpectedEnd |
An unexpected end of blob has been encountered. |
BlobRequestFailed |
The Blob service request to access the page range or block has failed. |
IOFailed |
A disk or network I/O failure occurred while processing the page range or block. |
Failed |
An unknown failure occurred while processing the page range or block. |
Cancelled |
A prior failure has stopped further processing of the page range or block. |
Metadata Status Codes
The following table lists the status codes for processing blob metadata.
Status code |
Description |
---|---|
Completed |
The metadata has finished processing without errors. |
FileNameInvalid |
The metadata file name is invalid. |
FileNameTooLong |
The metadata file name is too long. |
FileNotFound |
The metadata file is not found. |
FileAccessDenied |
Access to the metadata file is denied. |
Corrupted |
The metadata file is corrupted (the content does not match its hash). |
XmlReadFailed |
The metadata content does not conform to the required format. |
XmlWriteFailed |
Writing the metadata XML has failed. |
BlobRequestFailed |
The Blob service request to access the metadata has failed. |
IOFailed |
A disk or network I/O failure occurred while processing the metadata. |
Failed |
An unknown failure occurred while processing the metadata. |
Cancelled |
A prior failure has stopped further processing of the metadata. |
Properties Status Codes
The following table lists the status codes for processing blob properties.
Status code |
Description |
---|---|
Completed |
The properties have finished processing without any errors. |
FileNameInvalid |
The properties file name is invalid. |
FileNameTooLong |
The properties file name is too long. |
FileNotFound |
The properties file is not found. |
FileAccessDenied |
Access to the properties file is denied. |
Corrupted |
The properties file is corrupted (the content does not match its hash). |
XmlReadFailed |
The properties content does not conform to the required format. |
XmlWriteFailed |
Writing the properties XML has failed. |
BlobRequestFailed |
The Blob service request to access the properties has failed. |
IOFailed |
A disk or network I/O failure occurred while processing the properties. |
Failed |
An unknown failure occurred while processing the properties. |
Cancelled |
A prior failure has stopped further processing of the properties. |
Sample Logs
The following is an example of verbose log.
<?xml version="1.0" encoding="UTF-8"?>
<DriveLog Version="2014-11-01">
<DriveId>WD-WMATV123456</DriveId>
<Blob Status="Completed">
<BlobPath>pictures/bob/wild/desert.jpg</BlobPath>
<FilePath>\Users\bob\Pictures\wild\desert.jpg</FilePath>
<Length>98304</Length>
<ImportDisposition Status="Created">overwrite</ImportDisposition>
<BlockList>
<Block Offset="0" Length="65536" Id="AAAAAA==" Hash=" 9C8AE14A55241F98533C4D80D85CDC68" Status="Completed"/>
<Block Offset="65536" Length="32768" Id="AQAAAA==" Hash=" DF54C531C9B3CA2570FDDDB3BCD0E27D" Status="Completed"/>
</BlockList>
<Metadata Status="Completed">
<GlobalPath Hash=" E34F54B7086BCF4EC1601D056F4C7E37">\Users\bob\Pictures\wild\metadata.xml</GlobalPath>
</Metadata>
</Blob>
<Blob Status="CompletedWithErrors">
<BlobPath>pictures/bob/animals/koala.jpg</BlobPath>
<FilePath>\Users\bob\Pictures\animals\koala.jpg</FilePath>
<Length>163840</Length>
<ImportDisposition Status="Overwritten">overwrite</ImportDisposition>
<PageRangeList>
<PageRange Offset="0" Length="65536" Hash="19701B8877418393CB3CB567F53EE225" Status="Completed"/>
<PageRange Offset="65536" Length="65536" Hash="AA2585F6F6FD01C4AD4256E018240CD4" Status="Corrupted"/>
<PageRange Offset="131072" Length="4096" Hash="9BA552E1C3EEAFFC91B42B979900A996" Status="Completed"/>
</PageRangeList>
<Properties Status="Completed">
<Path Hash="38D7AE80653F47F63C0222FEE90EC4E7">\Users\bob\Pictures\animals\koala.jpg.properties</Path>
</Properties>
</Blob>
<Status>CompletedWithErrors</Status>
</DriveLog>
The corresponding error log is shown below.
<?xml version="1.0" encoding="UTF-8"?>
<DriveLog Version="2014-11-01">
<DriveId>WD-WMATV6965824</DriveId>
<Blob Status="CompletedWithErrors">
<BlobPath>pictures/bob/animals/koala.jpg</BlobPath>
<FilePath>\Users\bob\Pictures\animals\koala.jpg</FilePath>
<Length>163840</Length>
<ImportDisposition Status="Overwritten">overwrite</ImportDisposition>
<PageRangeList>
<PageRange Offset="65536" Length="65536" Hash="AA2585F6F6FD01C4AD4256E018240CD4" Status="Corrupted"/>
</PageRangeList>
</Blob>
<Status>CompletedWithErrors</Status>
</DriveLog>
The follow error log for an import job contains an error about a file not found on the import drive. Note that the status of subsequent components is Cancelled.
<?xml version="1.0" encoding="utf-8"?>
<DriveLog Version="2014-11-01">
<DriveId>9WM35C2V</DriveId>
<Blob Status="FileNotFound">
<BlobPath>pictures/animals/koala.jpg</BlobPath>
<FilePath>\animals\koala.jpg</FilePath>
<Length>30310</Length>
<ImportDisposition Status="Cancelled">rename</ImportDisposition>
<BlockList>
<Block Offset="0" Length="6062" Id="MD5/cAzn4h7VVSWXf696qp5Uaw==" Hash="700CE7E21ED55525977FAF7AAA9E546B" Status="Cancelled" />
<Block Offset="6062" Length="6062" Id="MD5/PEnGwYOI8LPLNYdfKr7kAg==" Hash="3C49C6C18388F0B3CB35875F2ABEE402" Status="Cancelled" />
<Block Offset="12124" Length="6062" Id="MD5/FG4WxqfZKuUWZ2nGTU2qVA==" Hash="146E16C6A7D92AE5166769C64D4DAA54" Status="Cancelled" />
<Block Offset="18186" Length="6062" Id="MD5/ZzibNDzr3IRBQENRyegeXQ==" Hash="67389B343CEBDC8441404351C9E81E5D" Status="Cancelled" />
<Block Offset="24248" Length="6062" Id="MD5/ZzibNDzr3IRBQENRyegeXQ==" Hash="67389B343CEBDC8441404351C9E81E5D" Status="Cancelled" />
</BlockList>
</Blob>
<Status>CompletedWithErrors</Status>
</DriveLog>
The following error log for an export job indicates that the blob content has been successfully written to the drive, but that an error occurred while exporting the blob's properties.
<?xml version="1.0" encoding="utf-8"?>
<DriveLog Version="2014-11-01">
<DriveId>9WM35C3U</DriveId>
<Blob Status="CompletedWithErrors">
<BlobPath>pictures/wild/canyon.jpg</BlobPath>
<FilePath>\pictures\wild\canyon.jpg</FilePath>
<LastModified>2012-09-18T23:47:08Z</LastModified>
<Length>163840</Length>
<BlockList />
<Properties Status="Failed" />
</Blob>
<Status>CompletedWithErrors</Status>
</DriveLog>