2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-22 10:58:55 +00:00

check: Adjust help and documentation for check --read-data-subset

This commit is contained in:
Leo R. Lundgren 2022-03-25 21:40:07 +01:00
parent 6087c4ad75
commit c7d637ec39
3 changed files with 29 additions and 30 deletions

View File

@ -1,9 +1,8 @@
Enhancement: Support for specifying file size in `check --read-data-subset` Enhancement: Support random subset by size in `check --read-data-subset`
To check a subset of repository files, the `check --read-data-subset` command The `--read-data-subset` option of the `check` command now supports a third way
used to support two ways to select a subset - A specific range of pack files, of specifying the subset to check, namely `nS` where `n` is a size in bytes with
or random percentage of pack files. We have added a third method to select pack suffix `S` as k/K, m/M, g/G or t/T.
files - By specifying file size. This new option is available with the 'restic check' command.
https://github.com/restic/restic/issues/3490 https://github.com/restic/restic/issues/3490
https://github.com/restic/restic/pull/3548 https://github.com/restic/restic/pull/3548

View File

@ -56,7 +56,7 @@ func init() {
f := cmdCheck.Flags() f := cmdCheck.Flags()
f.BoolVar(&checkOptions.ReadData, "read-data", false, "read all data blobs") f.BoolVar(&checkOptions.ReadData, "read-data", false, "read all data blobs")
f.StringVar(&checkOptions.ReadDataSubset, "read-data-subset", "", "read a `subset` of data packs, specified as 'n/t' for specific subset or either 'x%' or 'x.y%' for random subset") f.StringVar(&checkOptions.ReadDataSubset, "read-data-subset", "", "read a `subset` of data packs, specified as 'n/t' for specific part, or either 'x%' or 'x.y%' or a size in bytes with suffixes k/K, m/M, g/G, t/T for a random subset")
f.BoolVar(&checkOptions.CheckUnused, "check-unused", false, "find unused blobs") f.BoolVar(&checkOptions.CheckUnused, "check-unused", false, "find unused blobs")
f.BoolVar(&checkOptions.WithCache, "with-cache", false, "use the cache") f.BoolVar(&checkOptions.WithCache, "with-cache", false, "use the cache")
} }
@ -67,7 +67,7 @@ func checkFlags(opts CheckOptions) error {
} }
if opts.ReadDataSubset != "" { if opts.ReadDataSubset != "" {
dataSubset, err := stringToIntSlice(opts.ReadDataSubset) dataSubset, err := stringToIntSlice(opts.ReadDataSubset)
argumentError := errors.Fatal("check flag --read-data-subset must have two positive integer values or a percentage or a file size, e.g. --read-data-subset=1/2 or --read-data-subset=2.5%% or --read-data-subset=10G") argumentError := errors.Fatal("check flag --read-data-subset has invalid value, please see documentation")
if err == nil { if err == nil {
if len(dataSubset) != 2 { if len(dataSubset) != 2 {
return argumentError return argumentError
@ -86,7 +86,7 @@ func checkFlags(opts CheckOptions) error {
if percentage <= 0.0 || percentage > 100.0 { if percentage <= 0.0 || percentage > 100.0 {
return errors.Fatal( return errors.Fatal(
"check flag --read-data-subset=n% n must be above 0.0% and at most 100.0%") "check flag --read-data-subset=x% x must be above 0.0% and at most 100.0%")
} }
} else { } else {
@ -96,7 +96,7 @@ func checkFlags(opts CheckOptions) error {
} }
if fileSize <= 0.0 { if fileSize <= 0.0 {
return errors.Fatal( return errors.Fatal(
"check flag --read-data-subset=n n must be above 0.0") "check flag --read-data-subset=n n must be above 0")
} }
} }

View File

@ -248,12 +248,12 @@ integrity of the pack files in the repository, use the ``--read-data`` flag:
repository, beware that it might incur higher bandwidth costs than usual repository, beware that it might incur higher bandwidth costs than usual
and also that it takes more time than the default ``check``. and also that it takes more time than the default ``check``.
Alternatively, use the ``--read-data-subset`` parameter to check only a Alternatively, use the ``--read-data-subset`` parameter to check only a subset
subset of the repository pack files at a time. It supports three ways to select a of the repository pack files at a time. It supports three ways to select a
subset. One selects a specific range of pack files, the second selects a random subset. One selects a specific part of pack files, the second and third
percentage of pack files, and the third selects pack files of the specified size. selects a random subset of the pack files by the given percentage or size.
Use ``--read-data-subset=n/t`` to check only a subset of the repository pack Use ``--read-data-subset=n/t`` to check a specific part of the repository pack
files at a time. The parameter takes two values, ``n`` and ``t``. When the check files at a time. The parameter takes two values, ``n`` and ``t``. When the check
command runs, all pack files in the repository are logically divided in ``t`` command runs, all pack files in the repository are logically divided in ``t``
(roughly equal) groups, and only files that belong to group number ``n`` are (roughly equal) groups, and only files that belong to group number ``n`` are
@ -268,33 +268,33 @@ over 5 separate invocations:
$ restic -r /srv/restic-repo check --read-data-subset=4/5 $ restic -r /srv/restic-repo check --read-data-subset=4/5
$ restic -r /srv/restic-repo check --read-data-subset=5/5 $ restic -r /srv/restic-repo check --read-data-subset=5/5
Use ``--read-data-subset=n%`` to check a randomly choosen subset of the Use ``--read-data-subset=x%`` to check a randomly choosen subset of the
repository pack files. It takes one parameter, ``n``, the percentage of pack repository pack files. It takes one parameter, ``x``, the percentage of
files to check as an integer or floating point number. This will not guarantee pack files to check as an integer or floating point number. This will not
to cover all available pack files after sufficient runs, but it is easy to guarantee to cover all available pack files after sufficient runs, but it is
automate checking a small subset of data after each backup. For a floating point easy to automate checking a small subset of data after each backup. For a
value the following command may be used: floating point value the following command may be used:
.. code-block:: console .. code-block:: console
$ restic -r /srv/restic-repo check --read-data-subset=2.5% $ restic -r /srv/restic-repo check --read-data-subset=2.5%
When checking bigger subsets you most likely specify the percentage as an When checking bigger subsets you most likely want to specify the percentage
integer: as an integer:
.. code-block:: console .. code-block:: console
$ restic -r /srv/restic-repo check --read-data-subset=10% $ restic -r /srv/restic-repo check --read-data-subset=10%
Use ``--read-data-subset=NS`` to check a randomly chosen subset of the repository pack files. Use ``--read-data-subset=nS`` to check a randomly chosen subset of the
It takes one parameter, ``NS``, where 'N' is a whole number representing file size and 'S' is the unit repository pack files. It takes one parameter, ``nS``, where 'n' is a whole
of file size (B/K/M/G/T) of pack files to check. Behind the scenes, the specified size will be converted number representing file size and 'S' is the unit of file size (K/M/G/T) of
to percentage of the total repository size. The behaviour of the check command following this conversion pack files to check. Behind the scenes, the specified size will be converted
will be the same as the percentage option above. For a file size value the following command may be used: to percentage of the total repository size. The behaviour of the check command
following this conversion will be the same as the percentage option above. For
a file size value the following command may be used:
.. code-block:: console .. code-block:: console
$ restic -r /srv/restic-repo check --read-data-subset=50M $ restic -r /srv/restic-repo check --read-data-subset=50M
$ restic -r /srv/restic-repo check --read-data-subset=10G $ restic -r /srv/restic-repo check --read-data-subset=10G