diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 65c106dae..79c9935e2 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -57,6 +57,7 @@ + diff --git a/doc/xml/user-guide.xml b/doc/xml/user-guide.xml index a511de908..fc24a6cd5 100644 --- a/doc/xml/user-guide.xml +++ b/doc/xml/user-guide.xml @@ -1576,6 +1576,26 @@

While file bundling is generally more efficient, the downside is that it is more difficult to manually retrieve files from the repository. It may not be ideal for deduplicated storage since each full backup will arrange files in the bundles differently. Lastly, file bundles cannot be resumed, so be careful not to set repo-bundle-size too high.

+ +
+ Block Incremental + + This feature is in beta release and should not be used in production. The on-disk format will change before the GA release. The beta option must be enabled to prevent accidental usage of beta features. + +

Block incremental backups save space by only storing the parts of a file that have changed since the prior backup rather than storing the entire file.

+ +

The block incremental feature is enabled with the repo-block option and it works best when enabled for all backup types. File bundling must also be enabled.

+ + + Configure <br-option>repo1-block</br-option> + + y + y + + +

The repo-block-size-map, repo-block-size-super, repo-block-size-super-full, repo-block-age-map, and repo-block-checksum-size-map options can be used for tuning, though the defaults should be optimal in most cases. Note that these options may not be be available after the beta since they are primarily intended to allow experimentation to find the optimal values.

+
+
Backup Annotations diff --git a/src/build/config/config.yaml b/src/build/config/config.yaml index 4757be257..5f112c594 100644 --- a/src/build/config/config.yaml +++ b/src/build/config/config.yaml @@ -1881,7 +1881,7 @@ option: section: global group: repo type: boolean - internal: true + beta: true default: false command: backup: {} @@ -1898,7 +1898,7 @@ option: group: repo type: hash required: false - internal: true + beta: true command: repo-block command-role: main: {} @@ -1919,7 +1919,7 @@ option: type: size default: 256KiB allow-range: [32KiB, 16MiB] - internal: true + beta: true command: repo-block command-role: main: {} diff --git a/src/build/help/help.xml b/src/build/help/help.xml index 1b6526eca..016e583ed 100644 --- a/src/build/help/help.xml +++ b/src/build/help/help.xml @@ -539,7 +539,7 @@

Map file age (in days) to a block multiplier. Files that have not been modified recently are less likely to be modified in the future, so the block size is multiplied to reduce the map size. By default, if the file is old enough it will not be stored as a block incremental.

- 7=2 + 7=2|14=4 @@ -549,7 +549,7 @@

Map block size to checksum size. Smaller checksums save space in the map but may not be able to reliably detect changes in the block.

- 7=2 + 32KiB=7|128KiB=8
@@ -559,7 +559,7 @@

Map file size to block size. Block size is the minimum unit that will be stored in the block incremental. Smaller sizes allow for more granular incremental backups but larger sizes mean smaller maps.

- 16KiB=8KiB + 16KiB=8KiB|128KiB=16KiB|512KiB=32KiB
diff --git a/src/config/parse.auto.c.inc b/src/config/parse.auto.c.inc index 09057d5b0..eb438ec95 100644 --- a/src/config/parse.auto.c.inc +++ b/src/config/parse.auto.c.inc @@ -5076,6 +5076,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block PARSE_RULE_OPTION_NAME("repo-block"), // opt/repo-block PARSE_RULE_OPTION_TYPE(cfgOptTypeBoolean), // opt/repo-block + PARSE_RULE_OPTION_BETA(true), // opt/repo-block PARSE_RULE_OPTION_NEGATE(true), // opt/repo-block PARSE_RULE_OPTION_RESET(true), // opt/repo-block PARSE_RULE_OPTION_REQUIRED(true), // opt/repo-block @@ -5111,6 +5112,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block-age-map PARSE_RULE_OPTION_NAME("repo-block-age-map"), // opt/repo-block-age-map PARSE_RULE_OPTION_TYPE(cfgOptTypeHash), // opt/repo-block-age-map + PARSE_RULE_OPTION_BETA(true), // opt/repo-block-age-map PARSE_RULE_OPTION_RESET(true), // opt/repo-block-age-map PARSE_RULE_OPTION_REQUIRED(false), // opt/repo-block-age-map PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/repo-block-age-map @@ -5140,6 +5142,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block-checksum-size-map PARSE_RULE_OPTION_NAME("repo-block-checksum-size-map"), // opt/repo-block-checksum-size-map PARSE_RULE_OPTION_TYPE(cfgOptTypeHash), // opt/repo-block-checksum-size-map + PARSE_RULE_OPTION_BETA(true), // opt/repo-block-checksum-size-map PARSE_RULE_OPTION_RESET(true), // opt/repo-block-checksum-size-map PARSE_RULE_OPTION_REQUIRED(false), // opt/repo-block-checksum-size-map PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/repo-block-checksum-size-map @@ -5169,6 +5172,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block-size-map PARSE_RULE_OPTION_NAME("repo-block-size-map"), // opt/repo-block-size-map PARSE_RULE_OPTION_TYPE(cfgOptTypeHash), // opt/repo-block-size-map + PARSE_RULE_OPTION_BETA(true), // opt/repo-block-size-map PARSE_RULE_OPTION_RESET(true), // opt/repo-block-size-map PARSE_RULE_OPTION_REQUIRED(false), // opt/repo-block-size-map PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/repo-block-size-map @@ -5198,6 +5202,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block-size-super PARSE_RULE_OPTION_NAME("repo-block-size-super"), // opt/repo-block-size-super PARSE_RULE_OPTION_TYPE(cfgOptTypeSize), // opt/repo-block-size-super + PARSE_RULE_OPTION_BETA(true), // opt/repo-block-size-super PARSE_RULE_OPTION_RESET(true), // opt/repo-block-size-super PARSE_RULE_OPTION_REQUIRED(true), // opt/repo-block-size-super PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/repo-block-size-super @@ -5238,6 +5243,7 @@ static const ParseRuleOption parseRuleOption[CFG_OPTION_TOTAL] = ( // opt/repo-block-size-super-full PARSE_RULE_OPTION_NAME("repo-block-size-super-full"), // opt/repo-block-size-super-full PARSE_RULE_OPTION_TYPE(cfgOptTypeSize), // opt/repo-block-size-super-full + PARSE_RULE_OPTION_BETA(true), // opt/repo-block-size-super-full PARSE_RULE_OPTION_RESET(true), // opt/repo-block-size-super-full PARSE_RULE_OPTION_REQUIRED(true), // opt/repo-block-size-super-full PARSE_RULE_OPTION_SECTION(cfgSectionGlobal), // opt/repo-block-size-super-full