From 0bce2118e7972a1c27a0c034cc8320d78d608aef Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 12 Jan 2021 16:37:23 +0100 Subject: [PATCH] tape: improve docu --- docs/tape-backup.rst | 75 ++++++++++++++++++++++--------- src/api2/types/tape/media_pool.rs | 4 +- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/docs/tape-backup.rst b/docs/tape-backup.rst index 6fd9b2f24..546441ea5 100644 --- a/docs/tape-backup.rst +++ b/docs/tape-backup.rst @@ -1,18 +1,19 @@ Tape Backup =========== -Our tape backup solution provides a easy way to store datastore -contents to a tape. This increases data safety because you get: +Proxmox tape backup provides an easy way to store datastore contents +to a magnetic tapes. This increases data safety because you get: - an additional copy of the data - to a different media type (tape) -- to an additional location (you can move tape offsite) +- to an additional location (you can move tapes offsite) -Statistics show that 95% of all restore jobs restores the last -backup. Restore requests further declines the older the data gets. -Considering that, tape backup may also help to reduce disk usage, -because you can safely remove data from disk once archived on tape. -This is especially true if you need to keep data for several years. +Statistics show that 95% of all restore jobs restores data from the +last backup. Restore requests further declines the older the data +gets. Considering this, tape backup may also help to reduce disk +usage, because you can safely remove data from disk once archived on +tape. This is especially true if you need to keep data for several +years. Tape backups do not provide random access to the stored data. Instead, you need to restore the data to disk before you can access it @@ -50,8 +51,7 @@ In general, LTO tapes offer the following advantages: - Multiple vendors (for both media and drives) Please note that `Proxmox Backup Server` already stores compressed -data, so we do not need/use the tape compression feature. Same applies -to encryption. +data, so we do not need/use the tape compression feature. Supported Hardware @@ -78,9 +78,9 @@ restore jobs while the other dives are used for backups. Also consider that you need to read data first from your datastore (disk). But a single spinning disk is unable to deliver data at this -rate. We meassured a maximum rate about 100MB/s in practive, so it -takes 33 hours to read 12TB to fill up a LTO8 tape. So if you want to -run your tape at full speed, please make sure that the source +rate. We meassured a maximum rate about 60MB/s to 100MB/s in practive, +so it takes 33 hours to read 12TB to fill up a LTO8 tape. If you want +to run your tape at full speed, please make sure that the source datastore is able to delive that performance (use SSDs). @@ -438,18 +438,33 @@ one media pool, so a job only uses tapes from that pool. - Never overwrite data. + .. NOTE:: FIXME: Add note about global content namespace. (We do not store the source datastore, so it is impossible to distinguish store1:/vm/100 from store2:/vm/100. Please use different media pools if the source is from a different name space) -Empty Media Pool -^^^^^^^^^^^^^^^^ +The following command creates a new media pool:: -It is possible to label tapes with no pool assignment. Such tapes may -be used by any pool. Once used by a pool, media stays in that pool. + // proxmox-tape pool create --drive [OPTIONS] + # proxmox-tape pool create daily --drive mydrive + + +Additional option can be set later using the update command:: + + # proxmox-tape pool update daily --allocation daily --retention 7days + + +To list all configured pools use:: + + # proxmox-tape pool list + ┌───────┬──────────┬────────────┬───────────┬──────────┐ + │ name │ drive │ allocation │ retention │ template │ + ╞═══════╪══════════╪════════════╪═══════════╪══════════╡ + │ daily │ mydrive │ daily │ 7days │ │ + └───────┴──────────┴────────────┴───────────┴──────────┘ Tape Jobs @@ -495,20 +510,40 @@ software can uniquely identify the tape too. For a standalone drive, manually insert the new tape cartidge into the drive and run:: - # proxmox-tape label --changer-id --drive + # proxmox-tape label --changer-id [--pool ] + +You may omit the ``--pool`` argument to allow the tape to be used by any pool. .. Note:: For safety reasons, this command fails if the tape contain any data. If you want to overwrite it anways, erase the tape first. You can verify success by reading back the label:: - # proxmox-tape read-label --drive + # proxmox-tape read-label + ┌─────────────────┬──────────────────────────────────────┐ + │ Name │ Value │ + ╞═════════════════╪══════════════════════════════════════╡ + │ changer-id │ vtape1 │ + ├─────────────────┼──────────────────────────────────────┤ + │ uuid │ 7f42c4dd-9626-4d89-9f2b-c7bc6da7d533 │ + ├─────────────────┼──────────────────────────────────────┤ + │ ctime │ Wed Jan 6 09:07:51 2021 │ + ├─────────────────┼──────────────────────────────────────┤ + │ pool │ daily │ + ├─────────────────┼──────────────────────────────────────┤ + │ media-set-uuid │ 00000000-0000-0000-0000-000000000000 │ + ├─────────────────┼──────────────────────────────────────┤ + │ media-set-ctime │ Wed Jan 6 09:07:51 2021 │ + └─────────────────┴──────────────────────────────────────┘ + +.. NOTE:: The ``media-set-uuid`` using all zeros indicates an empty + tape (not used by any media set). If you have a tape library, apply the sticky barcode label to the tape cartridges first. Then load those empty tapes into the library. You can then label all unlabeled tapes with a single command:: - # proxmox-tape barcode-label --drive + # proxmox-tape barcode-label [--pool ] Run Tape Backups diff --git a/src/api2/types/tape/media_pool.rs b/src/api2/types/tape/media_pool.rs index aa6da0cf4..6f6abb488 100644 --- a/src/api2/types/tape/media_pool.rs +++ b/src/api2/types/tape/media_pool.rs @@ -44,7 +44,7 @@ pub const MEDIA_SET_ALLOCATION_POLICY_FORMAT: ApiStringFormat = ApiStringFormat::VerifyFn(|s| { MediaSetPolicy::from_str(s)?; Ok(()) }); pub const MEDIA_SET_ALLOCATION_POLICY_SCHEMA: Schema = StringSchema::new( - "Media set allocation policy.") + "Media set allocation policy ('continue', 'always', or a calendar event).") .format(&MEDIA_SET_ALLOCATION_POLICY_FORMAT) .schema(); @@ -79,7 +79,7 @@ pub const MEDIA_RETENTION_POLICY_FORMAT: ApiStringFormat = ApiStringFormat::VerifyFn(|s| { RetentionPolicy::from_str(s)?; Ok(()) }); pub const MEDIA_RETENTION_POLICY_SCHEMA: Schema = StringSchema::new( - "Media retention policy.") + "Media retention policy ('overwrite', 'keep', or time span).") .format(&MEDIA_RETENTION_POLICY_FORMAT) .schema();