瀏覽代碼

Add "--repository" flag to the "rcreate" action. Add "--progress" flag to the "transfer" action.

Dan Helfman 2 年之前
父節點
當前提交
2a36a2a312
共有 5 個文件被更改,包括 36 次插入6 次删除
  1. 3 0
      NEWS
  2. 6 0
      borgmatic/actions/rcreate.py
  3. 3 1
      borgmatic/borg/transfer.py
  4. 10 0
      borgmatic/commands/arguments.py
  5. 14 5
      docs/how-to/upgrade.md

+ 3 - 0
NEWS

@@ -6,6 +6,9 @@
    action.
    action.
  * Fix the "create" action with the "--dry-run" flag querying for databases when a PostgreSQL/MySQL
  * Fix the "create" action with the "--dry-run" flag querying for databases when a PostgreSQL/MySQL
    "all" database is configured. Now, these queries are skipped due to the dry run.
    "all" database is configured. Now, these queries are skipped due to the dry run.
+ * Add "--repository" flag to the "rcreate" action to optionally select one configured repository to
+   create.
+ * Add "--progress" flag to the "transfer" action, new in Borg 2.0.0b5.
 
 
 1.7.7
 1.7.7
  * #642: Add MySQL database hook "add_drop_database" configuration option to control whether dumped
  * #642: Add MySQL database hook "add_drop_database" configuration option to control whether dumped

+ 6 - 0
borgmatic/actions/rcreate.py

@@ -1,6 +1,7 @@
 import logging
 import logging
 
 
 import borgmatic.borg.rcreate
 import borgmatic.borg.rcreate
+import borgmatic.config.validate
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
@@ -17,6 +18,11 @@ def run_rcreate(
     '''
     '''
     Run the "rcreate" action for the given repository.
     Run the "rcreate" action for the given repository.
     '''
     '''
+    if rcreate_arguments.repository and not borgmatic.config.validate.repositories_match(
+        repository, rcreate_arguments.repository
+    ):
+        return
+
     logger.info('{}: Creating repository'.format(repository))
     logger.info('{}: Creating repository'.format(repository))
     borgmatic.borg.rcreate.create_repository(
     borgmatic.borg.rcreate.create_repository(
         global_arguments.dry_run,
         global_arguments.dry_run,

+ 3 - 1
borgmatic/borg/transfer.py

@@ -2,7 +2,7 @@ import logging
 
 
 import borgmatic.logger
 import borgmatic.logger
 from borgmatic.borg import environment, flags
 from borgmatic.borg import environment, flags
-from borgmatic.execute import execute_command
+from borgmatic.execute import DO_NOT_CAPTURE, execute_command
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
@@ -28,6 +28,7 @@ def transfer_archives(
         + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + flags.make_flags('remote-path', remote_path)
         + flags.make_flags('remote-path', remote_path)
         + flags.make_flags('lock-wait', storage_config.get('lock_wait', None))
         + flags.make_flags('lock-wait', storage_config.get('lock_wait', None))
+        + (('--progress',) if transfer_arguments.progress else ())
         + (
         + (
             flags.make_flags(
             flags.make_flags(
                 'match-archives', transfer_arguments.match_archives or transfer_arguments.archive
                 'match-archives', transfer_arguments.match_archives or transfer_arguments.archive
@@ -45,6 +46,7 @@ def transfer_archives(
     return execute_command(
     return execute_command(
         full_command,
         full_command,
         output_log_level=logging.ANSWER,
         output_log_level=logging.ANSWER,
+        output_file=DO_NOT_CAPTURE if transfer_arguments.progress else None,
         borg_local_path=local_path,
         borg_local_path=local_path,
         extra_environment=environment.make_environment(storage_config),
         extra_environment=environment.make_environment(storage_config),
     )
     )

+ 10 - 0
borgmatic/commands/arguments.py

@@ -247,6 +247,10 @@ def make_parsers():
         metavar='KEY_REPOSITORY',
         metavar='KEY_REPOSITORY',
         help='Path to an existing Borg repository whose key material should be reused (Borg 2.x+ only)',
         help='Path to an existing Borg repository whose key material should be reused (Borg 2.x+ only)',
     )
     )
+    rcreate_group.add_argument(
+        '--repository',
+        help='Path of the new repository to create (must be already specified in a borgmatic configuration file), defaults to the configured repository if there is only one',
+    )
     rcreate_group.add_argument(
     rcreate_group.add_argument(
         '--copy-crypt-key',
         '--copy-crypt-key',
         action='store_true',
         action='store_true',
@@ -292,6 +296,12 @@ def make_parsers():
         '--upgrader',
         '--upgrader',
         help='Upgrader type used to convert the transfered data, e.g. "From12To20" to upgrade data from Borg 1.2 to 2.0 format, defaults to no conversion',
         help='Upgrader type used to convert the transfered data, e.g. "From12To20" to upgrade data from Borg 1.2 to 2.0 format, defaults to no conversion',
     )
     )
+    transfer_group.add_argument(
+        '--progress',
+        default=False,
+        action='store_true',
+        help='Display progress as each archive is transferred',
+    )
     transfer_group.add_argument(
     transfer_group.add_argument(
         '-a',
         '-a',
         '--match-archives',
         '--match-archives',

+ 14 - 5
docs/how-to/upgrade.md

@@ -169,12 +169,21 @@ The `--source-repository` flag is necessary to reuse key material from your
 Borg 1 repository so that the subsequent data transfer can work.
 Borg 1 repository so that the subsequent data transfer can work.
 
 
 The `--encryption` value above selects the same chunk ID algorithm (`blake2`)
 The `--encryption` value above selects the same chunk ID algorithm (`blake2`)
-used in Borg 1, thereby making deduplication work across transferred archives
-and new archives. Note that `repokey-blake2-chacha20-poly1305` may be faster
-than `repokey-blake2-aes-ocb` on certain platforms like ARM64. Read about
-[Borg encryption
+commonly used in Borg 1, thereby making deduplication work across transferred
+archives and new archives.
+
+If you get an error about "You must keep the same ID hash" from Borg, that
+means the encryption value you specified doesn't correspond to your source
+repository's chunk ID algorithm. In that case, try not using `blake2`:
+
+```bash
+borgmatic rcreate --verbosity 1 --encryption repokey-aes-ocb \
+    --source-repository original.borg --repository upgraded.borg
+```
+
+Read about [Borg encryption
 modes](https://borgbackup.readthedocs.io/en/2.0.0b5/usage/rcreate.html#encryption-mode-tldr)
 modes](https://borgbackup.readthedocs.io/en/2.0.0b5/usage/rcreate.html#encryption-mode-tldr)
-for the menu of available encryption modes.
+for more details.
 
 
 To transfer data from your original Borg 1 repository to your newly created
 To transfer data from your original Borg 1 repository to your newly created
 Borg 2 repository:
 Borg 2 repository: