2bc1250c28
minor formatting and language fixes to the faq section and the appendix Signed-off-by: Dylan Whyte <d.whyte@proxmox.com>
121 lines
2.8 KiB
ReStructuredText
121 lines
2.8 KiB
ReStructuredText
File Formats
|
|
============
|
|
|
|
.. _pxar-format:
|
|
|
|
Proxmox File Archive Format (``.pxar``)
|
|
---------------------------------------
|
|
|
|
.. graphviz:: pxar-format-overview.dot
|
|
|
|
|
|
.. _data-blob-format:
|
|
|
|
Data Blob Format (``.blob``)
|
|
----------------------------
|
|
|
|
The data blob format is used to store small binary data. The magic number
|
|
decides the exact format:
|
|
|
|
.. list-table::
|
|
:widths: auto
|
|
|
|
* - ``[66, 171, 56, 7, 190, 131, 112, 161]``
|
|
- unencrypted
|
|
- uncompressed
|
|
* - ``[49, 185, 88, 66, 111, 182, 163, 127]``
|
|
- unencrypted
|
|
- compressed
|
|
* - ``[123, 103, 133, 190, 34, 45, 76, 240]``
|
|
- encrypted
|
|
- uncompressed
|
|
* - ``[230, 89, 27, 191, 11, 191, 216, 11]``
|
|
- encrypted
|
|
- compressed
|
|
|
|
The compression algorithm used is ``zstd``. The encryption cipher is
|
|
``AES_256_GCM``.
|
|
|
|
Unencrypted blobs use the following format:
|
|
|
|
.. list-table::
|
|
:widths: auto
|
|
|
|
* - ``MAGIC: [u8; 8]``
|
|
* - ``CRC32: [u8; 4]``
|
|
* - ``Data: (max 16MiB)``
|
|
|
|
Encrypted blobs additionally contain a 16 byte initialization vector (IV),
|
|
followed by a 16 byte authenticated encryption (AE) tag, followed by the
|
|
encrypted data:
|
|
|
|
.. list-table::
|
|
|
|
* - ``MAGIC: [u8; 8]``
|
|
* - ``CRC32: [u8; 4]``
|
|
* - ``IV: [u8; 16]``
|
|
* - ``TAG: [u8; 16]``
|
|
* - ``Data: (max 16MiB)``
|
|
|
|
|
|
.. _fixed-index-format:
|
|
|
|
Fixed Index Format (``.fidx``)
|
|
-------------------------------
|
|
|
|
All numbers are stored as little-endian.
|
|
|
|
.. list-table::
|
|
|
|
* - ``MAGIC: [u8; 8]``
|
|
- ``[47, 127, 65, 237, 145, 253, 15, 205]``
|
|
* - ``uuid: [u8; 16]``,
|
|
- Unique ID
|
|
* - ``ctime: i64``,
|
|
- Creation Time (epoch)
|
|
* - ``index_csum: [u8; 32]``,
|
|
- SHA-256 over the index (without header) ``SHA256(digest1||digest2||...)``
|
|
* - ``size: u64``,
|
|
- Image size
|
|
* - ``chunk_size: u64``,
|
|
- Chunk size
|
|
* - ``reserved: [u8; 4016]``,
|
|
- Overall header size is one page (4096 bytes)
|
|
* - ``digest1: [u8; 32]``
|
|
- First chunk digest
|
|
* - ``digest2: [u8; 32]``
|
|
- Second chunk digest
|
|
* - ...
|
|
- Next chunk digest ...
|
|
|
|
|
|
.. _dynamic-index-format:
|
|
|
|
Dynamic Index Format (``.didx``)
|
|
--------------------------------
|
|
|
|
All numbers are stored as little-endian.
|
|
|
|
.. list-table::
|
|
|
|
* - ``MAGIC: [u8; 8]``
|
|
- ``[28, 145, 78, 165, 25, 186, 179, 205]``
|
|
* - ``uuid: [u8; 16]``,
|
|
- Unique ID
|
|
* - ``ctime: i64``,
|
|
- Creation Time (epoch)
|
|
* - ``index_csum: [u8; 32]``,
|
|
- SHA-256 over the index (without header) ``SHA256(offset1||digest1||offset2||digest2||...)``
|
|
* - ``reserved: [u8; 4032]``,
|
|
- Overall header size is one page (4096 bytes)
|
|
* - ``offset1: u64``
|
|
- End of first chunk
|
|
* - ``digest1: [u8; 32]``
|
|
- First chunk digest
|
|
* - ``offset2: u64``
|
|
- End of second chunk
|
|
* - ``digest2: [u8; 32]``
|
|
- Second chunk digest
|
|
* - ...
|
|
- Next chunk offset/digest
|