@@ -6,6 +6,9 @@ snapshot of a live file system and to restore that snapshot onto a block
device for debugging purposes. Only the metadata are captured in the
snapshot, and the metadata blocks may be obscured for privacy reasons.
+[[Metadump_v1]]
+== Metadump v1
+
A metadump file starts with a +xfs_metablock+ that records the addresses of
the blocks that follow. Following that are the metadata blocks captured
from the filesystem. The first block following the first superblock
@@ -21,7 +24,7 @@ struct xfs_metablock {
__be32 mb_magic;
__be16 mb_count;
uint8_t mb_blocklog;
- uint8_t mb_reserved;
+ uint8_t mb_info;
__be64 mb_daddr[];
};
----
@@ -37,14 +40,117 @@ Number of blocks indexed by this record. This value must not exceed +(1
The log size of a metadump block. This size of a metadump block 512
bytes, so this value should be 9.
-*mb_reserved*::
-Reserved. Should be zero.
+*mb_info*::
+A combination of the following flags:
+
+.Metadump information flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_METADUMP_INFO_FLAGS+ |
+This field is nonzero.
+
+| +XFS_METADUMP_OBFUSCATED+ |
+User-supplied directory entry and extended attribute names have been obscured,
+and extended attribute values are zeroed to protect privacy.
+
+| +XFS_METADUMP_FULLBLOCKS+ |
+Entire metadata blocks have been dumped, including unused areas.
+If not set, the unused areas are zeroed.
+
+| +XFS_METADUMP_DIRTYLOG+ |
+The log was dirty when the dump was captured.
+
+|=====
*mb_daddr*::
An array of disk addresses. Each of the +mb_count+ blocks (of size +(1
<< mb_blocklog+) following the +xfs_metablock+ should be written back to
the address pointed to by the corresponding +mb_daddr+ entry.
+[[Metadump_v2]]
+== Metadump v2
+
+A v2 metadump file starts with a +xfs_metadump_header+ structure that records
+information about the dump itself. Immediately after this header is a sequence
+of a +xfs_meta_extent+ structure describing an extent of data and the data
+itself. Data areas must be a multiple of 512 bytes in length.
+
+.Metadata v2 Dump Format
+
+[source, c]
+----
+struct xfs_metadump_header {
+ __be32 xmh_magic;
+ __be32 xmh_version;
+ __be32 xmh_compat_flags;
+ __be32 xmh_incompat_flags;
+ __be64 xmh_reserved;
+} __packed;
+----
+
+*xmh_magic*::
+The magic number, ``XMD2'' (0x584D4432).
+
+*xmh_version*::
+The value 2.
+
+*xmh_compat_flags*::
+A combination of the following flags:
+
+.Metadump v2 compat flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_MD2_COMPAT_OBFUSCATED+ |
+User-supplied directory entry and extended attribute names have been obscured,
+and extended attribute values are zeroed to protect privacy.
+
+| +XFS_MD2_COMPAT_FULLBLOCKS+ |
+Entire metadata blocks have been dumped, including unused areas.
+If not set, the unused areas are zeroed.
+
+| +XFS_MD2_COMPAT_DIRTYLOG+ |
+The log was dirty when the dump was captured.
+
+| +XFS_MD2_COMPAT_EXTERNALLOG+ |
+Dump contains external log contents.
+
+|=====
+
+*xmh_incompat_flags*::
+Must be zero.
+
+*xmh_reserved*::
+Must be zero.
+
+.Metadata v2 Extent Format
+
+[source, c]
+----
+struct xfs_meta_extent {
+ __be64 xme_addr;
+ __be32 xme_len;
+} __packed;
+----
+
+*xme_addr*::
+Bits 55-56 determine the device from which the metadata dump data was extracted.
+
+.Metadump v2 extent flags
+[options="header"]
+|=====
+| Value | Description
+| 0 | Data device
+| 1 | External log
+|=====
+
+The lower 54 bits determine the device address from which the dump data was
+extracted, in units of 512 bytes.
+
+*xme_length*::
+Length of the metadata dump data region, in units of 512 bytes.
+
== Dump Obfuscation
Unless explicitly disabled, the +xfs_metadump+ tool obfuscates empty block