# Design The data layout design is very simple. It consists of data split into chunks with the first chunk holding the metadata for the structure and files. ## Spec ``` METADATA DATA |---------------------------------------------------------------------------||------| [ MAGIC ][ VERSION ][ COMPRESSION ][ SIZE_PER_CHUNK ][ TOTAL_SIZE ][ #FILES ][ DATA ] # chunk 1 [ DATA ] # chunk 2 [ DATA ] # etc.. [ DATA ] # last chunk ``` ### Magic string Magic string to detect if the read file is what we expect it is. Represented in 3 bytes. Value is `0x514D21`, the closest approximation of "Sindri". ### Version Version of the specification. Represented in `2 bytes`. Value is `1` currently. ### Compression Wether LZ4 compression is enabled/disabled. Represented in `1 byte`. Value is configurable, defaulting to `0`. `0` = off
`1` = default LZ4 algorithm
`2` = lowest LZ4-HC algorithm, faster and larger
..
`12` = highest LZ4-HC algorithm, slower and smaller ### Size per chunks The size in bytes of each chunk. Represented in `8 bytes`. Value is configurable, defaulting to `2GiB`. ### Total size The total size in bytes of all chunks combined. Represented in `8 bytes`. ### Number of files The total number of files in the pack. Represented in `4 bytes`. ### File Piece of data stored, consisting of 3 parts: - Path - Offset - Size #### Path Path of the file as if it were on the filesystem. Represented in `512 bytes`. #### Offset The offset to the file, starting from the true 0th byte of the first chunk. Represented in `8 bytes`. #### Size Size of the file. Represented in `8 bytes`.