From bc11936e180a00f689c9ea338188a9a8b13e472f Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Fri, 26 Sep 2025 15:41:52 -0400 Subject: [PATCH 01/15] PD-2218 Update Replication UI Ref Added changes based on the way the Advanced Replication Creation button operates, and fixed a few descriptions for screens and settings that needed clarifications. --- .../DataProtection/ReplicationScreensSCALE.md | 33 +++++++++++-------- .../includes/ReplicationIndexContentSCALE.md | 6 ++-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md index 65de470c88..cdb902dbfc 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md +++ b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md @@ -129,6 +129,8 @@ The wizard has two screens: * **When** settings specify when to run the task and how long to retain the replicated snapshots. **Advanced Replication Creation** opens the **Add Replication Task** screen with the same settings found in the wizard and more advanced settings. +If you populate wizard settings and then click **Advanced Replication Creation**, TrueNAS shows you the dialog asking you to confirm you want to leave the screen. +After clicking **Yes** the **Add Replication Task** screen opens but values entered in the wizard are not transfered to the **Add Replication Task** screen. ### What and Where Wizard Screen @@ -265,8 +267,11 @@ If you delete a dataset or zvol on the source, you must manually delete the repl ## Add and Edit Replication Task Screens -**Advanced Replication Creation** opens the **Add Replication Task** screen. Click before or after adding values to any setting on the wizard screens. -The **Edit** icon button opens the **Edit Replication Task** screen. Both screens show the same setting options. +**Advanced Replication Creation** opens the **Add Replication Task** screen. +Values entered in the wizard screens do not carry over to the **Add Replication Task** screen, you must re-enter settings. +When you populate the wizard screen and then click the **Advanced Replication Creation** button, TrueNaS shows the confirmation dialog asking you if you want to leave the wizard screen. After clicking **Yes** the **Add Replication Task** screen opens. + +The **Edit** icon button opens the **Edit Replication Task** screen. The **Add Replication Task** and **Edit Replication Task** screens show the same setting options. ### General and Transport Options Settings @@ -300,14 +305,14 @@ These settings display for all three **Transport** options. {{< truetable >}} | Setting | Description | |---------|-------------| -| **Allow Blocks Larger than 128KB** | Inactive by default, and if the system does not support large block transfers. Allows replication to send large data blocks. The destination system must also support large blocks. This setting cannot be changed after it is enabled and the replication task is created. See [sfs(8)](https://linux.die.net/man/8/zfs) for more information. | +| **Allow Blocks Larger than 128KB** | Selected by default. If the system does not support large block transfers this is not selected by default. Allows replication to send large data blocks. The destination system must also support large blocks. This setting cannot be changed after it is enabled and the replication task is created. See [sfs(8)](https://linux.die.net/man/8/zfs) for more information. | | **Allow Compressed WRITE Records** | Selected by default. If enabled, allows using compressed write records to make the stream more efficient. The destination system must also support compressed write records. See [zfs(8)](https://linux.die.net/man/8/zfs). | {{< /truetable >}} {{< /expand >}} #### Transport Options Settings - SSH Transport Option -These setting options display in addition to the two options displayed when **Transport** is set to **SSH**. +When **Transport** is set to **SSH**, the settings listed below show in addtion to the setting options the **Allow Blocks Larger than 128KB** and **Allow Compressed WRITE Records** options shown when **Transport** is set to **Local**. {{< trueimage src="/images/SCALE/DataProtection/AdvancedAddReplicationTaskGeneralTransportSSH.png" alt="Advanced Add Replication Task SSH Transport" id="Advanced Add Replication Task SSH Transport" >}} @@ -323,7 +328,7 @@ These setting options display in addition to the two options displayed when **Tr #### Transport Options Settings - SSH+NETCAT Transport Option -These setting options display in addition to the two options displayed when **Transport** is set to **SSH+NETCAT**. +When **Transport** is set to **SSH+NETCAT**, the settings listed below show in addtion to the setting options the **Allow Blocks Larger than 128KB** and **Allow Compressed WRITE Records** options shown when **Transport** is set to **Local**. {{< trueimage src="/images/SCALE/DataProtection/AdvancedAddReplicationTaskGeneralTransportSSH+NETCAT.png" alt="Advanced Add Replication Task SSH+NETCAT Transport" id="Advanced Add Replication Task SSH+NETCAT Transport" >}} @@ -342,8 +347,8 @@ These setting options display in addition to the two options displayed when **Tr ### Advanced Source Options -The settings in **Source** specify the location of files you push or pull in the replication task, and the properties applied to the replicated data. -The Source setting options change based on selections made in **Recursive** and **Replicate Specific Snapshots**, and each displays additional setting options. +**Source** settings specify the location of files you push or pull in the replication task, and the properties applied to the replicated data. +Selections made in **Recursive** and **Replicate Specific Snapshots** change the **Source** setting options, and each option shows additional setting options. {{< trueimage src="/images/SCALE/DataProtection/AdvancedAddRepTaskSourceAndDestination.png" alt="Advanced Add Replication Task Source and Destination" id="Advanced Add Replication Task Source and Destination" >}} @@ -364,7 +369,7 @@ The Source setting options change based on selections made in **Recursive** and ### Advanced Destination Options The settings in **Destination** specify the location of files you push or pull in the replication task, and the properties applied to the replicated data. -The destination setting options change based on selections made in **Encryption** and **Snapshot Retention Policy**, which display additional setting options. +Selections made in **Encryption** and **Snapshot Retention Policy** change the destination setting options, and each show additional setting options. {{< trueimage src="/images/SCALE/DataProtection/AdvancedAddReplicationTaskDestinationOptions.png" alt="Advanced Add Replication Task Destination Options" id="Advanced Add Replication Task Destination Options" >}} @@ -376,7 +381,7 @@ The destination setting options change based on selections made in **Encryption* | **Destination Dataset Read-Only Policy** | Select the policy from the dropdown list. Options:
  • **Set** - Select to change all destination datasets to read only after a successful replication.
  • **Require** - Select to stop replication unless all existing destination datasets are read only.
  • **Ignore** - Select to disable checking read only during replication.
  • | | **Encryption** | Select to use encryption when replicating data. For more information on all options, see [Encryption](#encryption-setting-options). | | **Replication from scratch** | Select if the destination system has snapshots, but does not have any data in common with the source snapshot, destroy all data in destination snapshots, and do a full replication. WARNING! Enabling this option can cause data loss or excessive data transfer if the replication is misconfigured. | -| **Snapshot Retention Policy** | Select the policy from the dropdown list to apply when replicated snapshots are deleted from the destination system. Options are **Same as Source**, **Custom**, and **None**. When selecting **Same as Source** use the **Snapshot Lifetime** from the source periodic snapshot task. When selecting **Custom** define a **Snapshot Lifetime** for the destination system. Also displays the **Snapshot Lifetime** and **Unit** options. When selecting **None** never delete snapshots from the destination system. | +| **Snapshot Retention Policy** | Select the policy from the dropdown list to apply when replicated snapshots are deleted from the destination system. Options are:
  • **Same as Source** - When selecting **Same as Source** use the **Snapshot Lifetime** from the source periodic snapshot task.
  • **Custom** - When selecting **Custom** define a **Snapshot Lifetime** for the destination system. Also displays the **Snapshot Lifetime** and **Unit** options.
  • **None** - When selecting **None** never delete snapshots from the destination system.
  • | | **Snapshot Lifetime** | Use to enter a numeric value to work with the measure of time field below to specify how long a snapshot remains on the destination system. | | **Unit** | Select the measure of time from the dropdown list to work with the numeric value in **Snapshot Lifetime**. Options are **Hour(s)**, **Day(s)**, **Week(s)**, **Month(s)**, and **Year(s)**. | {{< /truetable >}} @@ -393,9 +398,9 @@ The snapshot settings below change options displayed based on selections made. | Setting | Description | |---------|-------------| | **Periodic Snapshot Tasks** | Select the snapshot schedule for this replication task from the dropdown list. Select from previously configured periodic snapshot tasks. This replication task must have the same **Recursive** and **Exclude Child Dataset** values as the selected periodic snapshot task. Selecting a periodic snapshot schedule removes the **Schedule** field. | -| **Replicate Specific Snapshots** | Select to only replicate snapshots that match a defined creation time. Selecting this option displays the **By snapshot creation time** field. Select the preset schedule or **Custom** to use the advanced scheduler. | -| **Begin** | Displays after selecting *Hourly* in **By snapshot creation time**. Select a time range for the specific periodic snapshots to replicate, in 15-minute increments. Periodic Snapshots created before this selected time are not included in the replication. | -| **End** | Displays after selecting *Hourly* in **By snapshot creation time**. Select a time range for the specific periodic snapshots to replicate, in 15-minute increments. Periodic Snapshots created after this selected time are not included in the replication. | +| **Replicate Specific Snapshots** | Select to only replicate snapshots that match a defined creation time. Selecting this option shows the **By snapshot creation time** field. Select the preset schedule or **Custom** to use the advanced scheduler. | +| **Begin** | Displays after selecting **Hourly** in **By snapshot creation time**. Select a time range for the specific periodic snapshots to replicate, in 15-minute increments. Periodic Snapshots created before this selected time are not included in the replication. | +| **End** | Displays after selecting **Hourly** in **By snapshot creation time**. Select a time range for the specific periodic snapshots to replicate, in 15-minute increments. Periodic Snapshots created after this selected time are not included in the replication. | | **Also include snapshots with the name** | These radio buttons change the naming schema setting option below it. See [Snapshot Naming](#snapshot-naming-options) in the wizard section for details on this option and the radio buttons. | | **Matching naming schema** | Displays the **Also Include Naming Schema** setting. | | **Matching regular expression** | Displays the **Matching regular expression** setting. | @@ -418,8 +423,8 @@ These schedule setting options are common to both the **Replication Task Wizard* | **Run Automatically** | Select to start this replication task immediately after the linked periodic snapshot task completes. | | **Schedule** | Select to create a replication schedule if not selecting **Run Automatically**. Displays the **Frequency** and **Only Replicate Snapshots Matching Schedule** options. Shows a list of schedule preset options. See **Schedule Presets** below for more info. | | **Frequency** | Displays after selecting **Schedule**. Select a preset schedule or choose **Custom** to use the advanced scheduler. | -| **Begin** | Displays after selecting *Hourly* in **Frequency**. Select the start time for the replication task. | -| **End** | Displays after selecting *Hourly* in **Frequency**. Select the end time for the replication task. A replication that is already in progress can continue to run past this time. | +| **Begin** | Displays after selecting **Hourly** in **Frequency**. Select the start time for the replication task. | +| **End** | Displays after selecting **Hourly** in **Frequency**. Select the end time for the replication task. A replication that is already in progress can continue to run past this time. | | **Only Replicate Snapshots Matching Schedule** | Displays after selecting **Schedule**. Select to use the **Schedule** in place of the **Replicate Specific Snapshots** time frame. The **Schedule** values are read over the **Replicate Specific Snapshots** time frame. | {{< /truetable >}} diff --git a/static/includes/ReplicationIndexContentSCALE.md b/static/includes/ReplicationIndexContentSCALE.md index 513b72ceee..72031ea102 100644 --- a/static/includes/ReplicationIndexContentSCALE.md +++ b/static/includes/ReplicationIndexContentSCALE.md @@ -1,5 +1,5 @@ -Local replication occurs on the same TrueNAS system using different pools or datasets. -Remote replication can occur between your TrueNAS system and another TrueNAS system, or with some other remote server you want to use to store your replicated data. -Local and remote replication can involve encrypted pools or datasets. +Replication from one pool or dataset to another pool or dataset on the TrueNAS system is called local replication. +Replication from the TrueNAS system to another TrueNAS or other backup server is called remote replication. +Both local and remote replication can involve encrypted pools or datasets. From c320b9cb46dea784185dfe0602d406500c63ba4c Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Fri, 26 Sep 2025 15:49:17 -0400 Subject: [PATCH 02/15] PD-2218 Update Language about switching between screens This commit updates the language about switching between the wizard and add task screen to remove duplication. --- .../DataProtection/ReplicationScreensSCALE.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md index cdb902dbfc..c7f1d557f2 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md +++ b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md @@ -268,11 +268,14 @@ If you delete a dataset or zvol on the source, you must manually delete the repl ## Add and Edit Replication Task Screens **Advanced Replication Creation** opens the **Add Replication Task** screen. -Values entered in the wizard screens do not carry over to the **Add Replication Task** screen, you must re-enter settings. -When you populate the wizard screen and then click the **Advanced Replication Creation** button, TrueNaS shows the confirmation dialog asking you if you want to leave the wizard screen. After clicking **Yes** the **Add Replication Task** screen opens. The **Edit** icon button opens the **Edit Replication Task** screen. The **Add Replication Task** and **Edit Replication Task** screens show the same setting options. +The **Add Replication Task** screen shows the **Switch to Wizard** button at the bottom of the screen. + +**Switch to Wizard**, like **Advanced Replication Creation** shows the dialog asking you to confirm you want to leave the screen. After clicking **Yes** the wizard or **Add Replication Task** screen opens. +Settings entered on either screen do not carry over when switching from one screen to the other. + ### General and Transport Options Settings The settings in **General** and **Transport Options** specify the name of the task, the direction of the data transfer, the transport connection type, and method settings for each type. From 71693136cf444773846d2f883b9b5707a27eca5e Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Mon, 29 Sep 2025 12:32:11 -0400 Subject: [PATCH 03/15] PD-2218 Replication Updates initial changes --- .../DataProtection/Replication/_index.md | 3 +- .../DataProtection/ReplicationScreensSCALE.md | 4 +- static/includes/BasicReplicationProcess.md | 72 ++++++++++++++----- 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md b/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md index 7b88f34457..2b164b3188 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md @@ -20,8 +20,7 @@ When properly configured and scheduled, replication takes regular snapshots of s ## Setting Up a Simple Replication Task Overview -This section provides a simple overview of setting up a replication task regardless of the type of replication, local or remote. -It also covers the related steps to take prior to configuring a replication task. +This overview provides instructions what to do before you begin and how to set up a simple local or remote replication task. {{< include file="/static/includes/BasicReplicationProcess.md" >}} diff --git a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md index c7f1d557f2..e9ecc1ffa8 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md +++ b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md @@ -290,8 +290,8 @@ All three **Transport** field options share the two settings displayed for **Loc |---------|-------------| | **Name** | (Required) Enter a descriptive name for the replication. | | **Direction** | Select the direction for the replication from the dropdown list. **Push** sends snapshots to a destination system. **Pull** connects to a remote system and retrieves snapshots matching the value specified in **Naming Schema**. | -| **Transport** | Select the method of connecting to a remote system for exchanging data from the dropdown list. Options:
  • **SSH** - Default option that is supported by most systems. It requires a previously created SSH connection on the system.
  • **SSH+NETCAT** - Uses SSH to establish a connection to the destination system, then uses [py-libzfs](https://github.com/truenas/py-libzfs) to send an unencrypted data stream for higher transfer speeds. This only works when replicating to a FreeNSAS, TrueNAS, or other systems with py-libzfs installed.
  • **LOCAL** - Efficiently replicates snapshots to another dataset on the same system without using the network. Removes **Transport Options** SSH setting options from the screen.
  • | -| **Use Sudo For Zfs Commands** | Select if setting up remote replication tasks when logged in as an admin user. | +| **Transport** | Select the method of connecting to a remote system for exchanging data from the dropdown list. Options:
  • **SSH** - Default option that is supported by most systems, but does not achieve great performance. Transfers the snapshot via an SSH connection. It requires a previously created SSH connection on the system.
  • **SSH+NETCAT** - Uses SSH to establish a connection to the destination system, then uses [py-libzfs](https://github.com/truenas/py-libzfs) to send an unencrypted data stream for higher data transfer speeds. This can only be used in trusted networks and requires a port to be open on the NETCAT active side. This only works when replicating to a FreeNSAS, TrueNAS, or other systems with py-libzfs installed.
  • **LOCAL** - Efficiently replicates snapshots to another dataset on the same system without using the network. Removes **Transport Options** SSH setting options from the screen.
  • | +| **Use Sudo For Zfs Commands** | Select if setting up remote replication tasks when logged in as an admin user. Controls whether the user used for SSH/SSH+NETCAT replication have passwordless sudo enabled to execute zfs commands on the remote host. If not selected, `zfs allow` must be used to grant non-user permissions to perform ZFS tasks. Mounting ZFS file systems by non-root is notpossible due to Linux restrictions. | | **Number of retries for failed replications** | Enter the number of times the replication is attempted before stopping and marking the task as failed. | | **Logging Level** | Select the level of message verbosity in the replication task log from the dropdown list. Options are **Default**, **Debug**, **Info**, **Warning**, and **Error**. | | **Enabled** | Select to enable the replication schedule. | diff --git a/static/includes/BasicReplicationProcess.md b/static/includes/BasicReplicationProcess.md index ca1c44c9fa..35ee44016e 100644 --- a/static/includes/BasicReplicationProcess.md +++ b/static/includes/BasicReplicationProcess.md @@ -1,29 +1,69 @@ -### Prerequisites -Before setting up a replication task, you must configure an [admin user]({{< ref "ManageLocalUsersSCALE" >}}) with the **Home Directory** set to something other than **/var/empty**. -Ensure the account configuration has **SSH password login enabled** set. -**Allow all sudo commands with no password** must also be enabled to enable SSH+NETCAT remote replication. - -Remote replication requires setting up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. - -Verify the SSH service settings to ensure **Allow Password Authentication** selected to enable these capabilities. -Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. - -Replication tasks typically require a configured and active [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}). ### Typical Replication Configuration Process -1. Set up the data storage for where you want to save replicated snapshots. +Setting options change based on the source selections. Replicating to or from a local source does not require an SSH connection. + +1. Set up the data storage for replicated snapshots. + TrueNAS does not allow you to create a new dataset using the file browser in the replication wizard and task configuration screen. Use the file browser to select a dataset configured on the system to store replicated data before you add the task. + + The destination settings allow you to specify a directory in a dataset where you want to send data. -2. Make sure the admin user is correctly configured. +2. Make sure the administration user assoicated with the replictation task is correctly configured. 3. Create a periodic snapshot task of the storage locations to back up. + TrueNAS typically creates a periodic snapshot task right before it performs the replication task if one is not already created for the task. 4. Create an SSH connection between the local TrueNAS system and the remote system for remote replication tasks. Local replication does not require an SSH connection. - You can do this from either **Credentials > Backup Credentials > SSH Connection** and clicking **Add** or from the **Replication Task Wizard** using the **Generate New** option in the settings for the remote system. -5. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard** where you specify the settings for the replication task. + You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. + If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. + +5. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. + + If you want to configure a replication task using advanced setting options on the **Add Replication Task** screen, click **Advanced Replication Creation** before entering settings in the replication wizard. + Settings do not carry over from the wizard to the advanced task creation screen, and TrueNAS shows the dialog where you must confirm you want to leave the wizard screen before it opens. + Immediately switching to the advanced screen does not show the confirmation dialog, and you do not have to enter your settings again. + +### Before You Begin Remote Relication + +When setting up remote replication: + +1. Set up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. + + To configure an SSH connection you need the IP address or host name for the remote system, and the administration user name and credentials. + You can configure the SSH connection while configuring the replication task, but using the **Credentials > Backup Credentials > SSH Connection** option to add a new connection between the local and remote system allows you to properly configure the administration user associated with the task before you add the replication task. + If not properly configured, TrueNAS shows error messages stating what the issue is preventing you from continuing. + + Using the **Add SSH Connection** screen creates the connection and keypair. + You can obtain the public key from the keypair screen to copy/paste into the admin user on both the local and remote systems before you open the replication wizard. + +2. Create a home directory for the administration user on the local and remote systems. + + Add a home directory for the administration user on both systems. **Home Directory** must be set to something other than **/var/empty**. + See [Managing Users]({{< ref "ManageUsersSCALE" >}}) for more information on home directories, SSH access, and sudo commands. + +3. Update the user settings to to allow SSH access, add the public key, and allow sudo commands. + + Verify the account configuration has **SSH Access** selected. + If not, edit the user, select this option, and then copy/paste the public key for the SSH connection in the **Public SSH Key** field. + + Click on **Sudo Commands** and select **Allow all sudo commands with no password** to enable it. + + Save changes. + +4. Check the **SSH Service** settings. Go to **System > Services > SSH** and click edit. + Ensure **Allow Password Authentication** selected to enable these capabilities. Save any changes. + + Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. + +5. Add the dataset you want to use to store replicated data (snapshots). + TrueNAS allows you to create a directory within an existing dataset but does not allow you to create the dataset. + +Replication tasks typically require a configured and active [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}). + - Setting options change based on the source selections. Replicating to or from a local source does not require an SSH connection. \ No newline at end of file +[EACCES] NoValidConnectionsError(None, 'Unable to connect to port 22 on 10.220.0.50') +Destination is required \ No newline at end of file From 143f805a47b82d28d4531147c6dddc7bf67f68ed Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Mon, 29 Sep 2025 15:23:12 -0400 Subject: [PATCH 04/15] PD-2218 Update UI ref and main replication tutorial index This commit updates the ReplicationScreensSCALE.md article with new or changed definitions, and updates the BasicReplicationProcess.md snippet by breaking the local and remote overviews into individual sections, and updates each step to reflect the current processes --- .../DataProtection/Replication/_index.md | 6 -- static/includes/BasicReplicationProcess.md | 69 +++++++++++-------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md b/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md index 2b164b3188..d1356ba452 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/_index.md @@ -16,12 +16,6 @@ keywords: TrueNAS replication allows users to create one-time or regularly scheduled snapshots of data stored in pools, datasets or zvols on their TrueNAS system as a way to back up stored data. When properly configured and scheduled, replication takes regular snapshots of storage pools or datasets and saves them in the destination location either on the same system or a different system. -{{< include file="/static/includes/ReplicationIndexContentSCALE.md" >}} - -## Setting Up a Simple Replication Task Overview - -This overview provides instructions what to do before you begin and how to set up a simple local or remote replication task. - {{< include file="/static/includes/BasicReplicationProcess.md" >}}
    diff --git a/static/includes/BasicReplicationProcess.md b/static/includes/BasicReplicationProcess.md index 35ee44016e..2580ddffbd 100644 --- a/static/includes/BasicReplicationProcess.md +++ b/static/includes/BasicReplicationProcess.md @@ -1,69 +1,78 @@ +## Setting Up a Simple Replication Task Overview +{{< include file="/static/includes/ReplicationIndexContentSCALE.md" >}} -### Typical Replication Configuration Process +The sections below provide overviews on what to do before you begin configuring a replication task. -Setting options change based on the source selections. Replicating to or from a local source does not require an SSH connection. +### Local Replication Configuration Process -1. Set up the data storage for replicated snapshots. - TrueNAS does not allow you to create a new dataset using the file browser in the replication wizard and task configuration screen. Use the file browser to select a dataset configured on the system to store replicated data before you add the task. - - The destination settings allow you to specify a directory in a dataset where you want to send data. +Local replication does not require the admin user to have SSH access, home directory, or sudo command permissions. +Setting options change based on the source and destination selections. Replicating to or from a local source does not require an SSH connection. -2. Make sure the administration user assoicated with the replictation task is correctly configured. +1. Set up the data storage for replicated snapshots. Go to **Datasets** to add a dataset to store the replicated data (snapshots). + TrueNAS does not allow you to create a new dataset using the **Source** file browser in the replication wizard or the **Add Replication Task** configuration screen. Use the file browser to select the existing dataset on the system where you want to store replicated data. + + The **Destination** file browser allows you to specify (create) a directory in an existing dataset on a local or remote system, but you cannot create a directory for a dataset selected in the **Source** file browser. -3. Create a periodic snapshot task of the storage locations to back up. +3. Create a [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}) of the storage locations to back up. TrueNAS typically creates a periodic snapshot task right before it performs the replication task if one is not already created for the task. + You might need to refresh the screen cache to see the task listed in the **Periodic Snapshot Task** widget. -4. Create an SSH connection between the local TrueNAS system and the remote system for remote replication tasks. - Local replication does not require an SSH connection. - - You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. - If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. - -5. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. +4. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. If you want to configure a replication task using advanced setting options on the **Add Replication Task** screen, click **Advanced Replication Creation** before entering settings in the replication wizard. Settings do not carry over from the wizard to the advanced task creation screen, and TrueNAS shows the dialog where you must confirm you want to leave the wizard screen before it opens. Immediately switching to the advanced screen does not show the confirmation dialog, and you do not have to enter your settings again. -### Before You Begin Remote Relication +### Before You Begin Remote Replication + +Remote replication requires that the admin user on the remote system has SSH access, the SSH connection public key added, a home directory, and sudo command permission. The SSH service must be on when running the periodic snapshot and replication tasks. +Setting options change based on the source and destination selections. When setting up remote replication: 1. Set up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. + You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. + If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. + To configure an SSH connection you need the IP address or host name for the remote system, and the administration user name and credentials. + The administration user on the remote system must have SSH access and SSH service enabled so the local TrueNAS system can communicate with it. + You can configure the SSH connection while configuring the replication task, but using the **Credentials > Backup Credentials > SSH Connection** option to add a new connection between the local and remote system allows you to properly configure the administration user associated with the task before you add the replication task. - If not properly configured, TrueNAS shows error messages stating what the issue is preventing you from continuing. + If not properly configured, TrueNAS shows error messages stating the issue preventing you from continuing. Using the **Add SSH Connection** screen creates the connection and keypair. You can obtain the public key from the keypair screen to copy/paste into the admin user on both the local and remote systems before you open the replication wizard. -2. Create a home directory for the administration user on the local and remote systems. +2. Add a home directory for the admin user on the local and the remote systems. - Add a home directory for the administration user on both systems. **Home Directory** must be set to something other than **/var/empty**. + Select **Create Home Directory**, and use the file broswer select the dataset where you want to create it. + The file bowser allows you to create a new dataset. + The **Home Directory** path must be set to something other than **/var/empty**. See [Managing Users]({{< ref "ManageUsersSCALE" >}}) for more information on home directories, SSH access, and sudo commands. -3. Update the user settings to to allow SSH access, add the public key, and allow sudo commands. +3. Update the admin user settings to to allow SSH access, add the public key for the SSH credential for the remote system, and allow sudo commands. + Go to **Credentials > Backup Credentials > SSH Credential**. + Add a new credential if one to the remote system does not exist, and then edit it to see the public key. + Copy the public key to add to the admin user on the remote system. You can add the credential on the local or remote system. + + On the remote system, go to **Credentials > Users**, select the admin user and click **Edit**. Verify the account configuration has **SSH Access** selected. - If not, edit the user, select this option, and then copy/paste the public key for the SSH connection in the **Public SSH Key** field. + If not, select it, and then paste the public key for the SSH connection in the **Public SSH Key** field. Click on **Sudo Commands** and select **Allow all sudo commands with no password** to enable it. Save changes. -4. Check the **SSH Service** settings. Go to **System > Services > SSH** and click edit. - Ensure **Allow Password Authentication** selected to enable these capabilities. Save any changes. +4. Check the **SSH Service** settings. Go to **System > Services > SSH** and click the edit icon. + Enable **Allow Password Authentication**. Save the change. Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. -5. Add the dataset you want to use to store replicated data (snapshots). - TrueNAS allows you to create a directory within an existing dataset but does not allow you to create the dataset. - -Replication tasks typically require a configured and active [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}). + Enable **Start Automatically** if you want the SSH service to start after a system restart, and then start or restart the service. - -[EACCES] NoValidConnectionsError(None, 'Unable to connect to port 22 on 10.220.0.50') -Destination is required \ No newline at end of file +5. Add the dataset you want to use to store replicated data (snapshots). + TrueNAS allows you to create a directory within an existing dataset but does not allow you to create the dataset in the file browser for the **Destination** location. From 46e5c0654d09ef18f11cddb9efc74666a211911f Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 13:17:40 -0400 Subject: [PATCH 05/15] PD-2218 Create New Snippets Rewrite Remote Replication This commit rewrites the RemoteReplicationSCALE.md tutorial, using new snippets to streamline the process to set up replication tasks. --- .../Replication/RemoteReplicationSCALE.md | 69 +++++++---------- .../DataProtection/ReplicationScreensSCALE.md | 16 ++-- .../Credentials/AddingAHomeDirectory.png | Bin 0 -> 27824 bytes .../DataProtection/AddNewSSHConnection.png | Bin 0 -> 48202 bytes static/includes/BasicReplicationProcess.md | 73 +----------------- .../ReplicationConfigNewSSHConnection.md | 20 +++-- .../ReplicationLocalBeforeYouBegin.md | 21 +++++ .../ReplicationRemoteBeforeYouBegin.md | 57 ++++++++++++++ .../ReplicationSSHTransferSecurity.md | 3 +- .../ReplicationScheduleAndRetentionSteps.md | 36 ++++----- .../includes/ReplicationWizardSteps1and2.md | 26 +++++++ .../includes/ReplicationWizardSteps4thru6.md | 22 ++++++ 12 files changed, 191 insertions(+), 152 deletions(-) create mode 100644 static/images/SCALE/Credentials/AddingAHomeDirectory.png create mode 100644 static/images/SCALE/DataProtection/AddNewSSHConnection.png create mode 100644 static/includes/ReplicationLocalBeforeYouBegin.md create mode 100644 static/includes/ReplicationRemoteBeforeYouBegin.md create mode 100644 static/includes/ReplicationWizardSteps1and2.md create mode 100644 static/includes/ReplicationWizardSteps4thru6.md diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md index d9cec77711..9895b8ed4f 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md @@ -14,76 +14,59 @@ keywords: --- -## Using Remote Replication -TrueNAS replication allows users to create one-time or regularly scheduled ZFS snapshots of data stored in pools, datasets, or zvols on their system as a way to back up stored data. -When properly configured and scheduled, remote replication takes regular snapshots of storage pools or datasets and saves them in the destination location on another system. - -Remote replication occurs between an originating TrueNAS system and a destination TrueNAS system with replicated snapshots. +Remote replication backs up data store on a local originating TrueNAS system to a second remote destination TrueNAS system. +TrueNAS allows scheduling a one-time or regularly scheduled ZFS snapshot of data stored in pools, datasets, or zvols, and saves them in another system. With the implementation of the administration user and role-based permissions, setting up replication tasks as an admin user has a few differences from those set up when logged in as the root user. Setting up remote replication when logged in as the admin user requires selecting **Use Sudo For ZFS Commands**. {{< include file="/static/includes/ReplicationIntroSCALE.md" >}} -Remote replication requires setting up an SSH connection in TrueNAS before creating a remote replication task. - -## Setting Up a Simple Replication Task Overview -This section provides a simple overview of setting up a replication task regardless of the type of replication, local or remote. -It also covers the related steps you should take before configuring a replication task. +{{< include file="/static/includes/ReplicationRemoteBeforeYouBegin.md" >}} -{{< include file="/static/includes/BasicReplicationProcess.md" >}} +To configure the remote replication task, follow the instructions in the section below. ## Creating a Remote Replication Task -To streamline creating simple replication tasks use the **Replication Task Wizard** to create and copy ZFS snapshots to another system. + +Using the **Replication Task Wizard** to create and copy ZFS snapshots to another system, which streamlines creating simple replication tasks. The wizard assists with creating a new SSH connection and automatically creates a periodic snapshot task for sources that have no existing snapshots. -If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list to load the configuration settings for that task into the wizard, and then make changes such as assigning it a different destination, schedule, or retention lifetime, etc. -Saving changes to the configuration creates a new replication task without altering the task you loaded into the wizard. +If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list. +This loads the configuration settings for that task into the wizard, where you can make changes such as assigning it a different destination, setting a new schedule, or retention lifetime, etc. +Saving changes to the configuration creates a new replication task without altering the task originally loaded into the wizard. This saves some time when creating multiple replication tasks between the same two systems. -{{< include file="/static/includes/ReplicationCreateDatasetAndAdminHomeDirSteps.md" >}} +{{< include file="/static/includes/ReplicationWizardSteps1and2.md" >}} -3. Go to **Data Protection** and click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard**. Configure the following settings: +3. Configure the following settings for remote replicaiton after selecting **On a Different System** in either **Source Location** or **Destination Location**: {{< trueimage src="/images/SCALE/DataProtection/CreateRemoteReplicationTask.png" alt="New Remote Replication Task" id="New Remote Replication Task" >}} {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} - a. Select either **On this System** or **On a Different System** on the **Source Location** dropdown list. - If your source is a remote system, select **On a Different System**. The **Destination Location** automatically changes to **On this System**. - If your source is the local TrueNAS system, you must select **On a Different System** from the **Destination Location** dropdown list to do remote replication. - - TrueNAS shows the number of snapshots available for replication. + a. Select an existing SSH connection from the dropdown list or select **Add New** to open the **[New SSH Connection](#configuring-a-new-ssh-connection)** screen. + If you created the SSH connection in the section above, select it. + When adding a new connection, if there are other configuration issues, such as the user not correctly set up, TrueNAS shows errors indicating what the issue is. + Exit the replication wizard to correct issues and then return to begin the task configuration again. - b. Select an existing SSH connection to the remote system, or select **Create New** to open the **[New SSH Connection](#configuring-a-new-ssh-connection)** configuration screen. + After completing the replication wizard task creation where you add a new SSH connection in the wizard, return to the remote system user configuration to add the new public key for the SSH connection to the admin user configuration. - c. Browse to the source pool/dataset(s), then click on the dataset(s) to populate the **Source** with the path. - You can select multiple sources or manually type the names into the **Source** field. - Selecting **Recursive** replicates all snapshots contained within the selected source dataset snapshots. + b. Use the file browser to browse and select the parent dataset with the data to replication. Clicking on the dataset(s) populates the path. + + When setting up the **Source**, you can select multiple sources or manually type the names into the **Source** field. - d. Repeat to populate the **Destination** field. + When setting up the **Destination**, the **Destination** path allows adding a directory/dataset by entering /name, where *rname* is the name of a directory or dataset. The source path does not allow adding a new dataset/directory. You cannot use zvols as a remote replication destination. Add a name to the end of the path to create a new dataset in that location. + + c. Repeat the preceding steps to populate which ever location (source or destination) is not specified. - e. Select **Use Sudo for ZFS Commands**. Only displays when logged in as the admin user (or the name of the admin user). - This removes the need to issue the cli `zfs allow` command in Shell on the remote system. - When the dialog displays, click **Use Sudo for ZFS Commands**. If you close this dialog, select the option on the **Add Replication Task** wizard screen. + d. Select **Use Sudo for ZFS Commands**. + A dialog opens prompting you to add this capability. Selecting this removes the need to issue the cli `zfs allow` command in Shell on the remote system. + Click **Use Sudo for ZFS Commands**. If you click away or the dialog closes before clicking this option, you can select this option on the wizard screen. {{< trueimage src="/images/SCALE/DataProtection/UseSudoForZFSCommandsDialog.png" alt="Select Use Sudo for ZFS Commands" id="Select Use Sudo for ZFS Commands" >}} - f. Select **Replicate Custom Snapshots**, then leave the default value in **Naming Schema**. - If you know how to enter the schema you want, enter it in **Naming Schema**. - Remote sources require entering a snapshot naming schema to identify the snapshots to replicate. - A naming schema is a pattern of naming custom snapshots you want to replicate. - Enter the name and [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M strings that match the snapshots to include in the replication. Separate entries by pressing Enter. The number of snapshots matching the patterns display. - - Selecting **Matching regular expression** does not automatically destroy snapshots where selecting **Matching naming schema** does. - If using regular expression, the snapshots on the destination host are not automatically destroyed if they are also destroyed on the source host due to snapshot lifetime. - Snapshots on the destination host display as "Will not be destroyed automatically" and do not display with a retention period. - Use naming schema for these. - - g. (Optional) Enter a name for the snapshot in **Task Name**. - TrueNAS populates this field with a default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in the destination dataset a challenge. - To make it easier to find the snapshot, give it a name that is easy for you to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. +{{< include file="/static/includes/ReplicationWizardSteps4thru6.md" >}} {{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} diff --git a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md index e9ecc1ffa8..b62b55c86c 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md +++ b/content/SCALE/SCALEUIReference/DataProtection/ReplicationScreensSCALE.md @@ -169,7 +169,7 @@ Setting **Source Location** to **On This System** and **Destination Location** t | **Replicate Custom Snapshots** | Shows after setting **Source Location** to **On this System**. Select to replicate snapshots that are not created by an automated snapshot task. After selecting, it shows the **Also include snapshots with the name** setting options. This setting requires setting a naming schema for the custom snapshots through one of the two methods: **Naming Schema** or **Snapshot Name Regular Expression**. | | **Also include snapshots with the name** | Select the option to set the snapshot naming pattern as either a naming schema or regular expression. Options:
  • **Naming Schema** and **Snapshot Name Regular Expression**. | | **Naming Schema** | Shows after selecting **Naming Schema** under **Also include snapshots with the name**. Enter the pattern of naming custom snapshots to replicate. Enter the name and [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M strings that match the snapshots to include in the replication. Naming schema must include **%Y**, **%m**, **%d**, **%H** and **%M**. Separate entries by pressing Enter. The number of snapshots matching the patterns displayed on the screen. | -| **Snapshot Name Regular Expression** | Shows after selecting **Snapshot Name Regular Expression** under **Also include snapshots with the name**. Enter the regular expression that the replicated snapshot(s) should match. This option replicates all snapshots with names matching the specified regular expression. Performance on systems with large numbers of snapshots is lower as this process reads snapshot metadata to determine snapshot creation order. Naming of regular expressions include name followed this pattern, *"auto-[0-9-]+|manual-[0-9]+"* | +| **Snapshot Name Regular Expression** | Shows after selecting **Snapshot Name Regular Expression** under **Also include snapshots with the name**. Enter the regular expression that the replicated snapshot(s) should match. This option replicates all snapshots with names matching the specified regular expression. Performance on systems with large numbers of snapshots is lower as this process reads snapshot metadata to determine snapshot creation order. Naming of regular expressions include name followed this pattern, auto-[0-9-]+\|manual-[0-9]+. | | **SSH Transfer Security** | Shows after selecting **Replicate Custom Snapshots**. Applies data transfer security. Shows two options: **Encryption (more secure, but slower)** and **No Encryption (less secure, but faster)**. The connection is authenticated with SSH. Encryption is recommended, but can be disabled for increased speed on secure networks. | | **Encryption** | Select to apply an extra layer of encryption on the data transfer when replicating data. For more information on all options, see [Encryption](#encryption-setting-options) below. | | **Task Name** | Shows the name the system adds from the source and destination options or enter a different name for this replication configuration to overwrite the automatically populated task name. By default, the system populates **Task Name** with the source-destination names selected or loaded by selecting a task in **Load Previous Replication Tasks**. The system prompts you to change the name if a task uses the name. Changing the name can be as simple as adding an iteration number, such as *2* or *3*, to the default name. | @@ -361,9 +361,9 @@ Selections made in **Recursive** and **Replicate Specific Snapshots** change the |---------|-------------| | **Source** | (Required) Enter or use arrow_right to the left of the **/mnt** folder and at each dataset to expand the dataset tree to browse to the dataset location that has snapshots to replicate. Click on the dataset or directory name, folder icon, or checkbox to select the dataset or directory. To enter multiple datasets, enter a comma (,) after each path in the **Source** field and then select another dataset. Click the arrow_drop_down at the **/mnt** to collapse the dataset tree. | | **Recursive** | Select to replicate all child dataset snapshots. When selected, **Exclude Child Datasets** displays. | -| **Exclude Child Datasets** | Displays after selecting **Recursive**. Enter the specific child dataset snapshots from the replication. Separate each entry by pressing Enter. | -| **Include Dataset Properties** | Select to include ZFS dataset properties with the replicated snapshots. For more information on ZFS dataset properties see [ZFS manpages](https://linux.die.net/man/8/zfs). | -| **Full Filesystem Replication** | Select to completely replicate the selected dataset. The target dataset gets all the properties of the source dataset, child datasets, clones, and snapshots that match the specified naming schema. Hides the **Recursive** and **Include Dataset Properties** options. | +| **Exclude Child Datasets** | Displays after selecting **Recursive**. Enter the specific child dataset snapshots to exclude from the replication. Separate each entry by pressing Enter. | +| **Include Dataset Properties** | Select to include ZFS dataset properties with the replicated snapshots. Shows additional settings: **Properties Overide** and **Properties Exclude**. For more information on ZFS dataset properties see [ZFS manpages](https://linux.die.net/man/8/zfs). | +| **Full Filesystem Replication** | Select to completely replicate the selected dataset. The target dataset gets all the properties of the source dataset, child datasets, clones, and snapshots that match the specified naming schema. Hides the **Recursive** and **Include Dataset Properties** options, and shows **Properties Override** and **Properties Exclude**. Set **Snapshot Name Regular Expression** to **\.*** to replicate all snapshots. | | **Properties Override** | Enter properties to replace existing dataset properties within the replicated files. | | **Properties Exclude** | Enter any existing dataset properties to remove from the replicated files. | {{< /truetable >}} @@ -407,9 +407,9 @@ The snapshot settings below change options displayed based on selections made. | **Also include snapshots with the name** | These radio buttons change the naming schema setting option below it. See [Snapshot Naming](#snapshot-naming-options) in the wizard section for details on this option and the radio buttons. | | **Matching naming schema** | Displays the **Also Include Naming Schema** setting. | | **Matching regular expression** | Displays the **Matching regular expression** setting. | -| **Also Include Naming Schema** | Displays after selecting the **Matching naming schema** radio button. Enter the pattern of naming custom snapshots to include in the replication with the periodic snapshot schedule. Enter the [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) strings that match the snapshots to include in the replication. When a periodic snapshot is not linked to the replication, enter the naming schema for manually created snapshots. Has the same %Y, %m, %d, %H, and %M string requirements as the **Naming Schema** in a **Add Periodic Snapshot Task**. Separate entries by pressing Enter. | -| **Matching regular expression** | Displays after selecting the **Matching regular expression** radio button. Enter the regular expression snapshot that should match. Using this option replicates all snapshots with names matching the specified regular expression. This process reads snapshot metadata to determine the snapshot creation order. This slows regular performance on the systems with a large number of snapshots. | -| **Save Pending Snapshots** | Select to prevent source system snapshots that have failed replication from being automatically removed by the **Snapshot Retention Policy**. | +| **Also Include Naming Schema** | Displays after selecting **Matching naming schema**. Enter the pattern of naming custom snapshots to include in the replication with the periodic snapshot schedule. Enter the [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) strings that match the snapshots to include in the replication. When a periodic snapshot is not linked to the replication, enter the naming schema for manually created snapshots. Has the same %Y, %m, %d, %H, and %M string requirements as the **Naming Schema** in a **Add Periodic Snapshot Task**. Separate entries by pressing Enter. | +| **Matching regular expression** | Displays after selecting **Matching regular expression**. Replicates all snapshots that match the specified regular expression. This process reads snapshot metadata to determine the snapshot creation order. This slows regular performance on the systems with a large number of snapshots. | +| **Save Pending Snapshots** | Prevents source system snapshots that have failed replication from being automatically removed by the **Snapshot Retention Policy**. | {{< /truetable >}} {{< /expand >}} @@ -425,7 +425,7 @@ These schedule setting options are common to both the **Replication Task Wizard* |---------|-------------| | **Run Automatically** | Select to start this replication task immediately after the linked periodic snapshot task completes. | | **Schedule** | Select to create a replication schedule if not selecting **Run Automatically**. Displays the **Frequency** and **Only Replicate Snapshots Matching Schedule** options. Shows a list of schedule preset options. See **Schedule Presets** below for more info. | -| **Frequency** | Displays after selecting **Schedule**. Select a preset schedule or choose **Custom** to use the advanced scheduler. | +| **Frequency** | Displays after selecting **Schedule**. Select a preset schedule or choose **Custom** to use the advanced scheduler and show the **Begin** and **End** options. | | **Begin** | Displays after selecting **Hourly** in **Frequency**. Select the start time for the replication task. | | **End** | Displays after selecting **Hourly** in **Frequency**. Select the end time for the replication task. A replication that is already in progress can continue to run past this time. | | **Only Replicate Snapshots Matching Schedule** | Displays after selecting **Schedule**. Select to use the **Schedule** in place of the **Replicate Specific Snapshots** time frame. The **Schedule** values are read over the **Replicate Specific Snapshots** time frame. | diff --git a/static/images/SCALE/Credentials/AddingAHomeDirectory.png b/static/images/SCALE/Credentials/AddingAHomeDirectory.png new file mode 100644 index 0000000000000000000000000000000000000000..d875aa774ef1d52d71de5289f371a1eeb7aa14cb GIT binary patch literal 27824 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�?!-1STk*r->+b12N@BXyI)Me07?)18#0c& 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 Yb2{F<>^Mt2o1)DAbpFgZ+Z8+i2_|eCw*UYD literal 0 HcmV?d00001 diff --git a/static/images/SCALE/DataProtection/AddNewSSHConnection.png b/static/images/SCALE/DataProtection/AddNewSSHConnection.png new file mode 100644 index 0000000000000000000000000000000000000000..f7486db253ddd48392680199f65e6403d4cf9f4b GIT binary patch literal 48202 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 The sections below provide overviews on what to do before you begin configuring a replication task. -### Local Replication Configuration Process - -Local replication does not require the admin user to have SSH access, home directory, or sudo command permissions. -Setting options change based on the source and destination selections. Replicating to or from a local source does not require an SSH connection. - -1. Set up the data storage for replicated snapshots. Go to **Datasets** to add a dataset to store the replicated data (snapshots). - TrueNAS does not allow you to create a new dataset using the **Source** file browser in the replication wizard or the **Add Replication Task** configuration screen. Use the file browser to select the existing dataset on the system where you want to store replicated data. - - The **Destination** file browser allows you to specify (create) a directory in an existing dataset on a local or remote system, but you cannot create a directory for a dataset selected in the **Source** file browser. - -3. Create a [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}) of the storage locations to back up. - TrueNAS typically creates a periodic snapshot task right before it performs the replication task if one is not already created for the task. - You might need to refresh the screen cache to see the task listed in the **Periodic Snapshot Task** widget. - -4. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. - - If you want to configure a replication task using advanced setting options on the **Add Replication Task** screen, click **Advanced Replication Creation** before entering settings in the replication wizard. - Settings do not carry over from the wizard to the advanced task creation screen, and TrueNAS shows the dialog where you must confirm you want to leave the wizard screen before it opens. - Immediately switching to the advanced screen does not show the confirmation dialog, and you do not have to enter your settings again. - -### Before You Begin Remote Replication - -Remote replication requires that the admin user on the remote system has SSH access, the SSH connection public key added, a home directory, and sudo command permission. The SSH service must be on when running the periodic snapshot and replication tasks. -Setting options change based on the source and destination selections. - -When setting up remote replication: - -1. Set up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. - - You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. - If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. - - To configure an SSH connection you need the IP address or host name for the remote system, and the administration user name and credentials. - The administration user on the remote system must have SSH access and SSH service enabled so the local TrueNAS system can communicate with it. - - You can configure the SSH connection while configuring the replication task, but using the **Credentials > Backup Credentials > SSH Connection** option to add a new connection between the local and remote system allows you to properly configure the administration user associated with the task before you add the replication task. - If not properly configured, TrueNAS shows error messages stating the issue preventing you from continuing. - - Using the **Add SSH Connection** screen creates the connection and keypair. - You can obtain the public key from the keypair screen to copy/paste into the admin user on both the local and remote systems before you open the replication wizard. - -2. Add a home directory for the admin user on the local and the remote systems. - - Select **Create Home Directory**, and use the file broswer select the dataset where you want to create it. - The file bowser allows you to create a new dataset. - The **Home Directory** path must be set to something other than **/var/empty**. - See [Managing Users]({{< ref "ManageUsersSCALE" >}}) for more information on home directories, SSH access, and sudo commands. - -3. Update the admin user settings to to allow SSH access, add the public key for the SSH credential for the remote system, and allow sudo commands. - - Go to **Credentials > Backup Credentials > SSH Credential**. - Add a new credential if one to the remote system does not exist, and then edit it to see the public key. - Copy the public key to add to the admin user on the remote system. You can add the credential on the local or remote system. - - On the remote system, go to **Credentials > Users**, select the admin user and click **Edit**. - Verify the account configuration has **SSH Access** selected. - If not, select it, and then paste the public key for the SSH connection in the **Public SSH Key** field. - - Click on **Sudo Commands** and select **Allow all sudo commands with no password** to enable it. - - Save changes. - -4. Check the **SSH Service** settings. Go to **System > Services > SSH** and click the edit icon. - Enable **Allow Password Authentication**. Save the change. - - Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. - - Enable **Start Automatically** if you want the SSH service to start after a system restart, and then start or restart the service. +{{< include file="/static/includes/ReplicationLocalBeforeYouBegin.md" >}} -5. Add the dataset you want to use to store replicated data (snapshots). - TrueNAS allows you to create a directory within an existing dataset but does not allow you to create the dataset in the file browser for the **Destination** location. +{{< include file="/static/includes/ReplicationRemoteBeforeYouBegin.md" >}} \ No newline at end of file diff --git a/static/includes/ReplicationConfigNewSSHConnection.md b/static/includes/ReplicationConfigNewSSHConnection.md index 3fea8ab4c9..c71270a781 100644 --- a/static/includes/ReplicationConfigNewSSHConnection.md +++ b/static/includes/ReplicationConfigNewSSHConnection.md @@ -1,29 +1,35 @@ When using a TrueNAS system on a different release, the remote or destination system user is always root. -To configure a new SSH connection from the **Replication Task Wizard**: +To configure a new SSH connection while in the **Replication Task Wizard**: -1. Select **Create New** on the **SSH Connection** dropdown list to open the **New SSH Connection** configuration screen. +1. Select **Add New** on the **SSH Connection** dropdown list to open the **New SSH Connection** configuration screen. 2. Enter a name for the connection. {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectionNameAndMethod.png" alt="New SSH Connection Name and Method" id="New SSH Connection Name and Method" >}} -3. Select the **Setup Method** from the dropdown list. If a TrueNAS system, select **Semi-Automatic**. +3. Select the **Setup Method** from the dropdown list. Leave this set to **Semi-Automatic** for a connection to another TrueNAS system. -4. Enter the URL to the remote TrueNAS in **TrueNAS URL**. +4. Enter the remote TrueNAS host name or IP address as a URL in **TrueNAS URL**. - {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectionAuthetication.png" alt="New SSH Connection Authentication" id="New SSH Connection Authentication" >}} + {{< trueimage src="/images/SCALE/DataProtection/AddNewSSHConnection.png" alt="New SSH Connection Screen" id="New SSH Connection Screen" >}} 5. Enter the administration user (i.e., root or admin) that logs into the remote system with the web UI in **Admin Username**. Enter the password in **Admin Password**. + + If using a TrueNAS 13.0-U6.x system as the remote server, the remote user is always root. + + When using an earlier TrueNAS 22.12.1 system or if you installed TrueNAS as the root user and then created an admin user after initial installation, you must verify the admin user is correctly configured. -6. Enter the administration user (i.e., root or admin) for remote system SSH session. +6. Enter the administration user (i.e., root or *admin*) for remote system SSH session. If you clear root as the the user and type any other name the **Enable passwordless sudo for ZFS commands** option displays. This option does nothing so leave it cleared. 7. Select **Generate New** from the **Private Key** dropdown list. -8. (Optional) Select a cipher from the dropdown list, or enter a new value in seconds for the **Connection Timeout** if you want to change the defaults. +8. (Optional) Enter a new value in seconds for the **Connection Timeout** if you want to change the defaults. 9. Click **Save** to create a new SSH connection and populate the **SSH Connection** field in the **Replication Task Wizard**. + +After creating a new SSH connection, go to **Credentials > Backup Credentials > SSH Connections**, click **Edit** to copy the public key, then edit the remote user configuration by pasting this in the **Public SSH Key** field. \ No newline at end of file diff --git a/static/includes/ReplicationLocalBeforeYouBegin.md b/static/includes/ReplicationLocalBeforeYouBegin.md new file mode 100644 index 0000000000..66bae9f5ec --- /dev/null +++ b/static/includes/ReplicationLocalBeforeYouBegin.md @@ -0,0 +1,21 @@ + + +### Before You Begin Local Replication + +Local replication does not require the admin user to have SSH access, home directory, or sudo command permissions. +Setting options change based on the source and destination selections. Replicating to or from a local source does not require an SSH connection. + +1. Set up the data storage for replicated snapshots. Go to **Datasets** to add a dataset to store the replicated data (snapshots). + TrueNAS does not allow you to create a new dataset using the **Source** file browser in the replication wizard or the **Add Replication Task** configuration screen. Use the file browser to select the existing dataset on the system where you want to store replicated data. + + The **Destination** file browser allows you to specify (create) a directory in an existing dataset on a local or remote system, but you cannot create a directory for a dataset selected in the **Source** file browser. + +2. Create a [periodic snapshot task]({{< ref "PeriodicSnapshotTasksSCALE" >}}) of the storage locations to back up. + TrueNAS typically creates a periodic snapshot task right before it performs the replication task if one is not already created for the task. + You might need to refresh the screen cache to see the task listed in the **Periodic Snapshot Task** widget. + +3. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. + + If you want to configure a replication task using advanced setting options on the **Add Replication Task** screen, click **Advanced Replication Creation** before entering settings in the replication wizard. + Settings do not carry over from the wizard to the advanced task creation screen, and TrueNAS shows the dialog where you must confirm you want to leave the wizard screen before it opens. + Immediately switching to the advanced screen does not show the confirmation dialog, and you do not have to enter your settings again. \ No newline at end of file diff --git a/static/includes/ReplicationRemoteBeforeYouBegin.md b/static/includes/ReplicationRemoteBeforeYouBegin.md new file mode 100644 index 0000000000..fc3c4e1513 --- /dev/null +++ b/static/includes/ReplicationRemoteBeforeYouBegin.md @@ -0,0 +1,57 @@ + + +### Before You Begin Remote Replication + +Remote replication requires that the admin user on the remote system has SSH access, the SSH connection public key added, a home directory, and sudo command permission. The SSH service must be on when running the periodic snapshot and replication tasks. +Setting options change based on the source and destination selections. + +When setting up remote replication: + +1. Set up the data storage for replicated snapshots. On the remote system, go to **Datasets** to add a dataset for the replicated data (snapshots). + + TrueNAS does not allow you to create a new dataset using the **Source** or **Destination** file browsers in the replication wizard or the **Add Replication Task** configuration screen. + After selecting the existing dataset where you want to store replicated data, the **Destination** file browser allows you to specify (create) a directory in an existing dataset on a local or remote system. You cannot create a directory for a dataset selected in the **Source** file browser. + +2. Add a home directory for the admin user on the local and the remote systems. + The **Home Directory** path on the **Add User** or **Edit User** screen must be set to something other than **/var/empty**. + + Click on the **Home Directory** setting to show the options. + Select **Create Home Directory**, then use the file broswer select the dataset where you want to create the home directory. + You can use the file bowser to create a new dataset you need to add one for home directories. + + See [Managing Users]({{< ref "ManageLocalUsersSCALE" >}}) for more information on home directories, SSH access, and sudo commands. + +3. Set up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. + + You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. + If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. + + To configure an SSH connection you need the IP address or host name for the remote system, and the administration user name and credentials. + The administration user on the remote system must have SSH access and SSH service enabled so the local TrueNAS system can communicate with it. + + You can configure the SSH connection while configuring the replication task, but using the **Credentials > Backup Credentials > SSH Connection** option to add a new connection between the local and remote system allows you to properly configure the administration user associated with the task before you add the replication task. + If not properly configured, TrueNAS shows error messages stating the issue preventing you from continuing. + + Using the **Add SSH Connection** screen creates the connection and keypair. + You can obtain the public key from the keypair screen to copy/paste into the admin user on both the local and remote systems before you open the replication wizard. + +4. Update the admin user settings to to allow SSH access, add the public key for the SSH credential for the remote system, and allow sudo commands. + + Go to **Credentials > Backup Credentials > SSH Credential**. + Add a new credential if one to the remote system does not exist, and then edit it to see the public key. + Copy the public key to add to the admin user on the remote system. You can add the credential on the local or remote system. + + On the remote system, go to **Credentials > Users**, select the admin user and click **Edit**. + Verify the account configuration has **SSH Access** selected. + If not, select it, and then paste the public key for the SSH connection in the **Public SSH Key** field. + + Click on **Sudo Commands** and select **Allow all sudo commands with no password** to enable it. + + Save changes. + +5. Check the **SSH Service** settings. Go to **System > Services > SSH** and click the edit icon. + Select **Allow Password Authentication** to enable this function. Save the change. + + Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. + + Enable **Start Automatically** if you want the SSH service to start after a system restart, and then start or restart the service. diff --git a/static/includes/ReplicationSSHTransferSecurity.md b/static/includes/ReplicationSSHTransferSecurity.md index c16b436c85..a1d3aecebf 100644 --- a/static/includes/ReplicationSSHTransferSecurity.md +++ b/static/includes/ReplicationSSHTransferSecurity.md @@ -7,6 +7,7 @@ Using encryption for SSH transfer security is always recommended. In situations where you use two systems within an absolutely secure network for replication, disabling encryption speeds up the transfer. However, the data is completely unprotected from eavesdropping. -Choosing **No Encryption** for the task is less secure but faster. This method uses common port settings but you can override these by switching to the **Advanced Replication Creation** options or by editing the task after creation. +Choosing **No Encryption** for the task is less secure but faster. +This method uses common port settings but you can override these when using the **Advanced Replication Creation** options or by editing the task after creating it in the wizard. {{< trueimage src="/images/SCALE/DataProtection/RepSecurityTaskSCALE.png" alt="Replication Security and Task Name" id="Replication Security and Task Name" >}} diff --git a/static/includes/ReplicationScheduleAndRetentionSteps.md b/static/includes/ReplicationScheduleAndRetentionSteps.md index 7f2632d128..47438f7959 100644 --- a/static/includes/ReplicationScheduleAndRetentionSteps.md +++ b/static/includes/ReplicationScheduleAndRetentionSteps.md @@ -1,36 +1,26 @@ -4. Click **Next** to display the scheduling options. - -5. Select the schedule and snapshot retention life time. - - a. Select **Replication Schedule** to use. Select **Run Once** to set up a replication task you run one time. - Select **Run On a Schedule** then select when from the **Schedule** dropdown list. +7. Select the schedule and snapshot retention life time. + Leave**Replication Schedule** set to **Run On a Schedule** and select the option in the **Schedule** dropdown. + Select **Run Once** to set up a replication task you run one time. + {{< trueimage src="/images/SCALE/DataProtection/CreateReplicationTaskSetSchedule.png" alt="Set Replication Task Schedule" id="Set Replication Task Schedule" >}} - b. Select the **Destination Snapshot Lifetime** radio button option you want to use. - This specifies how long TrueNAS should store copied snapshots in the destination dataset before TrueNAS deletes it. - **Same as Source** is selected by default. - Select **Never Delete** to keep all snapshots until you delete them manually. - Select **Custom** to show two additional settings, then enter the number of the duration you select from the dropdown list. For example, *2 Weeks*. +8. Select the **Destination Snapshot Lifetime** option to specifies how long TrueNAS should store copied snapshots in the destination dataset before TrueNAS deletes it. + **Same as Source** is selected by default. + Select **Never Delete** to keep all snapshots until you delete them manually. + Select **Custom** to show two additional settings, then enter the number of the duration you select from the dropdown list. For example, *2 Weeks*. -6. Click **START REPLICATION**. - A dialog displays if this is the first snapshot taken using the destination dataset. - If TrueNAS does not find a replicated snapshot in the destination dataset to use to create an incremental snapshot, it deletes any existing snapshots found and creates a full copy of the day snapshot to use as a basis for the future scheduled incremental snapshots for this schedule task. - - This operation can delete important data, so ensure you can delete any existing snapshots or back them up in another location. - - {{< trueimage src="/images/SCALE/DataProtection/ReplicationSnapshotConfirmationDialog.png" alt="Local Replication Task Confirmation" id="Local Replication Task Confirmation" >}} +9. Click **Save**. - Click **Confirm**, then **Continue** to add the task to the **Replication Task** widget. - The newly added task shows the status as **PENDING** until it runs on the schedule you set. +The task shows on the **Replication Task** widget with the status as **PENDING**. - {{< trueimage src="/images/SCALE/DataProtection/ReplicationTaskWidgetWithPendingTask.png" alt="Replication Task in Pending State" id="Replication Task in Pending State" >}} +{{< trueimage src="/images/SCALE/DataProtection/ReplicationTaskWidgetWithPendingTask.png" alt="Replication Task in Pending State" id="Replication Task in Pending State" >}} - Select **Run Now** if you want to run the task immediately. +Select **Run Now** if you want to run the task immediately. -To see a log for a task, click the task **State** to open a dialog with the log for that replication task. +Click the task **State** to open a dialog with the log for that replication task. To see the replication snapshots, go to **Datasets**, select the destination dataset on the tree table, then select **Manage Snapshots** on the **Data Protection** widget to see the list of snapshots in that dataset. Click **Show extra columns** to add more information columns to the table such as the date created which can help you locate a specific snapshot or enter part of or the full the name in the search field to narrow the list of snapshots. diff --git a/static/includes/ReplicationWizardSteps1and2.md b/static/includes/ReplicationWizardSteps1and2.md new file mode 100644 index 0000000000..7db9e716df --- /dev/null +++ b/static/includes/ReplicationWizardSteps1and2.md @@ -0,0 +1,26 @@ + + +{{< hint type=important title="Ensure Clean Destination" >}} +Before you begin configuring the replication task, first verify the destination dataset where you plan to store the replication snapshots is free of existing snapshots, or that snapshots with critical data are backed up before you create the task. +{{< /hint >}} + +After completing the basic preparation steps in the section above, go to **Data Protection > Replication** and click **Add** to open the replication wizard. +To configure advanced settings, click **Advanced Replication Creation** to open the **Add Replication Task** screen before you enter any settings in the wizard. +Refer to the [Advanced Replication Tasks]({{< ref "/Scale/ScaleTutorials/DataProtection/Replication/AdvancedReplication/_index.md" >}}) for configuration instructions using the **Add Replication Task** screen. + +On the **What and Where** replication wizard screen: + +1. Select the an existing replication task from the **Load Previous Replication Task** dropdown. + If one does not exist, leave this set to the default, which is the double dashes. + +2. Select the source and destination locations. You can select these in any order. + Local replication sends or receives data from one storage location to another on the same (local) system. + Remote replication sends data to or receives data from a storage location on a different (remote) TruNAS system. + + To setup a local replication in the replication wizard, set both **Source Location** and **Destination Location** to **On this System**. + + To set up a push remote replication in the replication wizard, set the **Source Location** to **On this System** and set **Destiation Location** to **On a Different System**. + To set up a pull remote replication in the replication wizard, set the **Source location** to **On a Different System** and the **Destiation Location** to **On this System**. + + Click on **Source Location** or **Destination Location** to show additional setting options and the file browser. Additional settings shown are based on the selection. + \ No newline at end of file diff --git a/static/includes/ReplicationWizardSteps4thru6.md b/static/includes/ReplicationWizardSteps4thru6.md new file mode 100644 index 0000000000..66c69aae7b --- /dev/null +++ b/static/includes/ReplicationWizardSteps4thru6.md @@ -0,0 +1,22 @@ + + +4. (Optional) Select **Recursive** to replicate all snapshots contained within the parent dataset and any child datasets. + +5. (Optional) Select **Replicate Custom Snapshots**, then leave the default value in **Naming Schema**. + If you know how and want to enter the schema, enter it in **Naming Schema**. + + A snapshot naming schema identifies the snapshots to replicate, and might be required by the remote system. + A naming schema is a string of [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M variables that name custom snapshots you want to replicate. + Separate entries by pressing Enter. The number of snapshots matching the pattern entered show on a dropdown list. + + Selecting **Matching regular expression** does not automatically destroy snapshots where selecting **Matching naming schema** does. + When using regular expression, the snapshots on the destination host are not automatically destroyed when they are destroyed on the source host due to snapshot lifetime. + Snapshots on the destination host display as "Will not be destroyed automatically" and do not display with a retention period. + Use naming schema for these. + +6. (Optional) Accept the default name in **Task Name**, or enter a name of your choosing. + TrueNAS populates this field with a default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in the destination dataset a challenge. + To make it easier to find the snapshot, give it a name that is easy to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. + + Click **Next** to show the scheduling options. + \ No newline at end of file From 9cb85bb3ccade3f74a665a7602c8b1267d1e6845 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 14:26:07 -0400 Subject: [PATCH 06/15] PD-2218 Grammer, Spelling, and Content check This commit includes a grammar/spelling check and makes a few minor changes where needed. --- .../Replication/RemoteReplicationSCALE.md | 28 ++++++++++-------- .../DataProtection/NewSSHConnectionScreen.png | Bin 0 -> 48202 bytes .../SetSourceAndDestiationforRemote.png | Bin 0 -> 33827 bytes .../ReplicationConfigNewSSHConnection.md | 14 ++++----- .../ReplicationLocalBeforeYouBegin.md | 2 +- .../ReplicationRemoteBeforeYouBegin.md | 21 ++++++------- .../ReplicationSSHTransferSecurity.md | 2 +- .../ReplicationScheduleAndRetentionSteps.md | 6 ++-- .../includes/ReplicationWizardSteps1and2.md | 12 ++++---- .../includes/ReplicationWizardSteps4thru6.md | 7 ++--- 10 files changed, 47 insertions(+), 45 deletions(-) create mode 100644 static/images/SCALE/DataProtection/NewSSHConnectionScreen.png create mode 100644 static/images/SCALE/DataProtection/SetSourceAndDestiationforRemote.png diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md index 9895b8ed4f..5d01236fd7 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md @@ -14,7 +14,7 @@ keywords: --- -Remote replication backs up data store on a local originating TrueNAS system to a second remote destination TrueNAS system. +Remote replication backs up data stored on an originating TrueNAS system to a second remote destination TrueNAS system. TrueNAS allows scheduling a one-time or regularly scheduled ZFS snapshot of data stored in pools, datasets, or zvols, and saves them in another system. With the implementation of the administration user and role-based permissions, setting up replication tasks as an admin user has a few differences from those set up when logged in as the root user. @@ -28,8 +28,8 @@ To configure the remote replication task, follow the instructions in the section ## Creating a Remote Replication Task -Using the **Replication Task Wizard** to create and copy ZFS snapshots to another system, which streamlines creating simple replication tasks. -The wizard assists with creating a new SSH connection and automatically creates a periodic snapshot task for sources that have no existing snapshots. +Use the **Replication Task Wizard** to create and copy ZFS snapshots to another system, which streamlines creating simple replication tasks. +After creating the replication task, TrueNAS automatically creates a periodic snapshot task for sources that have no existing snapshots. If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list. This loads the configuration settings for that task into the wizard, where you can make changes such as assigning it a different destination, setting a new schedule, or retention lifetime, etc. @@ -38,34 +38,36 @@ This saves some time when creating multiple replication tasks between the same t {{< include file="/static/includes/ReplicationWizardSteps1and2.md" >}} -3. Configure the following settings for remote replicaiton after selecting **On a Different System** in either **Source Location** or **Destination Location**: +3. Configure the settings for remote replication after selecting **On a Different System** in either **Source Location** or **Destination Location**. - {{< trueimage src="/images/SCALE/DataProtection/CreateRemoteReplicationTask.png" alt="New Remote Replication Task" id="New Remote Replication Task" >}} + {{< trueimage src="/images/SCALE/DataProtection/SetSourceAndDestiationforRemote.png" alt="Set Source and Destination for Remote" id="Set Source and Destination for Remote" >}} {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} a. Select an existing SSH connection from the dropdown list or select **Add New** to open the **[New SSH Connection](#configuring-a-new-ssh-connection)** screen. If you created the SSH connection in the section above, select it. - When adding a new connection, if there are other configuration issues, such as the user not correctly set up, TrueNAS shows errors indicating what the issue is. - Exit the replication wizard to correct issues and then return to begin the task configuration again. - After completing the replication wizard task creation where you add a new SSH connection in the wizard, return to the remote system user configuration to add the new public key for the SSH connection to the admin user configuration. + When adding a new connection in the wizard, if TrueNAS detects other configuration issues, such as the user not correctly set up, an error indicating what the issue is shows in the wizard. + Exit the replication wizard to correct issues, then return to the wizard to begin the task configuration again. - b. Use the file browser to browse and select the parent dataset with the data to replication. Clicking on the dataset(s) populates the path. + After completing the replication wizard task creation, where you added a new SSH connection in the wizard, return to the remote system user configuration to add the new public key for the SSH connection to the admin user configuration. + + b. Use the file browser to browse and select the parent dataset with the data to replicate. Clicking on the dataset(s) populates the path. When setting up the **Source**, you can select multiple sources or manually type the names into the **Source** field. When setting up the **Destination**, the **Destination** path allows adding a directory/dataset by entering /name, where *rname* is the name of a directory or dataset. The source path does not allow adding a new dataset/directory. You cannot use zvols as a remote replication destination. Add a name to the end of the path to create a new dataset in that location. - c. Repeat the preceding steps to populate which ever location (source or destination) is not specified. - - d. Select **Use Sudo for ZFS Commands**. + c. Select **Use Sudo for ZFS Commands**. A dialog opens prompting you to add this capability. Selecting this removes the need to issue the cli `zfs allow` command in Shell on the remote system. - Click **Use Sudo for ZFS Commands**. If you click away or the dialog closes before clicking this option, you can select this option on the wizard screen. + Click **Use Sudo for ZFS Commands**. If the dialog closes before clicking this option, you can select this option on the wizard screen. {{< trueimage src="/images/SCALE/DataProtection/UseSudoForZFSCommandsDialog.png" alt="Select Use Sudo for ZFS Commands" id="Select Use Sudo for ZFS Commands" >}} + d. Enter the settings for the other location (source or destination), which is automatically set to **On This System**. + Browse to select the dataset. + {{< include file="/static/includes/ReplicationWizardSteps4thru6.md" >}} {{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} diff --git a/static/images/SCALE/DataProtection/NewSSHConnectionScreen.png b/static/images/SCALE/DataProtection/NewSSHConnectionScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..f7486db253ddd48392680199f65e6403d4cf9f4b GIT binary patch literal 48202 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 I=+jsK3tmo$bN~PV literal 0 HcmV?d00001 diff --git a/static/includes/ReplicationConfigNewSSHConnection.md b/static/includes/ReplicationConfigNewSSHConnection.md index c71270a781..4fafa405f7 100644 --- a/static/includes/ReplicationConfigNewSSHConnection.md +++ b/static/includes/ReplicationConfigNewSSHConnection.md @@ -3,28 +3,26 @@ When using a TrueNAS system on a different release, the remote or destination sy To configure a new SSH connection while in the **Replication Task Wizard**: -1. Select **Add New** on the **SSH Connection** dropdown list to open the **New SSH Connection** configuration screen. +1. Select **Add New** on the **SSH Connection** dropdown list to open the **New SSH Connection** screen. + + {{< trueimage src="/images/SCALE/DataProtection/AddNewSSHConnection.png" alt="New SSH Connection Screen" id="New SSH Connection Screen" >}} 2. Enter a name for the connection. - {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectionNameAndMethod.png" alt="New SSH Connection Name and Method" id="New SSH Connection Name and Method" >}} - 3. Select the **Setup Method** from the dropdown list. Leave this set to **Semi-Automatic** for a connection to another TrueNAS system. 4. Enter the remote TrueNAS host name or IP address as a URL in **TrueNAS URL**. - {{< trueimage src="/images/SCALE/DataProtection/AddNewSSHConnection.png" alt="New SSH Connection Screen" id="New SSH Connection Screen" >}} - 5. Enter the administration user (i.e., root or admin) that logs into the remote system with the web UI in **Admin Username**. Enter the password in **Admin Password**. If using a TrueNAS 13.0-U6.x system as the remote server, the remote user is always root. - When using an earlier TrueNAS 22.12.1 system or if you installed TrueNAS as the root user and then created an admin user after initial installation, you must verify the admin user is correctly configured. + When using an earlier TrueNAS 22.12.1 system or if you installed TrueNAS as the root user and then created an admin user after initial installation, you must verify that the admin user is correctly configured. -6. Enter the administration user (i.e., root or *admin*) for remote system SSH session. +6. Enter the administration user (i.e., root or *admin*) for the remote system SSH session. If you clear root as the the user and type any other name the **Enable passwordless sudo for ZFS commands** option displays. - This option does nothing so leave it cleared. + This option does nothing, so leave it cleared. 7. Select **Generate New** from the **Private Key** dropdown list. diff --git a/static/includes/ReplicationLocalBeforeYouBegin.md b/static/includes/ReplicationLocalBeforeYouBegin.md index 66bae9f5ec..63a187d4d6 100644 --- a/static/includes/ReplicationLocalBeforeYouBegin.md +++ b/static/includes/ReplicationLocalBeforeYouBegin.md @@ -2,7 +2,7 @@ ### Before You Begin Local Replication -Local replication does not require the admin user to have SSH access, home directory, or sudo command permissions. +Local replication does not require the admin user to have SSH access, a home directory, or sudo command permissions. Setting options change based on the source and destination selections. Replicating to or from a local source does not require an SSH connection. 1. Set up the data storage for replicated snapshots. Go to **Datasets** to add a dataset to store the replicated data (snapshots). diff --git a/static/includes/ReplicationRemoteBeforeYouBegin.md b/static/includes/ReplicationRemoteBeforeYouBegin.md index fc3c4e1513..264fca1092 100644 --- a/static/includes/ReplicationRemoteBeforeYouBegin.md +++ b/static/includes/ReplicationRemoteBeforeYouBegin.md @@ -16,18 +16,19 @@ When setting up remote replication: The **Home Directory** path on the **Add User** or **Edit User** screen must be set to something other than **/var/empty**. Click on the **Home Directory** setting to show the options. - Select **Create Home Directory**, then use the file broswer select the dataset where you want to create the home directory. - You can use the file bowser to create a new dataset you need to add one for home directories. + + {{< trueimage src="/images/SCALE/Credentials/AddingAHomeDirectory.png" alt="Adding A Home Directory" id="Adding A Home Directory" >}} + + Select **Create Home Directory**, then use the file browser to select an existing dataset or use **Create Dataset** after selecting the parent dataset to create a new dataset for home directories. See [Managing Users]({{< ref "ManageLocalUsersSCALE" >}}) for more information on home directories, SSH access, and sudo commands. 3. Set up an [SSH connection]({{< ref "AddSSHConnectionKeyPair" >}}) in TrueNAS before creating a remote replication task. - You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create the SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create a connection to the remote system. - If the administration user is not properly configured, TrueNAS shows error messages indicating the issue that needs to be resolved before you can add the task. + You can go to **Credentials > Backup Credentials > SSH Connection** and click **Add** to create an SSH connection, or select **Generate New** on the **SSH Connection** dropdown in the **Replication Task Wizard** to create an SSH connection to the remote system. - To configure an SSH connection you need the IP address or host name for the remote system, and the administration user name and credentials. - The administration user on the remote system must have SSH access and SSH service enabled so the local TrueNAS system can communicate with it. + To configure an SSH connection, you need the IP address or host name for the remote system, and the administrator username and credentials. + The administrator user on the remote system must have SSH access and the SSH service enabled so the local TrueNAS system can authenticate and communicate with the remote system. You can configure the SSH connection while configuring the replication task, but using the **Credentials > Backup Credentials > SSH Connection** option to add a new connection between the local and remote system allows you to properly configure the administration user associated with the task before you add the replication task. If not properly configured, TrueNAS shows error messages stating the issue preventing you from continuing. @@ -36,12 +37,12 @@ When setting up remote replication: You can obtain the public key from the keypair screen to copy/paste into the admin user on both the local and remote systems before you open the replication wizard. 4. Update the admin user settings to to allow SSH access, add the public key for the SSH credential for the remote system, and allow sudo commands. - + Go to **Credentials > Backup Credentials > SSH Credential**. - Add a new credential if one to the remote system does not exist, and then edit it to see the public key. + Add a new credential to the remote system if one does not exist, and then edit it to see the public key. Copy the public key to add to the admin user on the remote system. You can add the credential on the local or remote system. - On the remote system, go to **Credentials > Users**, select the admin user and click **Edit**. + On the remote system, go to **Credentials > Users**, select the admin user, and click **Edit**. Verify the account configuration has **SSH Access** selected. If not, select it, and then paste the public key for the SSH connection in the **Public SSH Key** field. @@ -52,6 +53,6 @@ When setting up remote replication: 5. Check the **SSH Service** settings. Go to **System > Services > SSH** and click the edit icon. Select **Allow Password Authentication** to enable this function. Save the change. - Incorrect SSH service settings can impact the admin user ability to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. + Incorrect SSH service settings can impact the ability of the admin user to establish an SSH session during replication and require you to obtain and paste a public SSH key into the admin user settings. Enable **Start Automatically** if you want the SSH service to start after a system restart, and then start or restart the service. diff --git a/static/includes/ReplicationSSHTransferSecurity.md b/static/includes/ReplicationSSHTransferSecurity.md index a1d3aecebf..b41cbda33c 100644 --- a/static/includes/ReplicationSSHTransferSecurity.md +++ b/static/includes/ReplicationSSHTransferSecurity.md @@ -1,7 +1,7 @@ {{< hint type=note >}} -Using encryption for SSH transfer security is always recommended. +We always recommend using encryption for SSH transfer security. {{< /hint >}} In situations where you use two systems within an absolutely secure network for replication, disabling encryption speeds up the transfer. diff --git a/static/includes/ReplicationScheduleAndRetentionSteps.md b/static/includes/ReplicationScheduleAndRetentionSteps.md index 47438f7959..fabd3e9eb2 100644 --- a/static/includes/ReplicationScheduleAndRetentionSteps.md +++ b/static/includes/ReplicationScheduleAndRetentionSteps.md @@ -1,13 +1,13 @@ -7. Select the schedule and snapshot retention life time. +7. Select the schedule and snapshot retention lifetime. Leave**Replication Schedule** set to **Run On a Schedule** and select the option in the **Schedule** dropdown. Select **Run Once** to set up a replication task you run one time. {{< trueimage src="/images/SCALE/DataProtection/CreateReplicationTaskSetSchedule.png" alt="Set Replication Task Schedule" id="Set Replication Task Schedule" >}} -8. Select the **Destination Snapshot Lifetime** option to specifies how long TrueNAS should store copied snapshots in the destination dataset before TrueNAS deletes it. +8. Select the **Destination Snapshot Lifetime** option to specify how long TrueNAS should store copied snapshots in the destination dataset before TrueNAS deletes it. **Same as Source** is selected by default. Select **Never Delete** to keep all snapshots until you delete them manually. Select **Custom** to show two additional settings, then enter the number of the duration you select from the dropdown list. For example, *2 Weeks*. @@ -23,6 +23,6 @@ Select **Run Now** if you want to run the task immediately. Click the task **State** to open a dialog with the log for that replication task. To see the replication snapshots, go to **Datasets**, select the destination dataset on the tree table, then select **Manage Snapshots** on the **Data Protection** widget to see the list of snapshots in that dataset. -Click **Show extra columns** to add more information columns to the table such as the date created which can help you locate a specific snapshot or enter part of or the full the name in the search field to narrow the list of snapshots. +Click **Show extra columns** to add more information columns to the table, such as the date created, which can help you locate a specific snapshot or enter part of or the full name in the search field to narrow the list of snapshots. {{< trueimage src="/images/SCALE/DataProtection/ReplicationSnapthotListInDestinationDataset.png" alt="Snapshot List in Destination Dataset" id="Snapshot List in Destination Dataset" >}} diff --git a/static/includes/ReplicationWizardSteps1and2.md b/static/includes/ReplicationWizardSteps1and2.md index 7db9e716df..0bfe58c115 100644 --- a/static/includes/ReplicationWizardSteps1and2.md +++ b/static/includes/ReplicationWizardSteps1and2.md @@ -1,7 +1,7 @@ {{< hint type=important title="Ensure Clean Destination" >}} -Before you begin configuring the replication task, first verify the destination dataset where you plan to store the replication snapshots is free of existing snapshots, or that snapshots with critical data are backed up before you create the task. +Before you begin configuring the replication task, first verify that the destination dataset where you plan to store the replication snapshots is free of existing snapshots, or that snapshots with critical data are backed up before you create the task. {{< /hint >}} After completing the basic preparation steps in the section above, go to **Data Protection > Replication** and click **Add** to open the replication wizard. @@ -10,17 +10,19 @@ Refer to the [Advanced Replication Tasks]({{< ref "/Scale/ScaleTutorials/DataPro On the **What and Where** replication wizard screen: -1. Select the an existing replication task from the **Load Previous Replication Task** dropdown. +1. Select an existing replication task from the **Load Previous Replication Task** dropdown. If one does not exist, leave this set to the default, which is the double dashes. 2. Select the source and destination locations. You can select these in any order. Local replication sends or receives data from one storage location to another on the same (local) system. Remote replication sends data to or receives data from a storage location on a different (remote) TruNAS system. - To setup a local replication in the replication wizard, set both **Source Location** and **Destination Location** to **On this System**. + To set up a local replication in the replication wizard, set both **Source Location** and **Destination Location** to **On this System**. - To set up a push remote replication in the replication wizard, set the **Source Location** to **On this System** and set **Destiation Location** to **On a Different System**. - To set up a pull remote replication in the replication wizard, set the **Source location** to **On a Different System** and the **Destiation Location** to **On this System**. + To set up a push remote replication in the replication wizard, set the **Source Location** to **On this System** and set **Destination Location** to **On a Different System**. + To set up a pull remote replication in the replication wizard, set the **Source location** to **On a Different System** and the **Destination Location** to **On this System**. + + Setting either source or destination to **On a Different System** automatically sets the other to **On This System**. You cannot set both to **On a Different System**. Click on **Source Location** or **Destination Location** to show additional setting options and the file browser. Additional settings shown are based on the selection. \ No newline at end of file diff --git a/static/includes/ReplicationWizardSteps4thru6.md b/static/includes/ReplicationWizardSteps4thru6.md index 66c69aae7b..0d1e734f67 100644 --- a/static/includes/ReplicationWizardSteps4thru6.md +++ b/static/includes/ReplicationWizardSteps4thru6.md @@ -7,10 +7,10 @@ A snapshot naming schema identifies the snapshots to replicate, and might be required by the remote system. A naming schema is a string of [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M variables that name custom snapshots you want to replicate. - Separate entries by pressing Enter. The number of snapshots matching the pattern entered show on a dropdown list. + Separate entries by pressing Enter. The number of snapshots matching the pattern entered shows on a dropdown list. - Selecting **Matching regular expression** does not automatically destroy snapshots where selecting **Matching naming schema** does. - When using regular expression, the snapshots on the destination host are not automatically destroyed when they are destroyed on the source host due to snapshot lifetime. + Selecting **Matching regular expression** does not automatically destroy snapshots, whereas selecting **Matching naming schema** does. + When using a regular expression, the snapshots on the destination host are not automatically destroyed when they are destroyed on the source host due to the snapshot lifetime. Snapshots on the destination host display as "Will not be destroyed automatically" and do not display with a retention period. Use naming schema for these. @@ -19,4 +19,3 @@ To make it easier to find the snapshot, give it a name that is easy to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. Click **Next** to show the scheduling options. - \ No newline at end of file From 953506c6a3af0b3ad77633d0a1cd51bda1229b2e Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 14:59:22 -0400 Subject: [PATCH 07/15] PD-2218 Update Local Replication Tutorial This commit updates the LocalReplicationSCALE.md tutorial to use the new snippets Renames the ReplicationWizardSteps4Thru6.md to ReplicationWizardSteps5And6.md, which moves the Replicate Custom Snapshot content up to step 4 and makes it part of the base content in the RemoteReplicationSCALE.md tutorial. It does not apply to local replication. --- .../Replication/LocalReplicationSCALE.md | 55 +++++++++++-------- ...hru6.md => ReplicationWizardSteps5And6.md} | 0 2 files changed, 33 insertions(+), 22 deletions(-) rename static/includes/{ReplicationWizardSteps4thru6.md => ReplicationWizardSteps5And6.md} (100%) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md index 64e24854b2..74f4de6d08 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md @@ -14,53 +14,64 @@ keywords: - data backup and recovery --- -## Using Local Replication -A local replication creates a zfs snapshot and saves it to another location on the same TrueNAS system either using a different pool, or dataset or zvol. +A local replication creates a ZFS snapshot and saves it to another location on the same TrueNAS system using different pools, datasets, or zvols. This allows users with only one system to take quick data backups or snapshots of their data when they have only one system. -In this scenario, create a dataset on the same pool to store the replication snapshots. You can create and use a zvol for this purpose. -If configuring local replication on a system with more than one pool, create a dataset to use for the replicated snapshots on one of those pools. -While we recommend regularly scheduled replications to a remote location as the optimal backup scenario, this is useful when no remote backup locations are available, or when a disk is in immediate danger of failure. +If you have only one pool, create a dataset in that pool to store the replication snapshots. You can use a zvol for this purpose. +If configuring local replication on a system with more than one pool, create a dataset for the replicated snapshots on one of those pools. + +While we recommend regularly scheduled replications to a remote location as the optimal backup scenario, local replication is useful when a remote backup location is available or when a disk is in immediate danger of failure. {{< include file="/static/includes/ZvolSpaceWarning.md" >}} -With the implementation of the **Local Administrator** user and role-based permissions, setting up replication tasks as an admin user has a few differences over setting up replication tasks when logged in as root. +Setting up replication tasks as an admin user has a few differences from setting up replication tasks when logged in as root. + +{{< include file="/static/includes/ReplicationIntroSCALE.md" >}} {{< include file="/static/includes/ReplicationIntroSCALE.md" >}} -## Setting Up a Simple Replication Task Overview -This section provides a simple overview of setting up a replication task regardless of the type of replication, local or remote. -It also covers the related steps you should take prior to configuring a replication task. +{{< include file="/static/includes/ReplicationLocalBeforeYouBegin.md" >}} -{{< include file="/static/includes/BasicReplicationProcess.md" >}} +To configure the local replication task, follow the instructions in the section below. ## Configuring a Local Replication Task -The replication wizard allows users to create and copy ZFS snapshots to another location on the same system. +Use the **Replication Task Wizard** to create and copy ZFS snapshots to another system, which streamlines creating simple replication tasks. +After creating the replication task, TrueNAS automatically creates a periodic snapshot task for sources that have no existing snapshots. -If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list to load the configuration settings for that task into the wizard, and then make change such as assigning it a different destination, schedule, or retention lifetime, etc. -Saving changes to the configuration creates a new replication task without altering the task you loaded into the wizard. +If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list. +This loads the configuration settings for that task into the wizard, where you can make changes such as assigning it a different destination, setting a new schedule, or retention lifetime, etc. +Saving changes to the configuration creates a new replication task without altering the task originally loaded into the wizard. +This saves some time when creating multiple replication tasks between the same two systems. -{{< include file="/static/includes/ReplicationCreateDatasetAndAdminHomeDirSteps.md" >}} +{{< include file="/static/includes/ReplicationWizardSteps1and2.md" >}} -3. Go to **Data Protection** and click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard**. Configure the following settings: +3. Configure the settings for local replication after selecting **On This System** in either **Source Location** or **Destination Location**. {{< trueimage src="/images/SCALE/DataProtection/CreateLocalReplicationTask.png" alt="New Local Replication Task" id="New Local Replication Task" >}} {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} - a. Select **On this System** on the **Source Location** dropdown list. - Browse to the location of the pool or dataset you want to replicate and select it so it populates **Source** with the path. - Selecting **Recursive** replicates all snapshots contained within the selected source dataset snapshots. + a. Use the file browser for **Source Location** to browse to the location of the dataset with the data to replicate. + Clicking on the dataset(s) populates the **Source** path. + + When setting up the **Source**, you can select multiple sources or manually type the names into the **Source** field. - b. Select **On this System** on the **Destination Location** dropdown list. - Browse to the location of the pool or dataset you want to use to store replicated snapshots and select to populate **Destination** with the path. + b. Use the file browser for **Destination Location** to browse to the location of the pool or dataset to receive the replicated snapshots. + Clicking on the dataset populates **Destination** path. + + When setting up the **Destination**, the **Destination** path allows adding a directory/dataset by entering /name, where *rname* is the name of a directory or dataset. The source path does not allow adding a new dataset/directory. + You can use zvols as a local replication destination. Add a name to the end of the path to create a new dataset in that location. c. (Optional) Enter a name for the snapshot in **Task Name**. - TrueNAS populates this field with the default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in destination dataset a challenge. - To make it easier to find the snapshot, give it name easy for you to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. + TrueNAS populates this field with the default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in the destination dataset a challenge. + To make it easier to find the snapshot, give it a name that is easy for you to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. + +{{< include file="/static/includes/ReplicationWizardSteps4thru6.md" >}} {{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} +For information on replicating encrypted pools or datasets, see [Setting Up an Encrypted Replication Task]({{< ref "ReplicationWithEncryptionSCALE" >}}). + {{}} diff --git a/static/includes/ReplicationWizardSteps4thru6.md b/static/includes/ReplicationWizardSteps5And6.md similarity index 100% rename from static/includes/ReplicationWizardSteps4thru6.md rename to static/includes/ReplicationWizardSteps5And6.md From 64df63d75a50206d2aea0ea050f300729b3ae684 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 15:00:46 -0400 Subject: [PATCH 08/15] PD-2218 Save changes not in previous commit --- .../Replication/LocalReplicationSCALE.md | 2 +- static/includes/ReplicationWizardSteps5And6.md | 14 +------------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md index 74f4de6d08..d965e0728e 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/LocalReplicationSCALE.md @@ -68,7 +68,7 @@ This saves some time when creating multiple replication tasks between the same t TrueNAS populates this field with the default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in the destination dataset a challenge. To make it easier to find the snapshot, give it a name that is easy for you to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. -{{< include file="/static/includes/ReplicationWizardSteps4thru6.md" >}} +{{< include file="/static/includes/ReplicationWizardSteps5And6.md" >}} {{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} diff --git a/static/includes/ReplicationWizardSteps5And6.md b/static/includes/ReplicationWizardSteps5And6.md index 0d1e734f67..72c8ef2ad9 100644 --- a/static/includes/ReplicationWizardSteps5And6.md +++ b/static/includes/ReplicationWizardSteps5And6.md @@ -1,18 +1,6 @@ -4. (Optional) Select **Recursive** to replicate all snapshots contained within the parent dataset and any child datasets. - -5. (Optional) Select **Replicate Custom Snapshots**, then leave the default value in **Naming Schema**. - If you know how and want to enter the schema, enter it in **Naming Schema**. - - A snapshot naming schema identifies the snapshots to replicate, and might be required by the remote system. - A naming schema is a string of [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M variables that name custom snapshots you want to replicate. - Separate entries by pressing Enter. The number of snapshots matching the pattern entered shows on a dropdown list. - - Selecting **Matching regular expression** does not automatically destroy snapshots, whereas selecting **Matching naming schema** does. - When using a regular expression, the snapshots on the destination host are not automatically destroyed when they are destroyed on the source host due to the snapshot lifetime. - Snapshots on the destination host display as "Will not be destroyed automatically" and do not display with a retention period. - Use naming schema for these. +5. (Optional) Select **Recursive** to replicate all snapshots contained within the parent dataset and any child datasets. 6. (Optional) Accept the default name in **Task Name**, or enter a name of your choosing. TrueNAS populates this field with a default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in the destination dataset a challenge. From e2cbdab57391759f5567bbce925871caaeede128 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 15:01:38 -0400 Subject: [PATCH 09/15] PD-2218 Saves changes in Remote Replication not in the two previous commits --- .../Replication/RemoteReplicationSCALE.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md index 5d01236fd7..3916e8f4ce 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md @@ -67,8 +67,20 @@ This saves some time when creating multiple replication tasks between the same t d. Enter the settings for the other location (source or destination), which is automatically set to **On This System**. Browse to select the dataset. - -{{< include file="/static/includes/ReplicationWizardSteps4thru6.md" >}} + +4. (Optional) Select **Replicate Custom Snapshots**, then leave the default value in **Naming Schema**. + If you know how and want to enter the schema, enter it in **Naming Schema**. + + A snapshot naming schema identifies the snapshots to replicate, and might be required by the remote system. + A naming schema is a string of [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M variables that name custom snapshots you want to replicate. + Separate entries by pressing Enter. The number of snapshots matching the pattern entered shows on a dropdown list. + + Selecting **Matching regular expression** does not automatically destroy snapshots, whereas selecting **Matching naming schema** does. + When using a regular expression, the snapshots on the destination host are not automatically destroyed when they are destroyed on the source host due to the snapshot lifetime. + Snapshots on the destination host display as "Will not be destroyed automatically" and do not display with a retention period. + Use naming schema for these. + +{{< include file="/static/includes/ReplicationWizardSteps5And6.md" >}} {{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} From 4f9503df0de899f3b1b4c51c6b26fa02ef575960 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 16:25:44 -0400 Subject: [PATCH 10/15] PD-2218 Update Advanced Replication Update the AdvancedReplication/_index.md file content to work with the changed BasicReplicationProcess.md snippet. --- .../Replication/AdvancedReplication/_index.md | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/_index.md b/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/_index.md index adb13eaf04..5b19524b27 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/_index.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/_index.md @@ -17,13 +17,13 @@ keywords: - data backup and recovery --- -TrueNAS advanced replication allows users to create one-time or regularly scheduled snapshots of data stored in pools, datasets or zvols on their TrueNAS system as a way to back up stored data. +TrueNAS advanced replication allows users to create one-time or regularly scheduled snapshots of data stored in pools, datasets, or zvols on their TrueNAS system as a way to back up stored data. When properly configured and scheduled, local or remote replication using the **Advanced Replication Creation** option takes regular snapshots of storage pools or datasets and saves them in the destination location on the same or another system. {{< include file="/static/includes/ReplicationIndexContentSCALE.md" >}} The **Advanced Replication Creation** option opens the **Add Replication Task** screen. -This screen provides access to the same settings found in the replication wizard but has more options to specify: +This screen provides access to the same settings found in the replication wizard, but has more options to specify: * Full file system replication * Stream compression @@ -59,30 +59,29 @@ Turn on SSH service. Go to **System > Services** screen, verify the **SSH** serv ## Creating a Simplified Advanced Replication Task -To access advanced replication settings, click **Advanced Replication Creation** at the bottom of the first screen of the **Replication Task Wizard**. +To access advanced replication settings, click **Advanced Replication Creation** at the bottom of the first replication wizard screen. The **Add Replication Task** configuration screen opens. -{{< include file="/static/includes/ReplicationCreateDatasetAndAdminHomeDirSteps.md" >}} - -3. Give the task a name and set the direction of the task. +1. Give the task a name. Unlike the wizard, the **Name** does not automatically populate with the *source*/*destination* task name after you set the source and destination for the task. - Each task name must be unique, and we recommend you name it in a way that makes it easy to remember what the task is doing. + Each task name must be unique, and we recommend naming it in a way that makes it easy to remember what the task is doing. -4. Select the direction of the task. **Pull** replicates data from a remote system to the local system. **Push** sends data from the local system to the remote. +2. Select the direction of the task. **Pull** pulls data from a remote system to the local system. **Push** sends data from the local system to the remote. -5. Select the method of tranfer for this replication from the **Transport** dropdown list. - Select **LOCAL** to replicate data to another location on the same system. - Select **SSH** is the standard option for sending or receiving data from a remote system. Select the existing **SSH Connection** from the dropdown list. - Select **SSH+Netcat** is available as a faster option for replications that take place within completely secure networks. - **SSH+Netcat** requires defining netcat ports and addresses to use for the Netcat connection. +3. Select the transfer method for this replication from the **Transport** dropdown list. + * Select **LOCAL** to replicate data to another location on the same system. + * Select **SSH** is the standard option for sending or receiving data from a remote system. + When selected, also select an SSH connection from the **SSH Connection** dropdown list. + * Select **SSH+Netcat** is a faster option for replication when it occurs within a completely secure network. + **SSH+Netcat** requires defining NETCAT ports and addresses to use for the NETCAT connection. - With SSH-based replications, select the **SSH Connection** to the remote system that sends or receives snapshots. + With SSH-based replications, select the SSH Connection with the remote system from which you want to receive snapshots or send snapshots to. To create a new connection to use for replication from a destination to this local system, select **newpullssh**. - Select **Use Sudo for Zfs Commands** to controls whether the user used for SSH/SSH+NETCAT replication has passwordless sudo enabled to execute zfs commands on the remote host. + Select **Use Sudo for Zfs Commands** to control whether the user for SSH/SSH+NETCAT replication has passwordless sudo enabled to execute zfs commands on the remote host. If not selected, you must enter `zfs allow` on the remote system to to grant non-user permissions to perform ZFS tasks. -6. Specify the source and destination paths. Adding /*name* to the end of the path creates a new dataset in that location. +4. Specify the source and destination paths. Destination paths allow adding /*name* to the end of the path to create a new dataset in that location. Click the arrow to the left of each folder or dataset name to expand the options and browse to the dataset, then click on the dataset to populate the **Source**. Choose a preconfigured periodic snapshot task as the source of snapshots to replicate. Pulling snapshots from a remote source requires a valid **SSH Connection** before the file browser can show any directories. @@ -98,11 +97,11 @@ The **Add Replication Task** configuration screen opens. *DO NOT* use zvols as remote destinations. {{< /hint >}} -7. Select a previously configured periodic snapshot task for this replication task in **Periodic Snapshot Tasks**. +5. Select a previously configured periodic snapshot task for this replication task in **Periodic Snapshot Tasks**. The replication task selected must have the same values in **Recursive** and **Exclude Child Datasets** as the chosen periodic snapshot task. Selecting a periodic snapshot schedule removes the **Schedule** field. - If a periodic snapshot task does not exist, exist the advanced replication task configuration, go configure a periodic snapshot task, then return to the **Advanced Replication** screen to configure the replication Task. + If a periodic snapshot task does not exist, before creating the advanced replication task, configure a periodic snapshot task, then return to the **Add Replication Task** screen to configure the replication Task. Select **Replicate Specific Snapshots** to define specific snapshots from the periodic task to use for the replication. This displays the schedule options for the snapshot task. Enter the schedule. The only periodically generated snapshots included in the replication task are those that match your defined schedule. @@ -112,9 +111,9 @@ The **Add Replication Task** configuration screen opens. For example, entering the naming schema `custom-%Y-%m-%d_%H-%M` finds and replicates snapshots like `custom-2020-03-25_09-15`. Enter multiple schemas by pressing Enter to separate each schema. -8. Set the replication schedule to use and define when the replication task runs. +6. Set the replication schedule to use and define when the replication task runs. Leave **Run Automatically** selected to use the snapshot task specified and start the replication immediately after the related periodic snapshot task completes. - Select **Schedule** to display scheduling options for this replication task and To automate the task according to its own schedule. + Select **Schedule** to display scheduling options for this replication task, and to run the task according to its own schedule. Selecting **Schedule** allows scheduling the replication to run at a separate time. Choose a time frame that gives the replication task enough time to finish and is during a time of day when network traffic for both source and destination systems is minimal. @@ -124,7 +123,7 @@ The **Add Replication Task** configuration screen opens. {{< include file="/static/includes/SCALEAdvancedScheduler.md" >}} {{< /expand >}} -9. Click **Save**. +7. Click **Save**. ### Setting a Replication Compression Level @@ -143,7 +142,7 @@ Replication tasks using large block replication only continue to work as long as By default, the replication task uses snapshots to quickly transfer data to the receiving system. Selecting **Full Filesystem Replication** means the task completely replicates the chosen **Source**, including all dataset properties, snapshots, child datasets, and clones. -When using this option, we recommended allocating additional time for the replication task to run. +When using this option, we recommend allocating additional time for the replication task to run. ### Replicating Dataset Properties @@ -180,7 +179,7 @@ You can store the encryption key either in the TrueNAS system database or in a c {{< hint type=important >}} **Synchronizing Destination Snapshots With Source** destroys any snapshots in the destination that do not match the source snapshots. -TrueNAS also does a full replication of the source snapshots as if the replication task never run, which can lead to excessive bandwidth consumption. +TrueNAS also does a full replication of the source snapshots as if the replication task had not run, which can lead to excessive bandwidth consumption. This can be a very destructive option. Make sure that any snapshots deleted from the destination are obsolete or otherwise backed up in a different location. From f01758664a2c6d85e2eac81741f3c2487f4a89cb Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Tue, 30 Sep 2025 16:46:43 -0400 Subject: [PATCH 11/15] PD-2218 Update the ReplicationWithEncryptionSCALE.md Tutorial This commit makes changes to the tutorial for replication using encryption. It removes the old procedure and updates with a referal to the RemoteReplicationSCALE.md tutorial, and updates that tutorial with the optional encryption setting. It removes duplicated content and focuses the article on replication and encryption options. --- .../ReplicationWithEncryptionSCALE.md | 98 +++---------------- .../Replication/RemoteReplicationSCALE.md | 2 + 2 files changed, 14 insertions(+), 86 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/ReplicationWithEncryptionSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/ReplicationWithEncryptionSCALE.md index 919365049c..5b79e6b7fd 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/ReplicationWithEncryptionSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/AdvancedReplication/ReplicationWithEncryptionSCALE.md @@ -19,112 +19,38 @@ You can use encrypted datasets in a local replication. You can set up a replication task for a dataset encrypted with a passphrase or a hex encryption key, but you must unlock the dataset before the task runs or the task fails. {{< /hint>}} -With the implementation of the **Local Administrator** user and role-based permissions, when setting up remote replication tasks when logged in as an admin user requires selecting **Use Sudo For ZFS Commands**. +With the implementation of the **Local Administrator** user and role-based permissions, when setting up remote replication tasks when logged in as an admin user, requires selecting **Use Sudo For ZFS Commands**. {{< include file="/static/includes/ReplicationIntroSCALE.md" >}} Remote replication with datasets also require an SSH connection in TrueNAS. You can use an existing SSH connection if it has the same user credentials you want to use for the new replication task. -## Setting Up a Simple Replication Task Overview - -This section provides a simple overview of setting up a remote replication task for an encrypted dataset. -It also covers the related steps you should take prior to configuring the replication task. - -{{< expand "Replication Task General Overview" "v" >}} - -1. Set up the data storage for where you want to save replicated snapshots. - -2. Make sure the admin user has a home directory assigned. - -3. Create an SSH connection between the local TrueNAS system and the remote system. - You can do this by either going to **Credentials > Backup Credentials > SSH Connection** and clicking **Add** or from the **Replication Task Wizard** using the **Generate New** option for the remote system. - -4. Unlock the encrypted dataset(s) and export the encryption key to a text editor like Notepad. - -5. Go to **Data Protection > Replication Tasks** and click **Add** to open the **Replication Task Wizard**. - Specify the from and to sources, task name, and set the schedule. - - Setting options change based on the source selections. Replicating to or from a local source does not requires an SSH connection. - -This completes the general process for all replication tasks. -{{< /expand >}} +{{< include file="/static/contents/BasicReplicationProcess.md" >}} ## Creating a Remote Replication Task for an Encrypted Dataset -To streamline creating simple replication tasks use the **Replication Task Wizard** to create and copy ZFS snapshots to another system. +To streamline creating simple replication tasks, use the **Replication Task Wizard** to create and copy ZFS snapshots to another system. The wizard assists with creating a new SSH connection and automatically creates a periodic snapshot task for sources that have no existing snapshots. -If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list to load the configuration settings for that task into the wizard, and then make change such as assigning it a different destination, select encryption options, schedule, or retention lifetime, etc. +If you have an existing replication task, you can select it on the **Load Previous Replication Task** dropdown list to load the configuration settings for that task into the wizard, and then make changes such as assigning it a different destination, selecting other options like encryption, schedule, or retention lifetime, etc. Saving changes to the configuration creates a new replication task without altering the task you loaded into the wizard. This saves some time when creating multiple replication tasks between the same two systems. -{{< include file="/static/includes/ReplicationCreateDatasetAndAdminHomeDirSteps.md" >}} - -3. Unlock the source dataset and export the encryption key to a text editor such as Notepad. - Go to **Datasets** select the source dataset, locate the **ZFS Encryption** widget and unlock the dataset if locked. - Export the key and paste it in any text editor such as Notepad. If you set up encryption to use a passphrase, you do not need to export a key. - -4. Go to **Data Protection** and click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard**. Configure the following settings: - - {{< trueimage src="/images/SCALE/DataProtection/CreateRemoteReplicationTask.png" alt="New Remote Replication Task" id="New Remote Replication Task" >}} - - a. Select **On this System** on the **Source Location** dropdown list. - If your source is the local TrueNAS system, you must select **On a Different System** from the **Destination Location** dropdown list to do remote replication. - - If your source is a remote system, create the replication task as the root user and select **On a Different System**. The **Destination Location** automatically changes to **On this System**. - - TrueNAS shows the number of snapshots available for replication. +Unlock the source dataset and export the encryption key to a text editor such as Notepad. +Go to **Datasets** select the source dataset, locate the **ZFS Encryption** widget and unlock the dataset if locked. +Export the key and paste it in any text editor such as Notepad. If you set up encryption to use a passphrase, you do not need to export a key. - b. Select an existing SSH connection to the remote system or create a new connection. - Select **Create New** to open the **[New SSH Connection](#configure-a-new-ssh-connection)** configuration screen. - - c. Browse to the source pool/dataset(s), then click on the dataset(s) to populate the **Source** with the path. - You can select multiple sources or manually type the names into the **Source** field. Separate multiple entries with commas. - Selecting **Recursive** replicates all snapshots contained within the selected source dataset snapshots. - - d. Repeat to populate the **Destination** field. - You cannot use zvols as a remote replication destination. - Add a **/*datasetname*** to the end of the destination path to create a new dataset in that location. - - e. (Optional) Select **Encryption** to add a [second layer of encryption](#adding-additional-encryption) over the already encrypted dataset. - - f. Select **Use Sudo for ZFS Commands**. Only displays when logged in as the admin user (or the name of the admin user). - This removes the need to issue the cli `zfs allow` command in Shell on the remote system. - When the dialog displays, click **Use Sudo for ZFS Comands**. If you close this dialog, select the option on the **Add Replication Task** wizard screen. - - {{< trueimage src="/images/SCALE/DataProtection/UseSudoForZFSCommandsDialog.png" alt="Select Use Sudo for ZFS Commands" id="Select Use Sudo for ZFS Commands" >}} - - This option only displays when logged in as the admin user. - If not selected you need to issue the cli `zfs allow` command in Shell on the remote system. - - g. Select **Replicate Custom Snapshots**, then accept the default value in **Naming Schema**. - Remote sources require entering a snapshot naming schema to identify the snapshots to replicate. - A naming schema is a pattern of naming custom snapshots you want to replicate. - If you want to change the default schema, enter the name and [strftime(3)](https://man7.org/linux/man-pages/man3/strftime.3.html) %Y, %m, %d, %H, and %M strings that match the snapshots to include in the replication. - Separate entries by pressing Enter. The number of snapshots matching the patterns display. - - h. (Optional) Enter a name for the snapshot in **Task Name**. - TrueNAS populates this field with the default name using the source and destination paths separated by a hyphen, but this default can make locating the snapshot in destination dataset a challenge. - To make it easier to find the snapshot, give it a name that is easy for you to identify. For example, a replicated task named *dailyfull* for a full file system snapshot taken daily. - -{{< include file="/static/includes/ReplicationScheduleAndRetentionSteps.md" >}} +Configure the remote replication as described in the [Creating a Remote Replication Task]({{< ref "RemoteReplicationSCALE.md" >}}). {{}} -### Configure a New SSH Connection - -{{< include file="/static/includes/ReplicationConfigNewSSHConnection.md" >}} - -### Using SSH Transfer Security - -{{< include file="/static/includes/ReplicationSSHTransferSecurity.md" >}} - ### Unlocking the Destination Dataset -After the replication task runs and creates the snapshot on the destination, you must unlock it to access the data. +After the replication task runs and creates the snapshot on the destination, you must unlock the dataset to access the data. Click the from the replication task options to download a key file that unlocks the destination dataset. ### Replicating to an Unencrypted Destination Dataset + {{< hint type=important >}} TrueNAS does not support preserving encrypted dataset properties when trying to re-encrypt an already encrypted source dataset. {{< /hint >}} @@ -143,10 +69,10 @@ This replicates the unlocked encrypted source dataset to an unencrypted destinat ### Using Additional Encryption Options -When you replicate an encrypted pool or dataset you have one level of encryption applied at the data storage level. +When you replicate an encrypted pool or dataset, you have one level of encryption applied at the data storage level. Use the passphrase or key created or exported from the dataset or pool to unlock the dataset on the destination server. -To add a second layer of encryption at the replication task level, select **Encryption** on the **Replication Task Wizard**, then select the type of encryption you want to apply. +To add a second layer of encryption at the replication task level, select **Encryption** on the **Replication Task Wizard** or on the **Add Replication Task** screen, then select the type of encryption you want to apply. {{< trueimage src="/images/SCALE/DataProtection/ReplicationTaskEncryptionOptions.png" alt="Replication Task Encryption Options" id="Replication Task Encryption Options" >}} diff --git a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md index 3916e8f4ce..4613e37182 100644 --- a/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/Replication/RemoteReplicationSCALE.md @@ -67,6 +67,8 @@ This saves some time when creating multiple replication tasks between the same t d. Enter the settings for the other location (source or destination), which is automatically set to **On This System**. Browse to select the dataset. + + e. (Optional) Select **Encryption** to add a [second layer of encryption](#adding-additional-encryption) over the already encrypted dataset. 4. (Optional) Select **Replicate Custom Snapshots**, then leave the default value in **Naming Schema**. If you know how and want to enter the schema, enter it in **Naming Schema**. From 7bdc269d1574836d646e22abea5f1a4c745afdcf Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Thu, 2 Oct 2025 13:30:52 -0400 Subject: [PATCH 12/15] PD-2218 Update the AddSSHConnection.md snippet Added information about the connection after it is added in TrueNAS. --- static/includes/AddSSHConnection.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/static/includes/AddSSHConnection.md b/static/includes/AddSSHConnection.md index b895c93cba..97623d17e7 100644 --- a/static/includes/AddSSHConnection.md +++ b/static/includes/AddSSHConnection.md @@ -33,6 +33,10 @@ Click **Add** on the **SSH Connections** widget to open the configuration screen 4. Click **Save**. - Saving a new connection automatically opens a connection to the remote TrueNAS and exchanges SSH keys. - The new SSH connection displays on the **SSH Connection** widget. - To edit it, click on the name to open the **SSH Connections** configuration screen populated with the saved settings. \ No newline at end of file +Saving a new connection automatically opens a connection to the remote TrueNAS and exchanges SSH keys. +The new SSH connection displays on the **SSH Connection** and the **SSH Keypairs** widgets. + +To edit the SSH connection, select it, then click on edit open the **SSH Connections** configuration screen populated with the saved settings. + +To download the private and public keypair, click the for the new keypair on the **SSH Keypairs** widget. +To view and copy the public or private key, click the **Edit** option for the keypair to open the **Edit Keypair** screen. \ No newline at end of file From e13e63edf688ce5e1a80dc05b85d980241367581 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Thu, 2 Oct 2025 13:42:21 -0400 Subject: [PATCH 13/15] PD-2265 Update Branch and Update the Rsync task and SSH Connection content This commit updates the RsyncTasksSCALE.md tutorial content to reflect changes in the UI and the processes for Module mode and SSH mode with the new connection options. --- .../DataProtection/RsyncTasksSCALE.md | 185 +++++++++++------- 1 file changed, 114 insertions(+), 71 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/RsyncTasksSCALE.md b/content/SCALE/SCALETutorials/DataProtection/RsyncTasksSCALE.md index a369c088e5..dea53a216e 100644 --- a/content/SCALE/SCALETutorials/DataProtection/RsyncTasksSCALE.md +++ b/content/SCALE/SCALETutorials/DataProtection/RsyncTasksSCALE.md @@ -14,7 +14,7 @@ keywords: - rsync --- -[Rsync](https://rsync.samba.org/) provides fast incremental data transfer to synchronize files between a TrueNAS host and a remote system. +[Rsync](https://rsync.samba.org/) provides fast incremental data transfer to synchronize files between a TrueNAS system and a remote system. The **Push** function copies data from TrueNAS to a remote system. The **Pull** function copies data from a remote system to the TrueNAS local host system and stores it in the dataset defined in the **Path** field. @@ -22,48 +22,31 @@ There are two ways to connect to a remote system and run an rsync task: * Set up an [SSH connection](#configuring-ssh-mode-rsync-tasks) to the remote server. * Set up an [rsync module](#configuring-module-mode-rsync-tasks) for the remote server. -## Configuring SSH Mode Rsync Tasks -Before you create an rsync task in SSH mode, [add an SSH connection and keypair](#setting-up-an-ssh-connection) between the TrueNAS host and the remote system. -See [Adding SSH Credentials]({{< ref "AddSSHConnectionKeyPair" >}}) for more information. +## Before You Configure the Rsync Mode -After setting up the SSH connection, [configure the rsync task](#creating-an-ssh-mode-rsync-task) on the TrueNAS host. +An rsync task has two basic methods: +* Module +* SSH -### Setting Up an SSH Connection -You can set up a new SSH connection on the **Credentials > Backup Credentials** screen by clicking **Add** on the **SSH Connections** widget, or while setting up a new rsync task using the option to select **SSH connection from the keychain** in the **Connect using** field and selecting **Add New** in **SSH Connection** on the **Add Rsync Task** screen. +Module mode requires adding an rsync app to the remote system, configuring a module on that system, and then entering it in the rsync task in TrueNAS. -The following procedure provides instructions on setting up an SSH connection using the **New SSH Connection** screen. +SSH mode has two connection options: +* **SSH private key stored in the user's home directory** +* **SSH connection for the keychain** -Enable SSH on both the local and remote systems. -On the local TrueNAS host system, go to **System > Services** and toggle **SSH** to on, and enable the SSH service on the remote host system. +Setting options change based on the SSH connection option selected. -Set up a home directory for the remote system administrator on the remote system. -Note the path to where home directories are stored to enter on the local host TrueNAS. - -If the remote system is also a TrueNAS, go to **Credentials**, select **Users** to see the list of users. -Select the administration user and click **Edit**. - -If creating a new administration user for rsync functions, click **Add**. -See [Managing Users]({{< ref "managelocalusersscale/#creating-an-administrator-user-account" >}}) for more information. -Take note of the path to the home directory to use in setting up the connection. - -Add an SSH connection for the remote server on the local TrueNAS host system. - -{{< expand "Adding a remote TrueNAS system" "v" >}} - -{{< include file="/static/includes/AddSSHConnection.md" >}} - -{{< /expand >}} +Before adding an rsync task using the **SSH private key stored in the user's home directory** option: +1. Go to **Credentials > Backup Credentials** to [add an SSH connection and keypair](#using-an-ssh-connection) for the remote system. +2. Download the SSH keypair to your system +3. Add the private key to the home directory for the admin user you plan to use for the rsync task. -{{< expand "Adding a connection to a non-TrueNAS remote host system" "v" >}} - -{{< include file="/static/includes/AddManualSSHConnection.md" >}} +TrueNAS allows configuring multiple admin users on the system. All admin users configured in the TrueNAS system show in the rsync task **User** dropdown list. -{{< /expand >}} +See [Adding SSH Credentials]({{< ref "AddSSHConnectionKeyPair" >}}) for more information on keypairs. -The generated keypair shows on the **SSH Keypair** widget. -To download the public and private keypairs, click the for the new keypair on the **SSH Keypairs** widget. +## Adding an Rsync Task Using SSH -### Adding an Rsync Task Enabled SSH on both the local host TrueNAS, and the remote destination system. You can use the SSS connection created in [Setting Up an SSH Connection](#setting-up-an-ssh-connection) or create a new connection while configuring the rsync task. @@ -83,23 +66,23 @@ You can use the SSS connection created in [Setting Up an SSH Connection](#settin 4. Set the **Direction** for the rsync task. Select **Pull** to copy from the remote server to TrueNAS or **Push** to copy to the remote server. -5. Select **SSH** as the connection mode from the **Rsync Mode** dropdown to use an SSH connection. The settings fields show. +5. Set the **Rsync Mode** to **SSH**, and then select the connection method from the **Connect using** dropdown list. + Settings fields for the selected connection type show. - Set this to **Module** if syncing with a non-TrueNAS remote system. See [Setting Up an Rsync Task Using Module Mode](#setting-up-an-rsync-task-using-module-modek) for more information. + Leave this set to **Module** if syncing with a non-TrueNAS remote system. + See [Addin an Rsync Task Using Module Mode](#adding-an-rsync-task-using-module-mode) for more information. -6. Choose a connection method from the **Connect using** dropdown list. + If selecting **SSH private key stored in the user home directory**, the public key for the SSH connection must be alread be saved in the home directory for the admin user. - If selecting **SSH private key stored in the user home directory**, the public key for the SSH connection must be saved in the home directory for the admin user. - To accomplish this, copy the public key from the **SSH Keypair** and paste it into the **Authorized Keys** field on the **Edit User** screen. + If selecting **SSH connection from the keychain**, choose either the existing SSH credential from the **SSH Connection** dropdown list or select **Add New** to open the **New SSH Connection** configuration screen. See [Using an SSH Connection](#using-an-ssh-connection) below for more information. - If selecting **SSH connection from the keychain**, choose either the existing SSH credential from the **SSH Connection** dropdown list or select **Add New** to open the **New SSH Connection** configuration screen. + If the connection fails, the system lets you know what is wrong so you can correct the issue with the connection. -7. Enter the full path to the dataset on the remote server to either pull from or push to in **Remote Path**. - Maximum path length is 255 characters. +6. Enter the full path to the dataset on the remote server in **Remote Path**. The maximum path length is 255 characters. - To confirm the remote server is reachable and the path exists, set **Validate Remote Path**. + To confirm the remote server is reachable and the path exists, leave **Validate Remote Path** selected. -8. Set the schedule for when to run this task and any other options you want to use. +7. Select a schedule for when to run this task and any other options you want to use. {{< trueimage src="/images/SCALE/DataProtection/AddRsyncTaskSchedOpt.png" alt="Add Rsync Task Schedule and More Options" id="Add Rsync Task Schedule and More Options" >}} @@ -108,55 +91,115 @@ You can use the SSS connection created in [Setting Up an SSH Connection](#settin {{< include file="/static/includes/SCALEAdvancedScheduler.md" >}} {{< /expand >}} -9. Select the **Enabled** to enable the task. - Leave cleared to disable the task, but not delete the configuration. - You can run the rsync task at any time from the **Rsync Tasks** widget by clicking the vertical ellipses more_vert on the rsync task and selecting the **Run Now** option. +8. Leave **Enabled** selected. Clear the checkbox to disable the task without deleting the configuration. + +9. Click **Save**. The system verifies the SSH connection and adds the task to the **Rsync Tasks** widget. + +To run the rsync task at any time, select it on the **Rsync Tasks** widget, click on the vertical ellipses more_vert for the task, and select the **Run Now**. + +#### Using an SSH Connection + +The TrueNAS UI allows users to select an existing SSH connection or to create a new connection while configuring the task. +The **New SSH Connection** screen opened using the **Add New** option in the rsync task and accessed while on the **Backup Credentials** screen are essentially the same and show the same setting options. -10. Click **Save**. - The system verifies the SSH connection and adds the task to the **Rsync Tasks** widget. - If the connection fails, the system lets you know what went wrong so you can correct the issue with the connection. +To set up a new SSH connection before adding an rsync task, go to **Credentials > Backup Credentials** and click **Add** on the **SSH Connections** widget. +See [Adding SSH Credentials]({{< ref "AddSSHConnectionKeyPair" >}}) for more information on adding SSH Connections and key pairs. -## Configuring Module Mode Rsync Tasks +To add a new connection while configuring the rsync task on the **Add Rsync Task** screen, set the mode to **SSH**, select **SSH connection for the keychain**, and then select **Add New** on the **SSH Connection** dropdown list. The **New SSH Connection** screen opens. + +{{< expand "Adding an SSH Connection to a TrueNAS System" "v" >}} + +{{< include file="/static/includes/AddSSHConnection.md" >}} + +{{< /expand >}} + +{{< expand "Adding an SSH Connection to a Non-TrueNAS System" "v" >}} + +{{< include file="/static/includes/AddManualSSHConnection.md" >}} + +{{< /expand >}} + +Next, set up a home directory for the system administrator on the remote system if one does not already exist. +If the remote system is a TrueNAS, edit the user to add the public key. In TrueNAS, go to **Users**, click **Edit**, and paste the key into the pubic key field. + +After adding the SSH connection, go to **System > Services** to turn on the **SSH** service. +We don't recommend leaving the SSH service turned on when not in use for security hardening. +Turn it on before the rsync task is scheduled to run, then off again after the task completes to keep your system secured. +(Optional) To automatically start or restart the SSH service after a system restart, select this option. +Enable the SSH service on the remote system according to the configuration process for a non-TrueNAS system. + +## Setting Up an Rsync Task Using Module Mode Before you create an rsync task in module mode, you must [define at least one module](#defining-an-rsync-module) per [rsyncd.conf(5)](https://www.samba.org/ftp/rsync/rsyncd.conf.html) on the remote rsync server. The [Rsync Daemon](https://apps.truenas.com/catalog/rsyncd/) application is available in situations where configuring TrueNAS as an rsync server with an rsync module is necessary. -After configuring the rsync server, configure the rsync task. +After configuring the remote server with rsync and a module, configure the rsync task in TrueNAS. -### Defining an Rsync Module +### Setting Up an Rsync Module -If the non-TruNAS remote server includes an rsync service, make sure it is turned on. +If the non-TruNAS remote server includes an rsync service, make sure it is turned on. To configure a module on the remote server: -1. Create a dataset on the remote system. +1. Create a dataset. Write down the host and path to the data on the remote system you plan to sync with. -2. Create an rsync module on the remote system. - On TrueNAS, install an rsync app (such as [Rsyncd](https://apps.truenas.com/catalog/rsyncd/) and configure the module. +2. Create an rsync module. -### Setting Up an Rsync Task Using Module Mode + If the remote system is not a TrueNAS and has an rsync app installed, create a module according to the configuration process for that app and system. + If the remote system is not a TrueNAS, install an rsync app, such as [Rsyncd](https://apps.truenas.com/catalog/rsyncd/), and configure it per the instructions for the app and your remote non-TrueNAS system. -1. Go to **Data Protection** and click **Add** on the **Rsync Tasks** widget to open the **Add Rsync Task** screen. + If the remote system is another TrueNAS, install an rsync app. + Debian-based TrueNAS systems include the **Rsync Daemon** app in the Community app catalog. + [Install the app](https://apps.truenas.com/resources/deploy-rsyncd/) and use it to configure a module. + + {{< expand "Configuring a module in the TrueNAS RsyncD app" "v" >}} + To create the module, you need the IP address or host name of your TrueNAS (host) server. + The host server is configured with the rsync task that transfers your data to the remote server. + + When the remote system is a Debian-based TrueNAS system, go to **Apps > Discover Apps** and search for the **Rsync Daemon** app. + + Click on the widget, and then click **Install** to open the installation wizard. + + To add a module, click **Add** to the right of **Rsync Modules**, then: + 1. Assign a name. This name is added in the **Add Rsync Task** screen on your TrueNAS system when you set up a task using **Module** in the **Rsync Mode** field. + 2. (Optional) Enter a comment to help you remember the purpose of this module or where it is used. + 3. Select the host path for the rsyncd app. + You can use **Create Dataset** to add a new dataset, and repeat to add a new child dataset if not selecting an existing dataset. + 4. Set the level of access by selecting the option on the **Access Mode** dropdown list. + 5. (Optional) Add IP addresses to the **Host Allow** or **Host Deny** options if you want to narrow access to this module. + 6. Take note of the name of the module and the host path to it or use in later when you add the rsync task in your TrueNAS system. + + Complete the rest of the app configuration to suit your use case, and click **Install**. + The app shows in the TrueNAS UI on the **Applications** screen as **Running** when fully deployed. + {{< /expand >}} + +### Adding an Rsync Task Using Module Mode + +To configure the rsync task using module mode, you need: +* The name of the module +* The IP address or host name for the remote server +* The path to the dataset + +Go to **Data Protection** and click **Add** on the **Rsync Tasks** widget to open the **Add Rsync Task** screen. {{< trueimage src="/images/SCALE/DataProtection/AddRsyncTaskSourceAndRemoteSettings.png" alt="Add Rsync Task - Module Mode" id="Add Rsync Task - Module Mode" >}} -2. Enter or browse to the dataset or folder to sync with the remote server. - Use the arrow_right to the left of the **/mnt** folder and each folder listed on the tree to expand and browse through, then click on the name to populate the path field. +1. Enter or browse to and select the dataset or folder to sync with the remote server. + Clicking on the dataset name populates the path field. {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} -3. Select a **User** account to perform the rsync task. +2. Select the admin account to perform the rsync task on the **User** dropdown list. The user must have permissions to run an rsync on the remote server and read/write permission for the local dataset. -4. Set the **Direction** for the rsync task. +3. Set the **Direction** for the rsync task. Select **Pull** to copy from the remote server to TrueNAS or **Push** to copy to the remote server. -5. Select **Module** as the connection mode from the **Rsync Mode** dropdown. +4. Set the **Rsync Mode** to **Module**. The module settings fields show. -6. Enter the remote host name or IP in **Remote Host**. - Use the format *username@remote_host* when the username differs from the host entered into the **Remote Host** field. +5. Enter the remote host name or IP in **Remote Host**. -7. Set the schedule for when to run this task, and any other options you want to use. +6. Set the schedule for when to run this task, and any other options you want to use. {{< trueimage src="/images/SCALE/DataProtection/AddRsyncTaskSchedOpt.png" alt="Add Rsync Task Schedule and More Options" id="Add Rsync Task Schedule and More Options" >}} @@ -165,9 +208,9 @@ If the non-TruNAS remote server includes an rsync service, make sure it is turne {{< include file="/static/includes/SCALEAdvancedScheduler.md" >}} {{< /expand >}} -8. Select the **Enabled** to enable the task. - Leave cleared to disable the task but not delete the configuration. +7. Leave the **Enabled** selected to enable the task. + Clear the checkbox to disable the task without deleting the configuration. - You can run the rsync task by clicking then the **Run Now** icon for the rsync task. +8. Click **Save**. -9. Click **Save**. +You can run the rsync task by clicking then the **Run Now** icon for the rsync task on the **Rsync Task** widget. From 0d57b739bfee4b828678abc8263a5b96ad39dc35 Mon Sep 17 00:00:00 2001 From: Mic Johnson Date: Thu, 2 Oct 2025 13:58:08 -0400 Subject: [PATCH 14/15] PD-2265 Update the AddSSSHConnectionKeyPair.md tutorial This commit updates the user update information in the AddSSHConnectionKeyPair.md tutorial, and adds the AddSSHConnection.md snippet to section on creating a connection. It also runs a grammar/spell check on the content. --- .../AddSSHConnectionKeyPair.md | 25 +++++++++--------- .../EditUserFullAdminSSHAccess.png | Bin 0 -> 72752 bytes 2 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 static/images/SCALE/DataProtection/EditUserFullAdminSSHAccess.png diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index 541abf06a6..5cbeb586ee 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -20,7 +20,7 @@ Using these widgets, users can establish Secure Socket Shell (SSH) connections. You must also configure and activate the [SSH Service]({{< ref "sshservicescale" >}}) to allow SSH access. -These SSH credentials are used to manage SSH connections specifically for automated tasks such as replication, backups, cloud sync, or other system-to-system operations. You can generate, store, and manage SSH key pairs and define SSH connections that TrueNAS uses for these automated processes. The key pairs managed here are not tied to individual user logins, but are instead used by the system for secure communication with other systems or services. +These SSH credentials are used to manage SSH connections specifically for automated tasks such as replication, backups, cloud sync, or other system-to-system operations. You can generate, store, and manage SSH key pairs and define SSH connections that TrueNAS uses for these automated processes. The key pairs managed here are not tied to individual user but are instead used by the system for secure communication with other systems or services. For individual user SSH access, configure SSH keys in the user account settings under **Credentials > Users**. @@ -28,11 +28,10 @@ For individual user SSH access, configure SSH keys in the user account settings To begin setting up an SSH connection, go to **Credentials > Backup Credentials**. -{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} - -Click **Add** on the **SSH Connections** widget. +{{< include file="/static/includes/AddSSHConnection.md" >}} ### Configuring a Semi-Automatic SSH Connection + The procedure in this section covers the semi-automatic setup method for creating an SSH connection with another TrueNAS system. **Semi-automatic** simplifies setting up an SSH connection with another TrueNAS system without logging in to that system to transfer SSH keys. @@ -43,6 +42,7 @@ You can generate the key pair as part of the semiautomatic configuration or a ma {{< include file="/static/includes/AddSSHConnection.md" >}} ### Configuring a Manual SSH Connection + The instructions in this section cover how to set up an SSH connection to a non-TrueNAS system. To manually set up an SSH connection, you must copy a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt. @@ -50,11 +50,12 @@ A manual setup allows a secure connection without a password prompt. {{< include file="/static/includes/AddManualSSHConnection.md" >}} ### Adding a Public SSH Key to an Admin User Account + This procedure covers adding a public SSH key to the admin account on the TrueNAS system and generating a new SSH Keypair to add to the remote system (TrueNAS or other). 1. Copy the SSH public key text or download it to a text file: - Log into the TrueNAS system that generated the SSH key pair and go to **Credentials > Backup Credentials**. + Log in to the TrueNAS system that generated the SSH key pair and go to **Credentials > Backup Credentials**. Click on the name of the key pair on the **SSH Keypairs** widget to open the key pair for the SSH connection. @@ -62,16 +63,15 @@ This procedure covers adding a public SSH key to the admin account on the TrueNA 2. Add the public key to the admin account on the system where you want to register the public key. - Log into the TrueNAS system where you want to register the public key and go to **Credentials > Users**. + Log in to the TrueNAS system where you want to register the public key and go to **Credentials > Users**. - Edit the admin account. - Click on the expand_more icon and then click **Edit** to open the **Edit User** screen. + Edit the admin account. Select the user, and click **Edit** to open the **Edit User** screen. - {{< trueimage src="/images/SCALE/Credentials/SSHEditUserAuthenticationSettings.png" alt="Add SSH Key" id="Add SSH Key" >}} + {{< trueimage src="/images/SCALE/Credentials/EditUserFullAdminSSHAccess.png" alt="Adding SSH Settings" id="Adding SSH Settings" >}} - Paste the SSH public key text into the **Authorized Keys** field on the **Edit User** configuration screen in the **Authentication** settings. + Verify the user has **TrueNAS Access** selected and the full admin role selected, and the **SSH Access** selected to show the SSH authentication fields. - Alternately, click **Choose File** to select and upload the SSH key. + Paste the SSH public key text into the **Public SSH Key** field in the **Authentication** settings. {{< hint type=important >}} Do not paste the SSH private key. @@ -81,9 +81,10 @@ This procedure covers adding a public SSH key to the admin account on the TrueNA If you need to generate a new SSH key pair, see [Generating SSH Keypairs](#generating-ssh-keypairs). -If the remote NAS is not a TrueNAS system, refer to the documentation for that system, and find their instructions on adding a public SSH key. +If the remote NAS is not a TrueNAS system, refer to the documentation for that system and find its instructions on adding a public SSH key. ## Generating SSH Keypairs + TrueNAS generates and stores [RSA-encrypted](https://tools.ietf.org/html/rfc8017) SSH public and private key pairs on the **SSH Keypairs** widget found on the **Credentials > Backup Credentials** screen. Key pairs are generally used when configuring **SSH Connections** or SFTP **Cloud Credentials**. TrueNAS does not support encrypted key pairs or key pairs with passphrases. diff --git a/static/images/SCALE/DataProtection/EditUserFullAdminSSHAccess.png b/static/images/SCALE/DataProtection/EditUserFullAdminSSHAccess.png new file mode 100644 index 0000000000000000000000000000000000000000..eca79a0fe6a87c43424ef692c44791846d214b11 GIT binary patch literal 72752 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 literal 0 HcmV?d00001 From d238c135b93a210fcd65c08296d7ae1c659602ac Mon Sep 17 00:00:00 2001 From: linzibelle Date: Tue, 7 Oct 2025 13:45:24 -0400 Subject: [PATCH 15/15] Update ReplicationScheduleAndRetentionSteps.md --- static/includes/ReplicationScheduleAndRetentionSteps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/includes/ReplicationScheduleAndRetentionSteps.md b/static/includes/ReplicationScheduleAndRetentionSteps.md index fabd3e9eb2..dfd47ab9f9 100644 --- a/static/includes/ReplicationScheduleAndRetentionSteps.md +++ b/static/includes/ReplicationScheduleAndRetentionSteps.md @@ -2,7 +2,7 @@ 7. Select the schedule and snapshot retention lifetime. - Leave**Replication Schedule** set to **Run On a Schedule** and select the option in the **Schedule** dropdown. + Leave **Replication Schedule** set to **Run On a Schedule** and select the option in the **Schedule** dropdown. Select **Run Once** to set up a replication task you run one time. {{< trueimage src="/images/SCALE/DataProtection/CreateReplicationTaskSetSchedule.png" alt="Set Replication Task Schedule" id="Set Replication Task Schedule" >}}