mirror of
https://github.com/borgbackup/borg.git
synced 2025-03-14 16:11:43 +00:00
[TASK] #4471 – borg help should print <command> list in sorted order: Step 5b
Moved borg create.
This commit is contained in:
parent
74635f38d6
commit
e6b43ee5e9
1 changed files with 203 additions and 203 deletions
|
@ -2830,6 +2830,209 @@ class Archiver:
|
|||
subparser.add_argument('topic', metavar='TOPIC', type=str, nargs='?',
|
||||
help='additional help on TOPIC')
|
||||
|
||||
# borg create
|
||||
create_epilog = process_epilog("""
|
||||
This command creates a backup archive containing all files found while recursively
|
||||
traversing all paths specified. Paths are added to the archive as they are given,
|
||||
that means if relative paths are desired, the command has to be run from the correct
|
||||
directory.
|
||||
|
||||
When giving '-' as path, borg will read data from standard input and create a
|
||||
file 'stdin' in the created archive from that data.
|
||||
|
||||
The archive will consume almost no disk space for files or parts of files that
|
||||
have already been stored in other archives.
|
||||
|
||||
The archive name needs to be unique. It must not end in '.checkpoint' or
|
||||
'.checkpoint.N' (with N being a number), because these names are used for
|
||||
checkpoints and treated in special ways.
|
||||
|
||||
In the archive name, you may use the following placeholders:
|
||||
{now}, {utcnow}, {fqdn}, {hostname}, {user} and some others.
|
||||
|
||||
Backup speed is increased by not reprocessing files that are already part of
|
||||
existing archives and weren't modified. The detection of unmodified files is
|
||||
done by comparing multiple file metadata values with previous values kept in
|
||||
the files cache.
|
||||
|
||||
This comparison can operate in different modes as given by ``--files-cache``:
|
||||
|
||||
- ctime,size,inode (default)
|
||||
- mtime,size,inode (default behaviour of borg versions older than 1.1.0rc4)
|
||||
- ctime,size (ignore the inode number)
|
||||
- mtime,size (ignore the inode number)
|
||||
- rechunk,ctime (all files are considered modified - rechunk, cache ctime)
|
||||
- rechunk,mtime (all files are considered modified - rechunk, cache mtime)
|
||||
- disabled (disable the files cache, all files considered modified - rechunk)
|
||||
|
||||
inode number: better safety, but often unstable on network filesystems
|
||||
|
||||
Normally, detecting file modifications will take inode information into
|
||||
consideration to improve the reliability of file change detection.
|
||||
This is problematic for files located on sshfs and similar network file
|
||||
systems which do not provide stable inode numbers, such files will always
|
||||
be considered modified. You can use modes without `inode` in this case to
|
||||
improve performance, but reliability of change detection might be reduced.
|
||||
|
||||
ctime vs. mtime: safety vs. speed
|
||||
|
||||
- ctime is a rather safe way to detect changes to a file (metadata and contents)
|
||||
as it can not be set from userspace. But, a metadata-only change will already
|
||||
update the ctime, so there might be some unnecessary chunking/hashing even
|
||||
without content changes. Some filesystems do not support ctime (change time).
|
||||
- mtime usually works and only updates if file contents were changed. But mtime
|
||||
can be arbitrarily set from userspace, e.g. to set mtime back to the same value
|
||||
it had before a content change happened. This can be used maliciously as well as
|
||||
well-meant, but in both cases mtime based cache modes can be problematic.
|
||||
|
||||
The mount points of filesystems or filesystem snapshots should be the same for every
|
||||
creation of a new archive to ensure fast operation. This is because the file cache that
|
||||
is used to determine changed files quickly uses absolute filenames.
|
||||
If this is not possible, consider creating a bind mount to a stable location.
|
||||
|
||||
The ``--progress`` option shows (from left to right) Original, Compressed and Deduplicated
|
||||
(O, C and D, respectively), then the Number of files (N) processed so far, followed by
|
||||
the currently processed path.
|
||||
|
||||
When using ``--stats``, you will get some statistics about how much data was
|
||||
added - the "This Archive" deduplicated size there is most interesting as that is
|
||||
how much your repository will grow. Please note that the "All archives" stats refer to
|
||||
the state after creation. Also, the ``--stats`` and ``--dry-run`` options are mutually
|
||||
exclusive because the data is not actually compressed and deduplicated during a dry run.
|
||||
|
||||
See the output of the "borg help patterns" command for more help on exclude patterns.
|
||||
See the output of the "borg help placeholders" command for more help on placeholders.
|
||||
|
||||
.. man NOTES
|
||||
|
||||
The ``--exclude`` patterns are not like tar. In tar ``--exclude`` .bundler/gems will
|
||||
exclude foo/.bundler/gems. In borg it will not, you need to use ``--exclude``
|
||||
'\\*/.bundler/gems' to get the same effect. See ``borg help patterns`` for
|
||||
more information.
|
||||
|
||||
In addition to using ``--exclude`` patterns, it is possible to use
|
||||
``--exclude-if-present`` to specify the name of a filesystem object (e.g. a file
|
||||
or folder name) which, when contained within another folder, will prevent the
|
||||
containing folder from being backed up. By default, the containing folder and
|
||||
all of its contents will be omitted from the backup. If, however, you wish to
|
||||
only include the objects specified by ``--exclude-if-present`` in your backup,
|
||||
and not include any other contents of the containing folder, this can be enabled
|
||||
through using the ``--keep-exclude-tags`` option.
|
||||
|
||||
Item flags
|
||||
++++++++++
|
||||
|
||||
``--list`` outputs a list of all files, directories and other
|
||||
file system items it considered (no matter whether they had content changes
|
||||
or not). For each item, it prefixes a single-letter flag that indicates type
|
||||
and/or status of the item.
|
||||
|
||||
If you are interested only in a subset of that output, you can give e.g.
|
||||
``--filter=AME`` and it will only show regular files with A, M or E status (see
|
||||
below).
|
||||
|
||||
A uppercase character represents the status of a regular file relative to the
|
||||
"files" cache (not relative to the repo -- this is an issue if the files cache
|
||||
is not used). Metadata is stored in any case and for 'A' and 'M' also new data
|
||||
chunks are stored. For 'U' all data chunks refer to already existing chunks.
|
||||
|
||||
- 'A' = regular file, added (see also :ref:`a_status_oddity` in the FAQ)
|
||||
- 'M' = regular file, modified
|
||||
- 'U' = regular file, unchanged
|
||||
- 'C' = regular file, it changed while we backed it up
|
||||
- 'E' = regular file, an error happened while accessing/reading *this* file
|
||||
|
||||
A lowercase character means a file type other than a regular file,
|
||||
borg usually just stores their metadata:
|
||||
|
||||
- 'd' = directory
|
||||
- 'b' = block device
|
||||
- 'c' = char device
|
||||
- 'h' = regular file, hardlink (to already seen inodes)
|
||||
- 's' = symlink
|
||||
- 'f' = fifo
|
||||
|
||||
Other flags used include:
|
||||
|
||||
- 'i' = backup data was read from standard input (stdin)
|
||||
- '-' = dry run, item was *not* backed up
|
||||
- 'x' = excluded, item was *not* backed up
|
||||
- '?' = missing status code (if you see this, please file a bug report!)
|
||||
""")
|
||||
|
||||
subparser = subparsers.add_parser('create', parents=[common_parser], add_help=False,
|
||||
description=self.do_create.__doc__,
|
||||
epilog=create_epilog,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
help='create backup')
|
||||
subparser.set_defaults(func=self.do_create)
|
||||
|
||||
dryrun_group = subparser.add_mutually_exclusive_group()
|
||||
dryrun_group.add_argument('-n', '--dry-run', dest='dry_run', action='store_true',
|
||||
help='do not create a backup archive')
|
||||
dryrun_group.add_argument('-s', '--stats', dest='stats', action='store_true',
|
||||
help='print statistics for the created archive')
|
||||
|
||||
subparser.add_argument('--list', dest='output_list', action='store_true',
|
||||
help='output verbose list of items (files, dirs, ...)')
|
||||
subparser.add_argument('--filter', metavar='STATUSCHARS', dest='output_filter',
|
||||
help='only display items with the given status characters (see description)')
|
||||
subparser.add_argument('--json', action='store_true',
|
||||
help='output stats as JSON. Implies ``--stats``.')
|
||||
subparser.add_argument('--no-cache-sync', dest='no_cache_sync', action='store_true',
|
||||
help='experimental: do not synchronize the cache. Implies not using the files cache.')
|
||||
subparser.add_argument('--stdin-name', metavar='NAME', dest='stdin_name', default='stdin',
|
||||
help='use NAME in archive for stdin data (default: "stdin")')
|
||||
|
||||
exclude_group = define_exclusion_group(subparser, tag_files=True)
|
||||
exclude_group.add_argument('--exclude-nodump', dest='exclude_nodump', action='store_true',
|
||||
help='exclude files flagged NODUMP')
|
||||
|
||||
fs_group = subparser.add_argument_group('Filesystem options')
|
||||
fs_group.add_argument('-x', '--one-file-system', dest='one_file_system', action='store_true',
|
||||
help='stay in the same file system and do not store mount points of other file systems')
|
||||
fs_group.add_argument('--numeric-owner', dest='numeric_owner', action='store_true',
|
||||
help='only store numeric user and group identifiers')
|
||||
fs_group.add_argument('--noatime', dest='noatime', action='store_true',
|
||||
help='do not store atime into archive')
|
||||
fs_group.add_argument('--noctime', dest='noctime', action='store_true',
|
||||
help='do not store ctime into archive')
|
||||
fs_group.add_argument('--nobirthtime', dest='nobirthtime', action='store_true',
|
||||
help='do not store birthtime (creation date) into archive')
|
||||
fs_group.add_argument('--nobsdflags', dest='nobsdflags', action='store_true',
|
||||
help='do not read and store bsdflags (e.g. NODUMP, IMMUTABLE) into archive')
|
||||
fs_group.add_argument('--files-cache', metavar='MODE', dest='files_cache_mode',
|
||||
type=FilesCacheMode, default=DEFAULT_FILES_CACHE_MODE_UI,
|
||||
help='operate files cache in MODE. default: %s' % DEFAULT_FILES_CACHE_MODE_UI)
|
||||
fs_group.add_argument('--read-special', dest='read_special', action='store_true',
|
||||
help='open and read block and char device files as well as FIFOs as if they were '
|
||||
'regular files. Also follows symlinks pointing to these kinds of files.')
|
||||
|
||||
archive_group = subparser.add_argument_group('Archive options')
|
||||
archive_group.add_argument('--comment', dest='comment', metavar='COMMENT', default='',
|
||||
help='add a comment text to the archive')
|
||||
archive_group.add_argument('--timestamp', metavar='TIMESTAMP', dest='timestamp',
|
||||
type=timestamp, default=None,
|
||||
help='manually specify the archive creation date/time (UTC, yyyy-mm-ddThh:mm:ss format). '
|
||||
'Alternatively, give a reference file/directory.')
|
||||
archive_group.add_argument('-c', '--checkpoint-interval', metavar='SECONDS', dest='checkpoint_interval',
|
||||
type=int, default=1800,
|
||||
help='write checkpoint every SECONDS seconds (Default: 1800)')
|
||||
archive_group.add_argument('--chunker-params', metavar='PARAMS', dest='chunker_params',
|
||||
type=ChunkerParams, default=CHUNKER_PARAMS,
|
||||
help='specify the chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, '
|
||||
'HASH_MASK_BITS, HASH_WINDOW_SIZE). default: %s,%d,%d,%d,%d' % CHUNKER_PARAMS)
|
||||
archive_group.add_argument('-C', '--compression', metavar='COMPRESSION', dest='compression',
|
||||
type=CompressionSpec, default=CompressionSpec('lz4'),
|
||||
help='select compression algorithm, see the output of the '
|
||||
'"borg help compression" command for details.')
|
||||
|
||||
subparser.add_argument('location', metavar='ARCHIVE',
|
||||
type=location_validator(archive=True),
|
||||
help='name of archive to create (must be also a valid directory name)')
|
||||
subparser.add_argument('paths', metavar='PATH', nargs='*', type=str,
|
||||
help='paths to archive')
|
||||
|
||||
# borg mount
|
||||
mount_epilog = process_epilog("""
|
||||
This command mounts an archive as a FUSE filesystem. This can be useful for
|
||||
|
@ -3170,209 +3373,6 @@ class Archiver:
|
|||
subparser.add_argument('location', metavar='REPOSITORY', nargs='?', default='',
|
||||
type=location_validator(archive=False))
|
||||
|
||||
# borg create
|
||||
create_epilog = process_epilog("""
|
||||
This command creates a backup archive containing all files found while recursively
|
||||
traversing all paths specified. Paths are added to the archive as they are given,
|
||||
that means if relative paths are desired, the command has to be run from the correct
|
||||
directory.
|
||||
|
||||
When giving '-' as path, borg will read data from standard input and create a
|
||||
file 'stdin' in the created archive from that data.
|
||||
|
||||
The archive will consume almost no disk space for files or parts of files that
|
||||
have already been stored in other archives.
|
||||
|
||||
The archive name needs to be unique. It must not end in '.checkpoint' or
|
||||
'.checkpoint.N' (with N being a number), because these names are used for
|
||||
checkpoints and treated in special ways.
|
||||
|
||||
In the archive name, you may use the following placeholders:
|
||||
{now}, {utcnow}, {fqdn}, {hostname}, {user} and some others.
|
||||
|
||||
Backup speed is increased by not reprocessing files that are already part of
|
||||
existing archives and weren't modified. The detection of unmodified files is
|
||||
done by comparing multiple file metadata values with previous values kept in
|
||||
the files cache.
|
||||
|
||||
This comparison can operate in different modes as given by ``--files-cache``:
|
||||
|
||||
- ctime,size,inode (default)
|
||||
- mtime,size,inode (default behaviour of borg versions older than 1.1.0rc4)
|
||||
- ctime,size (ignore the inode number)
|
||||
- mtime,size (ignore the inode number)
|
||||
- rechunk,ctime (all files are considered modified - rechunk, cache ctime)
|
||||
- rechunk,mtime (all files are considered modified - rechunk, cache mtime)
|
||||
- disabled (disable the files cache, all files considered modified - rechunk)
|
||||
|
||||
inode number: better safety, but often unstable on network filesystems
|
||||
|
||||
Normally, detecting file modifications will take inode information into
|
||||
consideration to improve the reliability of file change detection.
|
||||
This is problematic for files located on sshfs and similar network file
|
||||
systems which do not provide stable inode numbers, such files will always
|
||||
be considered modified. You can use modes without `inode` in this case to
|
||||
improve performance, but reliability of change detection might be reduced.
|
||||
|
||||
ctime vs. mtime: safety vs. speed
|
||||
|
||||
- ctime is a rather safe way to detect changes to a file (metadata and contents)
|
||||
as it can not be set from userspace. But, a metadata-only change will already
|
||||
update the ctime, so there might be some unnecessary chunking/hashing even
|
||||
without content changes. Some filesystems do not support ctime (change time).
|
||||
- mtime usually works and only updates if file contents were changed. But mtime
|
||||
can be arbitrarily set from userspace, e.g. to set mtime back to the same value
|
||||
it had before a content change happened. This can be used maliciously as well as
|
||||
well-meant, but in both cases mtime based cache modes can be problematic.
|
||||
|
||||
The mount points of filesystems or filesystem snapshots should be the same for every
|
||||
creation of a new archive to ensure fast operation. This is because the file cache that
|
||||
is used to determine changed files quickly uses absolute filenames.
|
||||
If this is not possible, consider creating a bind mount to a stable location.
|
||||
|
||||
The ``--progress`` option shows (from left to right) Original, Compressed and Deduplicated
|
||||
(O, C and D, respectively), then the Number of files (N) processed so far, followed by
|
||||
the currently processed path.
|
||||
|
||||
When using ``--stats``, you will get some statistics about how much data was
|
||||
added - the "This Archive" deduplicated size there is most interesting as that is
|
||||
how much your repository will grow. Please note that the "All archives" stats refer to
|
||||
the state after creation. Also, the ``--stats`` and ``--dry-run`` options are mutually
|
||||
exclusive because the data is not actually compressed and deduplicated during a dry run.
|
||||
|
||||
See the output of the "borg help patterns" command for more help on exclude patterns.
|
||||
See the output of the "borg help placeholders" command for more help on placeholders.
|
||||
|
||||
.. man NOTES
|
||||
|
||||
The ``--exclude`` patterns are not like tar. In tar ``--exclude`` .bundler/gems will
|
||||
exclude foo/.bundler/gems. In borg it will not, you need to use ``--exclude``
|
||||
'\\*/.bundler/gems' to get the same effect. See ``borg help patterns`` for
|
||||
more information.
|
||||
|
||||
In addition to using ``--exclude`` patterns, it is possible to use
|
||||
``--exclude-if-present`` to specify the name of a filesystem object (e.g. a file
|
||||
or folder name) which, when contained within another folder, will prevent the
|
||||
containing folder from being backed up. By default, the containing folder and
|
||||
all of its contents will be omitted from the backup. If, however, you wish to
|
||||
only include the objects specified by ``--exclude-if-present`` in your backup,
|
||||
and not include any other contents of the containing folder, this can be enabled
|
||||
through using the ``--keep-exclude-tags`` option.
|
||||
|
||||
Item flags
|
||||
++++++++++
|
||||
|
||||
``--list`` outputs a list of all files, directories and other
|
||||
file system items it considered (no matter whether they had content changes
|
||||
or not). For each item, it prefixes a single-letter flag that indicates type
|
||||
and/or status of the item.
|
||||
|
||||
If you are interested only in a subset of that output, you can give e.g.
|
||||
``--filter=AME`` and it will only show regular files with A, M or E status (see
|
||||
below).
|
||||
|
||||
A uppercase character represents the status of a regular file relative to the
|
||||
"files" cache (not relative to the repo -- this is an issue if the files cache
|
||||
is not used). Metadata is stored in any case and for 'A' and 'M' also new data
|
||||
chunks are stored. For 'U' all data chunks refer to already existing chunks.
|
||||
|
||||
- 'A' = regular file, added (see also :ref:`a_status_oddity` in the FAQ)
|
||||
- 'M' = regular file, modified
|
||||
- 'U' = regular file, unchanged
|
||||
- 'C' = regular file, it changed while we backed it up
|
||||
- 'E' = regular file, an error happened while accessing/reading *this* file
|
||||
|
||||
A lowercase character means a file type other than a regular file,
|
||||
borg usually just stores their metadata:
|
||||
|
||||
- 'd' = directory
|
||||
- 'b' = block device
|
||||
- 'c' = char device
|
||||
- 'h' = regular file, hardlink (to already seen inodes)
|
||||
- 's' = symlink
|
||||
- 'f' = fifo
|
||||
|
||||
Other flags used include:
|
||||
|
||||
- 'i' = backup data was read from standard input (stdin)
|
||||
- '-' = dry run, item was *not* backed up
|
||||
- 'x' = excluded, item was *not* backed up
|
||||
- '?' = missing status code (if you see this, please file a bug report!)
|
||||
""")
|
||||
|
||||
subparser = subparsers.add_parser('create', parents=[common_parser], add_help=False,
|
||||
description=self.do_create.__doc__,
|
||||
epilog=create_epilog,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
help='create backup')
|
||||
subparser.set_defaults(func=self.do_create)
|
||||
|
||||
dryrun_group = subparser.add_mutually_exclusive_group()
|
||||
dryrun_group.add_argument('-n', '--dry-run', dest='dry_run', action='store_true',
|
||||
help='do not create a backup archive')
|
||||
dryrun_group.add_argument('-s', '--stats', dest='stats', action='store_true',
|
||||
help='print statistics for the created archive')
|
||||
|
||||
subparser.add_argument('--list', dest='output_list', action='store_true',
|
||||
help='output verbose list of items (files, dirs, ...)')
|
||||
subparser.add_argument('--filter', metavar='STATUSCHARS', dest='output_filter',
|
||||
help='only display items with the given status characters (see description)')
|
||||
subparser.add_argument('--json', action='store_true',
|
||||
help='output stats as JSON. Implies ``--stats``.')
|
||||
subparser.add_argument('--no-cache-sync', dest='no_cache_sync', action='store_true',
|
||||
help='experimental: do not synchronize the cache. Implies not using the files cache.')
|
||||
subparser.add_argument('--stdin-name', metavar='NAME', dest='stdin_name', default='stdin',
|
||||
help='use NAME in archive for stdin data (default: "stdin")')
|
||||
|
||||
exclude_group = define_exclusion_group(subparser, tag_files=True)
|
||||
exclude_group.add_argument('--exclude-nodump', dest='exclude_nodump', action='store_true',
|
||||
help='exclude files flagged NODUMP')
|
||||
|
||||
fs_group = subparser.add_argument_group('Filesystem options')
|
||||
fs_group.add_argument('-x', '--one-file-system', dest='one_file_system', action='store_true',
|
||||
help='stay in the same file system and do not store mount points of other file systems')
|
||||
fs_group.add_argument('--numeric-owner', dest='numeric_owner', action='store_true',
|
||||
help='only store numeric user and group identifiers')
|
||||
fs_group.add_argument('--noatime', dest='noatime', action='store_true',
|
||||
help='do not store atime into archive')
|
||||
fs_group.add_argument('--noctime', dest='noctime', action='store_true',
|
||||
help='do not store ctime into archive')
|
||||
fs_group.add_argument('--nobirthtime', dest='nobirthtime', action='store_true',
|
||||
help='do not store birthtime (creation date) into archive')
|
||||
fs_group.add_argument('--nobsdflags', dest='nobsdflags', action='store_true',
|
||||
help='do not read and store bsdflags (e.g. NODUMP, IMMUTABLE) into archive')
|
||||
fs_group.add_argument('--files-cache', metavar='MODE', dest='files_cache_mode',
|
||||
type=FilesCacheMode, default=DEFAULT_FILES_CACHE_MODE_UI,
|
||||
help='operate files cache in MODE. default: %s' % DEFAULT_FILES_CACHE_MODE_UI)
|
||||
fs_group.add_argument('--read-special', dest='read_special', action='store_true',
|
||||
help='open and read block and char device files as well as FIFOs as if they were '
|
||||
'regular files. Also follows symlinks pointing to these kinds of files.')
|
||||
|
||||
archive_group = subparser.add_argument_group('Archive options')
|
||||
archive_group.add_argument('--comment', dest='comment', metavar='COMMENT', default='',
|
||||
help='add a comment text to the archive')
|
||||
archive_group.add_argument('--timestamp', metavar='TIMESTAMP', dest='timestamp',
|
||||
type=timestamp, default=None,
|
||||
help='manually specify the archive creation date/time (UTC, yyyy-mm-ddThh:mm:ss format). '
|
||||
'Alternatively, give a reference file/directory.')
|
||||
archive_group.add_argument('-c', '--checkpoint-interval', metavar='SECONDS', dest='checkpoint_interval',
|
||||
type=int, default=1800,
|
||||
help='write checkpoint every SECONDS seconds (Default: 1800)')
|
||||
archive_group.add_argument('--chunker-params', metavar='PARAMS', dest='chunker_params',
|
||||
type=ChunkerParams, default=CHUNKER_PARAMS,
|
||||
help='specify the chunker parameters (ALGO, CHUNK_MIN_EXP, CHUNK_MAX_EXP, '
|
||||
'HASH_MASK_BITS, HASH_WINDOW_SIZE). default: %s,%d,%d,%d,%d' % CHUNKER_PARAMS)
|
||||
archive_group.add_argument('-C', '--compression', metavar='COMPRESSION', dest='compression',
|
||||
type=CompressionSpec, default=CompressionSpec('lz4'),
|
||||
help='select compression algorithm, see the output of the '
|
||||
'"borg help compression" command for details.')
|
||||
|
||||
subparser.add_argument('location', metavar='ARCHIVE',
|
||||
type=location_validator(archive=True),
|
||||
help='name of archive to create (must be also a valid directory name)')
|
||||
subparser.add_argument('paths', metavar='PATH', nargs='*', type=str,
|
||||
help='paths to archive')
|
||||
|
||||
# borg extract
|
||||
extract_epilog = process_epilog("""
|
||||
This command extracts the contents of an archive. By default the entire
|
||||
|
|
Loading…
Add table
Reference in a new issue