|
@@ -3436,126 +3436,6 @@ class Archiver:
|
|
|
help='format output as JSON')
|
|
|
define_archive_filters_group(subparser)
|
|
|
|
|
|
- # borg mount
|
|
|
- mount_epilog = process_epilog("""
|
|
|
- This command mounts an archive as a FUSE filesystem. This can be useful for
|
|
|
- browsing an archive or restoring individual files. Unless the ``--foreground``
|
|
|
- option is given the command will run in the background until the filesystem
|
|
|
- is ``umounted``.
|
|
|
-
|
|
|
- The command ``borgfs`` provides a wrapper for ``borg mount``. This can also be
|
|
|
- used in fstab entries:
|
|
|
- ``/path/to/repo /mnt/point fuse.borgfs defaults,noauto 0 0``
|
|
|
-
|
|
|
- To allow a regular user to use fstab entries, add the ``user`` option:
|
|
|
- ``/path/to/repo /mnt/point fuse.borgfs defaults,noauto,user 0 0``
|
|
|
-
|
|
|
- For FUSE configuration and mount options, see the mount.fuse(8) manual page.
|
|
|
-
|
|
|
- Additional mount options supported by borg:
|
|
|
-
|
|
|
- - versions: when used with a repository mount, this gives a merged, versioned
|
|
|
- view of the files in the archives. EXPERIMENTAL, layout may change in future.
|
|
|
- - allow_damaged_files: by default damaged files (where missing chunks were
|
|
|
- replaced with runs of zeros by borg check ``--repair``) are not readable and
|
|
|
- return EIO (I/O error). Set this option to read such files.
|
|
|
- - ignore_permissions: for security reasons the "default_permissions" mount
|
|
|
- option is internally enforced by borg. "ignore_permissions" can be given to
|
|
|
- not enforce "default_permissions".
|
|
|
-
|
|
|
- The BORG_MOUNT_DATA_CACHE_ENTRIES environment variable is meant for advanced users
|
|
|
- to tweak the performance. It sets the number of cached data chunks; additional
|
|
|
- memory usage can be up to ~8 MiB times this number. The default is the number
|
|
|
- of CPU cores.
|
|
|
-
|
|
|
- When the daemonized process receives a signal or crashes, it does not unmount.
|
|
|
- Unmounting in these cases could cause an active rsync or similar process
|
|
|
- to unintentionally delete data.
|
|
|
-
|
|
|
- When running in the foreground ^C/SIGINT unmounts cleanly, but other
|
|
|
- signals or crashes do not.
|
|
|
- """)
|
|
|
-
|
|
|
- if parser.prog == 'borgfs':
|
|
|
- parser.description = self.do_mount.__doc__
|
|
|
- parser.epilog = mount_epilog
|
|
|
- parser.formatter_class = argparse.RawDescriptionHelpFormatter
|
|
|
- parser.help = 'mount repository'
|
|
|
- subparser = parser
|
|
|
- else:
|
|
|
- subparser = subparsers.add_parser('mount', parents=[common_parser], add_help=False,
|
|
|
- description=self.do_mount.__doc__,
|
|
|
- epilog=mount_epilog,
|
|
|
- formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
- help='mount repository')
|
|
|
- subparser.set_defaults(func=self.do_mount)
|
|
|
- subparser.add_argument('location', metavar='REPOSITORY_OR_ARCHIVE', type=location_validator(),
|
|
|
- help='repository/archive to mount')
|
|
|
- subparser.add_argument('mountpoint', metavar='MOUNTPOINT', type=str,
|
|
|
- help='where to mount filesystem')
|
|
|
- subparser.add_argument('-f', '--foreground', dest='foreground',
|
|
|
- action='store_true',
|
|
|
- help='stay in foreground, do not daemonize')
|
|
|
- subparser.add_argument('-o', dest='options', type=str,
|
|
|
- help='Extra mount options')
|
|
|
- define_archive_filters_group(subparser)
|
|
|
- subparser.add_argument('paths', metavar='PATH', nargs='*', type=str,
|
|
|
- help='paths to extract; patterns are supported')
|
|
|
- define_exclusion_group(subparser, strip_components=True)
|
|
|
- if parser.prog == 'borgfs':
|
|
|
- return parser
|
|
|
-
|
|
|
- # borg rename
|
|
|
- rename_epilog = process_epilog("""
|
|
|
- This command renames an archive in the repository.
|
|
|
-
|
|
|
- This results in a different archive ID.
|
|
|
- """)
|
|
|
- subparser = subparsers.add_parser('rename', parents=[common_parser], add_help=False,
|
|
|
- description=self.do_rename.__doc__,
|
|
|
- epilog=rename_epilog,
|
|
|
- formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
- help='rename archive')
|
|
|
- subparser.set_defaults(func=self.do_rename)
|
|
|
- subparser.add_argument('location', metavar='ARCHIVE',
|
|
|
- type=location_validator(archive=True),
|
|
|
- help='archive to rename')
|
|
|
- subparser.add_argument('name', metavar='NEWNAME',
|
|
|
- type=archivename_validator(),
|
|
|
- help='the new archive name to use')
|
|
|
-
|
|
|
- # borg serve
|
|
|
- serve_epilog = process_epilog("""
|
|
|
- This command starts a repository server process. This command is usually not used manually.
|
|
|
- """)
|
|
|
- subparser = subparsers.add_parser('serve', parents=[common_parser], add_help=False,
|
|
|
- description=self.do_serve.__doc__, epilog=serve_epilog,
|
|
|
- formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
- help='start repository server process')
|
|
|
- subparser.set_defaults(func=self.do_serve)
|
|
|
- subparser.add_argument('--restrict-to-path', metavar='PATH', dest='restrict_to_paths', action='append',
|
|
|
- help='restrict repository access to PATH. '
|
|
|
- 'Can be specified multiple times to allow the client access to several directories. '
|
|
|
- 'Access to all sub-directories is granted implicitly; PATH doesn\'t need to directly point to a repository.')
|
|
|
- subparser.add_argument('--restrict-to-repository', metavar='PATH', dest='restrict_to_repositories', action='append',
|
|
|
- help='restrict repository access. Only the repository located at PATH '
|
|
|
- '(no sub-directories are considered) is accessible. '
|
|
|
- 'Can be specified multiple times to allow the client access to several repositories. '
|
|
|
- 'Unlike ``--restrict-to-path`` sub-directories are not accessible; '
|
|
|
- 'PATH needs to directly point at a repository location. '
|
|
|
- 'PATH may be an empty directory or the last element of PATH may not exist, in which case '
|
|
|
- 'the client may initialize a repository there.')
|
|
|
- subparser.add_argument('--append-only', dest='append_only', action='store_true',
|
|
|
- help='only allow appending to repository segment files. Note that this only '
|
|
|
- 'affects the low level structure of the repository, and running `delete` '
|
|
|
- 'or `prune` will still be allowed. See :ref:`append_only_mode` in Additional '
|
|
|
- 'Notes for more details.')
|
|
|
- subparser.add_argument('--storage-quota', metavar='QUOTA', dest='storage_quota',
|
|
|
- type=parse_storage_quota, default=None,
|
|
|
- help='Override storage quota of the repository (e.g. 5G, 1.5T). '
|
|
|
- 'When a new repository is initialized, sets the storage quota on the new '
|
|
|
- 'repository as well. Default: no quota.')
|
|
|
-
|
|
|
# borg init
|
|
|
init_epilog = process_epilog("""
|
|
|
This command initializes an empty repository. A repository is a filesystem
|
|
@@ -3846,6 +3726,126 @@ class Archiver:
|
|
|
define_archive_filters_group(subparser)
|
|
|
define_exclusion_group(subparser)
|
|
|
|
|
|
+ # borg mount
|
|
|
+ mount_epilog = process_epilog("""
|
|
|
+ This command mounts an archive as a FUSE filesystem. This can be useful for
|
|
|
+ browsing an archive or restoring individual files. Unless the ``--foreground``
|
|
|
+ option is given the command will run in the background until the filesystem
|
|
|
+ is ``umounted``.
|
|
|
+
|
|
|
+ The command ``borgfs`` provides a wrapper for ``borg mount``. This can also be
|
|
|
+ used in fstab entries:
|
|
|
+ ``/path/to/repo /mnt/point fuse.borgfs defaults,noauto 0 0``
|
|
|
+
|
|
|
+ To allow a regular user to use fstab entries, add the ``user`` option:
|
|
|
+ ``/path/to/repo /mnt/point fuse.borgfs defaults,noauto,user 0 0``
|
|
|
+
|
|
|
+ For FUSE configuration and mount options, see the mount.fuse(8) manual page.
|
|
|
+
|
|
|
+ Additional mount options supported by borg:
|
|
|
+
|
|
|
+ - versions: when used with a repository mount, this gives a merged, versioned
|
|
|
+ view of the files in the archives. EXPERIMENTAL, layout may change in future.
|
|
|
+ - allow_damaged_files: by default damaged files (where missing chunks were
|
|
|
+ replaced with runs of zeros by borg check ``--repair``) are not readable and
|
|
|
+ return EIO (I/O error). Set this option to read such files.
|
|
|
+ - ignore_permissions: for security reasons the "default_permissions" mount
|
|
|
+ option is internally enforced by borg. "ignore_permissions" can be given to
|
|
|
+ not enforce "default_permissions".
|
|
|
+
|
|
|
+ The BORG_MOUNT_DATA_CACHE_ENTRIES environment variable is meant for advanced users
|
|
|
+ to tweak the performance. It sets the number of cached data chunks; additional
|
|
|
+ memory usage can be up to ~8 MiB times this number. The default is the number
|
|
|
+ of CPU cores.
|
|
|
+
|
|
|
+ When the daemonized process receives a signal or crashes, it does not unmount.
|
|
|
+ Unmounting in these cases could cause an active rsync or similar process
|
|
|
+ to unintentionally delete data.
|
|
|
+
|
|
|
+ When running in the foreground ^C/SIGINT unmounts cleanly, but other
|
|
|
+ signals or crashes do not.
|
|
|
+ """)
|
|
|
+
|
|
|
+ if parser.prog == 'borgfs':
|
|
|
+ parser.description = self.do_mount.__doc__
|
|
|
+ parser.epilog = mount_epilog
|
|
|
+ parser.formatter_class = argparse.RawDescriptionHelpFormatter
|
|
|
+ parser.help = 'mount repository'
|
|
|
+ subparser = parser
|
|
|
+ else:
|
|
|
+ subparser = subparsers.add_parser('mount', parents=[common_parser], add_help=False,
|
|
|
+ description=self.do_mount.__doc__,
|
|
|
+ epilog=mount_epilog,
|
|
|
+ formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
+ help='mount repository')
|
|
|
+ subparser.set_defaults(func=self.do_mount)
|
|
|
+ subparser.add_argument('location', metavar='REPOSITORY_OR_ARCHIVE', type=location_validator(),
|
|
|
+ help='repository/archive to mount')
|
|
|
+ subparser.add_argument('mountpoint', metavar='MOUNTPOINT', type=str,
|
|
|
+ help='where to mount filesystem')
|
|
|
+ subparser.add_argument('-f', '--foreground', dest='foreground',
|
|
|
+ action='store_true',
|
|
|
+ help='stay in foreground, do not daemonize')
|
|
|
+ subparser.add_argument('-o', dest='options', type=str,
|
|
|
+ help='Extra mount options')
|
|
|
+ define_archive_filters_group(subparser)
|
|
|
+ subparser.add_argument('paths', metavar='PATH', nargs='*', type=str,
|
|
|
+ help='paths to extract; patterns are supported')
|
|
|
+ define_exclusion_group(subparser, strip_components=True)
|
|
|
+ if parser.prog == 'borgfs':
|
|
|
+ return parser
|
|
|
+
|
|
|
+ # borg rename
|
|
|
+ rename_epilog = process_epilog("""
|
|
|
+ This command renames an archive in the repository.
|
|
|
+
|
|
|
+ This results in a different archive ID.
|
|
|
+ """)
|
|
|
+ subparser = subparsers.add_parser('rename', parents=[common_parser], add_help=False,
|
|
|
+ description=self.do_rename.__doc__,
|
|
|
+ epilog=rename_epilog,
|
|
|
+ formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
+ help='rename archive')
|
|
|
+ subparser.set_defaults(func=self.do_rename)
|
|
|
+ subparser.add_argument('location', metavar='ARCHIVE',
|
|
|
+ type=location_validator(archive=True),
|
|
|
+ help='archive to rename')
|
|
|
+ subparser.add_argument('name', metavar='NEWNAME',
|
|
|
+ type=archivename_validator(),
|
|
|
+ help='the new archive name to use')
|
|
|
+
|
|
|
+ # borg serve
|
|
|
+ serve_epilog = process_epilog("""
|
|
|
+ This command starts a repository server process. This command is usually not used manually.
|
|
|
+ """)
|
|
|
+ subparser = subparsers.add_parser('serve', parents=[common_parser], add_help=False,
|
|
|
+ description=self.do_serve.__doc__, epilog=serve_epilog,
|
|
|
+ formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
|
+ help='start repository server process')
|
|
|
+ subparser.set_defaults(func=self.do_serve)
|
|
|
+ subparser.add_argument('--restrict-to-path', metavar='PATH', dest='restrict_to_paths', action='append',
|
|
|
+ help='restrict repository access to PATH. '
|
|
|
+ 'Can be specified multiple times to allow the client access to several directories. '
|
|
|
+ 'Access to all sub-directories is granted implicitly; PATH doesn\'t need to directly point to a repository.')
|
|
|
+ subparser.add_argument('--restrict-to-repository', metavar='PATH', dest='restrict_to_repositories', action='append',
|
|
|
+ help='restrict repository access. Only the repository located at PATH '
|
|
|
+ '(no sub-directories are considered) is accessible. '
|
|
|
+ 'Can be specified multiple times to allow the client access to several repositories. '
|
|
|
+ 'Unlike ``--restrict-to-path`` sub-directories are not accessible; '
|
|
|
+ 'PATH needs to directly point at a repository location. '
|
|
|
+ 'PATH may be an empty directory or the last element of PATH may not exist, in which case '
|
|
|
+ 'the client may initialize a repository there.')
|
|
|
+ subparser.add_argument('--append-only', dest='append_only', action='store_true',
|
|
|
+ help='only allow appending to repository segment files. Note that this only '
|
|
|
+ 'affects the low level structure of the repository, and running `delete` '
|
|
|
+ 'or `prune` will still be allowed. See :ref:`append_only_mode` in Additional '
|
|
|
+ 'Notes for more details.')
|
|
|
+ subparser.add_argument('--storage-quota', metavar='QUOTA', dest='storage_quota',
|
|
|
+ type=parse_storage_quota, default=None,
|
|
|
+ help='Override storage quota of the repository (e.g. 5G, 1.5T). '
|
|
|
+ 'When a new repository is initialized, sets the storage quota on the new '
|
|
|
+ 'repository as well. Default: no quota.')
|
|
|
+
|
|
|
# borg umount
|
|
|
umount_epilog = process_epilog("""
|
|
|
This command un-mounts a FUSE filesystem that was mounted with ``borg mount``.
|