<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title> – Destinations</title>
    <link>/v5.4-EDGE/adminpanel/Destinations/destination.html</link>
    <description>Recent content in Destinations on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/v5.4-EDGE/adminpanel/Destinations/destination/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Jb5: Local</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/localDestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/localDestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;local&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-local&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;local&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-local&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=290&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;




&lt;h2 id=&#34;locallegacy--localv2&#34;&gt;Local(Legacy) &amp;amp; LocalV2&lt;/h2&gt;
&lt;p&gt;There are two local destination types that each use different backup formats.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local(Legacy)&lt;/strong&gt;: This is a &lt;a href=&#34;destination.html#desination-storage-formats&#34;&gt;Rsync-Based destination&lt;/a&gt; type that stores your backups in a human-readable format and allows you to access the files directly in the destination.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LocalV2&lt;/strong&gt;: This destination uses our &lt;a href=&#34;destination.html#desination-storage-formats&#34;&gt;Jetindex engine&lt;/a&gt; that is available in v5.3+. It utilizes the object storage format and stores the backups in JetBackup&amp;rsquo;s Propietary Backup structure which increases backup effiency and improves incremental functionality.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;FUSE&lt;/strong&gt; File Systems are known to have Rsync errors that can cause unstable backups to those partitions. Therefore, JetBackup cannot support Local Destinations to a &lt;strong&gt;FUSE&lt;/strong&gt; File System. S3FS, Google Drive FUSE, and SSHFS are examples of these FUSE File Systems.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When authenticating, JetBackup 5 will attempt to run a sequence of standard Linux Commands on the destination. Please review the common &lt;a href=&#34;destination.html#commonly-used-binaries-for-localssh&#34;&gt;Linux commands&lt;/a&gt; and ensure the destination/user fully support these commands.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add a Local backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;Designate the Backup Directory for JetBackup to generate backups in and Save.&lt;/p&gt;
&lt;p&gt;An example Local configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/LocalDestination.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/LocalDestination.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;free-disk-space-limit&#34;&gt;Free Disk Space Limit&lt;/h2&gt;
&lt;p&gt;This option checks if the destination&amp;rsquo;s disk space has reached the specified limit before it executes the backup. When enabled, JetBackup will not perform the backup when the used disk space is over the specified limit. Select from the preset limits or input a custom disk space usage limit.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads---only-available-for-localv2&#34;&gt;Maximum Concurrent Threads - (only available for localV2)&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#concurrentRDRtasks&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;For example: &lt;strong&gt;/PATH/TO/FOLDER.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a &amp;ldquo;Read Only&amp;rdquo; Destination to that path.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;Please make sure that your destination path is secure and has the appropriate privileges.
For more information click on &lt;a href=&#34;../faq.html#securestorage&#34;&gt;How To Secure Backup Storage&lt;/a&gt;.&lt;/p&gt;


&lt;/div&gt;



&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;If you are setting up a local Destination pointing to a directory mounted with NFS, only NFSv3 and NFSv4.1 are supported. Please note that custom NFS/Mount configurations can cause issues with JetBackup. Due to the many custom NFS/mount configurations available, we only provide support for NFS v3 or v4.1 mounted with default options.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;rsync-bandwidth-limit&#34;&gt;Rsync Bandwidth Limit&lt;/h2&gt;
&lt;p&gt;This option allows you to specify the maximum data transfer rate.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: SSH</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/SSHDestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/SSHDestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;ssh&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-ssh&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;ssh&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-ssh&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=343&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;






&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;Since we are using some additional Linux based commands besides rsync, this destination must have a “Real” operation system at the other end (Redhat, Centos, Debian etc). When authenticating, JetBackup 5 will attempt to run a sequence of standard &lt;a href=&#34;destination.html#commonly-used-binaries-for-localssh&#34;&gt;Linux Commands&lt;/a&gt; on the destination. Please review the common Linux commands and ensure the destination/user fully support these commands. For Example: A “NAS Backup box” with rsync enabled will not be supported.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please Note:&lt;/strong&gt; &lt;a href=&#34;https://www.rsync.net/&#34;&gt;Rsync.net Cloud Storage&lt;/a&gt; and &lt;a href=&#34;https://docs.hetzner.com/robot/storage-box/&#34;&gt;Hetzner Storage Boxes&lt;/a&gt; are supported SSH destinations.&lt;/p&gt;


&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Additionally, &lt;strong&gt;FUSE&lt;/strong&gt; File Systems are known to have rsync errors that can cause unstable backups to those partitions. Therefore, JetBackup cannot support SSH Destinations to a FUSE File System. S3FS, Google Drive FUSE, and SSHFS are examples of these &lt;strong&gt;FUSE&lt;/strong&gt; File Systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add an SSH backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate SSH &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;Then create an unprivileged user (using root for the backups is not recommended) on the backup destination server, and add the server &amp;amp; login credentials to JetBackup in the &amp;ldquo;Add destination&amp;rdquo; screen.&lt;/p&gt;
&lt;p&gt;*SSH Keys are automatically generated by JetBackup and transferred to the destination server.&lt;/p&gt;
&lt;p&gt;An example SSH configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/SSHDestination.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/SSHDestination.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;free-disk-space-limit&#34;&gt;Free Disk Space Limit&lt;/h2&gt;
&lt;p&gt;This option checks if the destination&amp;rsquo;s disk space has reached the specified limit before it executes the backup. When enabled, JetBackup will not perform the backup when the used disk space is over the specified limit. Select from the preset limits or input a custom disk space usage limit.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. There are two ways to get to each directory: Relative and Absolute&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Relative&lt;/strong&gt; path &amp;ldquo;./&amp;rdquo; will point to the &lt;strong&gt;Absolute&lt;/strong&gt; path of the SSH/Linux user home directory &amp;ldquo;/home/USERNAME&amp;rdquo;
Make sure that you always have the right permission to the path you&amp;rsquo;re using.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a &amp;ldquo;Read Only&amp;rdquo; Destination to that path.&lt;/p&gt;


&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;Please make sure that your destination path is secure and has the appropriate privileges.
For more information click on &lt;a href=&#34;../faq.html#securestorage&#34;&gt;How To Secure Backup Storage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For users using &lt;strong&gt;rsync.net&lt;/strong&gt; or &lt;strong&gt;Hetzner Storage Boxes&lt;/strong&gt;, the Backup Directory path must be a &lt;strong&gt;Relative Path&lt;/strong&gt; and begin with &lt;code&gt;./&lt;/code&gt; Otherwise, you may receive an Access Denied error when trying to save the destination.&lt;/p&gt;
&lt;p&gt;For Clone Destinations, a Backup Directory is &lt;strong&gt;NOT&lt;/strong&gt; required.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;remote-host&#34;&gt;Remote Host&lt;/h2&gt;
&lt;p&gt;A simple hostname or IP address to access the remote backup server.&lt;/p&gt;
&lt;h2 id=&#34;port&#34;&gt;Port&lt;/h2&gt;
&lt;p&gt;Your remote port. Default port is 22.&lt;/p&gt;
&lt;h2 id=&#34;remote-username&#34;&gt;Remote Username&lt;/h2&gt;
&lt;p&gt;The remote user to login with. It is recommended to create a dedicated user for backups and not use root user. The user is &lt;strong&gt;REQUIRED&lt;/strong&gt; to have a home directory.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    For Clone Destinations, ROOT credentials of the destination or an authorized ROOT private key are required.

&lt;/div&gt;

&lt;h2 id=&#34;authentication-type&#34;&gt;Authentication Type&lt;/h2&gt;
&lt;h3 id=&#34;private-key&#34;&gt;Private key&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The path to the private key&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since we are using rsync for backups, we will need to set up access keys between the servers so that we can log in to the remote server without prompting for a password. If empty, it will automatically be created by JetBackup.&lt;/p&gt;
&lt;p&gt;To find a guide for that, please search for &lt;strong&gt;ssh without password&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please visit the following links for specific instructions on how to generate Private keys for &lt;a href=&#34;https://www.rsync.net/resources/howto/ssh_keys.html&#34;&gt;Rsync.net&lt;/a&gt; or &lt;a href=&#34;https://docs.hetzner.com/robot/storage-box/backup-space-ssh-keys/&#34;&gt;Hetzner Storage Box&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;remote-password&#34;&gt;Remote Password&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Password for the provided ssh user.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JetBackup will create all necessary keys for remote login on the destination server.&lt;/p&gt;
&lt;h2 id=&#34;connection-timeout&#34;&gt;Connection Timeout&lt;/h2&gt;
&lt;p&gt;Timeout for the connection. The default value is 60 (in seconds), you can increase this if the connection to the remote server is poor and you might face longer timeout issues.&lt;/p&gt;
&lt;h2 id=&#34;rsync-bandwidth-limit&#34;&gt;Rsync Bandwidth Limit&lt;/h2&gt;
&lt;p&gt;This option allows you to specify the maximum data transfer rate.&lt;/p&gt;
&lt;h2 id=&#34;rsync-prefer-ipv4ipv6&#34;&gt;Rsync Prefer IPv4/IPv6&lt;/h2&gt;
&lt;p&gt;Choose your preferred IP version.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: JetBackup Storage</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/jetStorage.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/jetStorage.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;jetStorage&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-jetStorage&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;jetStorage&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-jetStorage&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=782&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;




&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add a JetBackup Storage backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;JetBackup Storage has two distinct account types, each using a different destination setup:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integrated Storage accounts&lt;/strong&gt; are simplified, &lt;strong&gt;bucket-only&lt;/strong&gt; accounts created directly through JetBackup using the &amp;ldquo;Quick Access&amp;rdquo; signup. They do not expose a standard S3 console for managing buckets/bucket settings, keys, etc. — instead, access is granted via a Quick Access Code generated through the JetBackup Client Area. Use this destination type if you created your storage account through the &lt;a href=&#34;#get-quick-access-code&#34;&gt;&lt;strong&gt;Get Quick Access Code&lt;/strong&gt;&lt;/a&gt; button on this page. You do not need to create an Access/Secret Key pair; the Quick Access Code handles authentication automatically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S3 Storage accounts&lt;/strong&gt; are full JetBackup Storage accounts with standard S3-compatible API and console access, giving you full control over bucket creation, users, regions, and Access/Secret Key management. Because these accounts expose standard S3 credentials and all S3 features, they must be configured using the &lt;a href=&#34;../Destinations/S3.html&#34;&gt;S3-Compatible Destination&lt;/a&gt; instead of this page. Use the guide &lt;a href=&#34;https://docs.jetbackup.com/jetbackup-storage/integrations/integrateJb5.html&#34;&gt;Integration with JetBackup 5&lt;/a&gt; to create your Access/Secret Key pair and associated bucket. Do not use the Quick Access Code button when using Self-Managed JB Storage accounts — it will create a separate Integrated S3 account instead.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Kindly ensure Bucket settings such as Bucket Versioning, Object Lock/Governance Mode, Object Lifecycle are disabled as these settings are &lt;strong&gt;UNSUPPORTED&lt;/strong&gt; and can be expected to cause issues with your backups.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An example JetBackup Storage configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/JetBackupStorage.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/JetBackupStorage.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;get-quick-access-code&#34;&gt;Get Quick Access Code&lt;/h2&gt;
&lt;p&gt;Use the &amp;ldquo;Get Quick Access Code&amp;rdquo; button on the page to use an Integrated JetBackup Storage account. A popup will be displayed prompting you to enter your JetBackup Client Area (billing.jetbackup.com) login credentials or creating a new account. The Access Code will be displayed upon selecting the Region, or a pre-existing bucket. Copy and paste the code in this box to quickly create and authenticate to the destination.&lt;/p&gt;


&lt;video style=&#34;max-width: 700px; width: 100%; display: block; margin: 1rem 0;&#34; autoplay loop muted playsinline&gt;
  &lt;source src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/JetStorage-Quick-Access-Code.webm&#34; type=&#34;video/webm&#34;&gt;
&lt;/video&gt;




&lt;p&gt;During first-time signup, choose a Region that&amp;rsquo;s geographically close to your server for the best backup performance as the region cannot be changed on Integrated JB Storage Accounts.&lt;/p&gt;
&lt;h2 id=&#34;advanced-options-for-jetbackup-storage-destinations&#34;&gt;Advanced Options for JetBackup Storage Destinations&lt;/h2&gt;
&lt;p&gt;Expand these options by clicking &amp;ldquo;Show advanced settings.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;For example: &lt;strong&gt;/PATH/TO/FOLDER.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a &amp;ldquo;Read Only&amp;rdquo; Destination to that path.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Only the following characters are allowed for the Backup Directory Path: &lt;code&gt;A-Z a-z 0-9 and /&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;h2 id=&#34;verify-ssl&#34;&gt;Verify SSL&lt;/h2&gt;
&lt;p&gt;Whether SSL verification is enabled/disabled on the JetBackup Storage destination. [ default: Yes ]&lt;/p&gt;
&lt;h2 id=&#34;http-retries&#34;&gt;HTTP Retries&lt;/h2&gt;
&lt;p&gt;Controls how many retries will be attempted if the destination returns an error for an HTTP call (upload / download / delete). [default: 3 retries]&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Increasing the number of retries may also increase your backup time accordingly as JetBackup tries to upload for a maximum set number of times until either getting a successful response from JetBackup Storage or reaching the set number of retries.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;large-files-upload-chunk-size&#34;&gt;Large files upload chunk size&lt;/h2&gt;
&lt;p&gt;Select the multipart upload chunk size for large files. Lower this value if you find large files are failing to upload. [default: 5120 MB]&lt;/p&gt;
&lt;h2 id=&#34;keep-alive-timeout&#34;&gt;Keep Alive timeout&lt;/h2&gt;
&lt;p&gt;The time in seconds, that the host will allow an idle connection to remain open before it is closed. [default: 60 seconds]&lt;/p&gt;
&lt;h2 id=&#34;max-keep-alive-requests&#34;&gt;Max Keep Alive Requests&lt;/h2&gt;
&lt;p&gt;The maximum number of requests that can be sent on a single connection before closing it. Choose &amp;ldquo;Determined by remote vendor&amp;rdquo; to fetch the maximum keep alive requests automatically. [default: 100]&lt;/p&gt;
&lt;h2 id=&#34;low-speed-timeout&#34;&gt;Low Speed Timeout&lt;/h2&gt;
&lt;p&gt;Require at least 1 byte in the configured interval otherwise the connection is considered slow and connection is aborted. Increase this for slow or unstable connections. [default: 120 seconds]&lt;/p&gt;
&lt;h2 id=&#34;upload-verification&#34;&gt;Upload Verification&lt;/h2&gt;
&lt;p&gt;Ensures the uploaded file is successfully stored on the remote destination by reconnecting and verifying its presence using getObject.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: Enabling this feature may result in significant performance downgrade due to additional verification steps on each uploaded file.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;Object storage is a type of storage where data is stored as objects rather than blocks. This concept is useful for data backup, archiving, and scalability for high-load environments.&lt;/p&gt;
&lt;p&gt;Objects are the entities of data storage in JetBackup Storage buckets. JetBackup Storage objects are comprised of three main parts; the content of the object (data contained in the object including directories or files), the unique object identifier (Unique string used to identify the item within the bucket.), and metadata. Metadata contains information such as name, size, date, security attributes, content type, and URL. Each object has an ACL or Access Control list which dictates who is permitted access to the object. JetBackup Storage has distinct advantages such as allowing you to avoid network bottlenecks as well as a high degree of scalability and data security.&lt;/p&gt;
&lt;h3 id=&#34;jetbackup-storage-vs-traditional-file-system-comparison&#34;&gt;JetBackup Storage vs Traditional File System Comparison&lt;/h3&gt;
&lt;p&gt;JetBackup Storage uses object storage where data is stored as objects with unique identifiers, compared to standard file storage where your data are stored in files and directories and are human-readable.&lt;/p&gt;
&lt;p&gt;As an example, this is how a snap is structured on JetBackup 5&amp;rsquo;s backup format, organized per backup item plus additional metadata for JetBackup&amp;rsquo;s use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── certificate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── cronjob
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── database
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── database_user
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── email
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── ftp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── homedir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── jetbackup.configs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once this data is transferred to a JetBackup Storage Destination, this is then converted and stored as objects and will look something similar to the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── export
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│    ....
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── files
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30008839f00001146
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30009115600001148
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a3000914d000001149
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30009180b0000114b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a300091a820000114c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a300091f3400001151
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│    ....
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Under &amp;ldquo;files&amp;rdquo;, this is where backup data across all the snaps are actually stored, and each object represents a file in the backup. Additionally, there will also be a corresponding &amp;ldquo;snap&amp;rdquo; and &amp;ldquo;export&amp;rdquo; data which stores the information required for JetBackup to read this backup.&lt;/p&gt;
&lt;h3 id=&#34;jetbackup-storage-object-integrity&#34;&gt;JetBackup Storage Object Integrity&lt;/h3&gt;
&lt;p&gt;Please be aware that when utilizing JetBackup Storage destinations, a file hashing mechanism is employed to ensure object integrity during the file upload process. This procedure involves generating a hash of the file, transmitting it to the JetBackup Storage server, uploading the file, and subsequently hashing the file again on the JetBackup Storage server using the same algorithm. JetBackup Storage then compares these two hashes, and if they do not match, the file upload is declined. As this is required for all file uploading to JetBackup Storage, this cannot be disabled at the JetBackup level. With this in mind, we recommend excluding certain files that are regularly written to (logs, temp files, etc.) to mitigate partial backups.&lt;/p&gt;
&lt;h3 id=&#34;jetbackup-storage-documentation&#34;&gt;JetBackup Storage Documentation&lt;/h3&gt;
&lt;p&gt;Additional reading on JetBackup Storage can be found in our &lt;a href=&#34;https://docs.jetbackup.com/jetbackup-storage/index.html&#34;&gt;JetBackup Storage Documentation&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: S3 Compatible</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/S3.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/S3.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;s3&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-s3&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;s3&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-s3&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=782&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When using JetBackup with a S3 Compatible destination, it is expected to see download egress&lt;/strong&gt; as JetBackup pulls in the &lt;code&gt;full&lt;/code&gt; and &lt;code&gt;snap.x&lt;/code&gt; SQLite databases(backup indexing) from the remote destination during each backup job run. Storing and downloading the remote SQLite database files are required to ensure the integrity of the backups stored on the remote destination.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add an S3 compatible backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate S3 &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;Create a bucket on the backup destination (for instructions on creating buckets for your corresponding S3 Vendor, &lt;a href=&#34;#bucket&#34;&gt;please click here&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Kindly ensure Bucket settings such Bucket Versioning, Object Lock/Governance Mode, Object Lifecycle are disabled as these settings are &lt;strong&gt;UNSUPPORTED&lt;/strong&gt; and can be expected to cause issues with your backups.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    If you do not see your S3 Provider listed as an available Vendor, please note that you may be able to add your S3 Compatible Destination as a Custom Vendor.

&lt;/div&gt;

&lt;p&gt;Create &lt;a href=&#34;#accesssecret-key-pair&#34;&gt;New Access Key and Secret Key Pair&lt;/a&gt; and save them for the credentials on creation page.&lt;/p&gt;
&lt;p&gt;An example S3 configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/S3Destination.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/S3Destination.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;vendor&#34;&gt;Vendor&lt;/h2&gt;
&lt;p&gt;Choose which &lt;a href=&#34;destination.html#destination-types&#34;&gt;S3 compatible&lt;/a&gt; vendor you will be using as your S3 destination.&lt;/p&gt;
&lt;h3 id=&#34;custom-vendor&#34;&gt;Custom Vendor&lt;/h3&gt;
&lt;p&gt;A Custom Vendor must be fully S3-Compatible to be used with JetBackup. Choosing to use a custom vendor will require the additional &lt;strong&gt;Endpoint&lt;/strong&gt; field. Please note that JetBackup automatically updates the endpoint with the &lt;a href=&#34;#region&#34;&gt;Region&lt;/a&gt; from below. The correct format for the endpoint will use &lt;code&gt;{region}&lt;/code&gt; in place of the actual region.&lt;/p&gt;
&lt;p&gt;Example Configuration:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/endpoints.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/endpoints.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When connecting to the destination, JetBackup will automatically take the Region &lt;code&gt;us-east-1&lt;/code&gt; and replace the &lt;code&gt;{region}&lt;/code&gt; with the inputted field whenever needed.
For custom endpoint configurations, you can also specify &lt;code&gt;{bucket}&lt;/code&gt; depending on the endpoint format. This is not required for most S3 destinations.
Example Custom Vendors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MEGA S4&lt;/strong&gt; Object Storage *Recommended to use Archived/Compressed structure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linode&lt;/strong&gt; Object Storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backblaze&lt;/strong&gt; *Recommended to use Archived/Compressed structure&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;For example: &lt;strong&gt;/PATH/TO/FOLDER.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a &amp;ldquo;Read Only&amp;rdquo; Destination to that path.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Only the following characters are allowed for the Backup Directory Path: &lt;code&gt;A-Z a-z 0-9 and /&lt;/code&gt;This is in accordance to the &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html&#34;&gt;Amazon S3 Object key naming guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;accesssecret-key-pair&#34;&gt;Access/Secret Key Pair&lt;/h2&gt;
&lt;p&gt;Every S3 Destination has a Access/Secret Key Pair you must use in order to create the destination. Please visit the specific documentation on creating these pairs for each S3 Destination.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;JetBackup Premium Cloud Storage&lt;/strong&gt; - &lt;a href=&#34;https://docs.jetbackup.com/jetbackup-storage/integrations/integrateJb5.html#create-an-access-key-for-the-user&#34;&gt;Creating Access/Secret Keys&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Amazon S3&lt;/strong&gt; - &lt;a href=&#34;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey&#34;&gt;Managing Access keys AWS Console&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare R2&lt;/strong&gt; - &lt;a href=&#34;https://developers.cloudflare.com/r2/api/s3/tokens/&#34;&gt;Creating an Access/Secret Key Pair&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Cloudflare account ID required to create destination. This can be copied from the Cloudflare R2 Dashboard under Account details. For more information, &lt;a href=&#34;https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/&#34;&gt;Find zone and account IDs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Digital Ocean Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key#creating-an-access-key&#34;&gt;Creating an Access Key&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google Cloud Storage&lt;/strong&gt; - &lt;a href=&#34;https://cloud.google.com/storage/docs/authentication/managing-hmackeys&#34;&gt;Creating an HMAC Key&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IBM Cloud Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials&#34;&gt;Service credentials&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Ensure to enable &lt;em&gt;Include HMAC Credential&lt;/em&gt; to receive the key pair properly.
Oracle Cloud Object Storage - Create a Customer Secret Key&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MEGA S4 Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://help.mega.io/megas4/setup-guides/getting-started-with-mega-s4#h-access-and-secret-key&#34;&gt;Create an Access Key&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ScaleWay Elements&lt;/strong&gt; - &lt;a href=&#34;https://docs.oracle.com/en/cloud/paas/big-data-service/bdsmg/create-customer-secret-key.html&#34;&gt;How to Generate an API Key&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wasabi&lt;/strong&gt; - &lt;a href=&#34;https://wasabi-support.zendesk.com/hc/en-us/articles/360019677192-Creating-a-Wasabi-API-Access-Key-Set&#34;&gt;Creating a Wasabi API Access Key Set&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bucket&#34;&gt;Bucket&lt;/h2&gt;
&lt;p&gt;Please visit the specific documentation on creating buckets for each S3 Destination.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;JetBackup Premium Cloud Storage&lt;/strong&gt; - &lt;a href=&#34;https://docs.jetbackup.com/jetbackup-storage/storageGuide/bucketsAndObjects/creatingBucket.html&#34;&gt;Creating storage buckets&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Amazon S3&lt;/strong&gt; - &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html&#34;&gt;How do I create an S3 Bucket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare R2&lt;/strong&gt; - &lt;a href=&#34;https://developers.cloudflare.com/r2/get-started/#2-create-a-bucket&#34;&gt;Creating an R2 Bucket&lt;/a&gt; (Follow Step 2 for bucket creation.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Digital Ocean Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://www.digitalocean.com/docs/spaces/quickstart/&#34;&gt;Create a Space&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google Cloud Storage&lt;/strong&gt; - &lt;a href=&#34;https://cloud.google.com/storage/docs/creating-buckets&#34;&gt;Creating storage buckets&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IBM Cloud Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://cloud.ibm.com/docs/cloud-object-storage&#34;&gt;Getting started with IBM Cloud Object Storage&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Oracle Cloud Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://docs.oracle.com/en/cloud/paas/big-data-service/bdsmg/create-bucket-oracle-object-storage.html&#34;&gt;Create a Bucket in Oracle Object Storage&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; After creating a bucket, take note of the &lt;a href=&#34;https://docs.cloud.oracle.com/en-us/iaas/Content/Object/Tasks/understandingnamespaces.htm&#34;&gt;Namespace&lt;/a&gt; under Bucket Settings for your Destination Configuration on JetBackup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MEGA S4 Object Storage&lt;/strong&gt; - &lt;a href=&#34;https://help.mega.io/megas4/setup-guides/getting-started-with-mega-s4#h-creating-a-bucket&#34;&gt;Creating a Bucket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ScaleWay Elements&lt;/strong&gt; - &lt;a href=&#34;https://www.scaleway.com/en/docs/object-storage-feature/#-Creating-a-Bucket-through-the-Scaleway-Console&#34;&gt;Creating a Bucket through the Scaleway Console&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wasabi&lt;/strong&gt; - &lt;a href=&#34;https://docs.wasabi.com/docs/working-with-buckets-and-objects&#34;&gt;Creating a Bucket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;region&#34;&gt;Region&lt;/h2&gt;
&lt;p&gt;JetBackup will list known regions for the S3 Destination chosen. For a Custom Vendor, the region can be entered manually if required by the vendor. For more information, please see &lt;a href=&#34;#custom-vendor&#34;&gt;Custom Vendor&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;It is best practice to choose the closest region to your server, if available, or consider a vendor with closer regions for best performance.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;verify-ssl&#34;&gt;Verify SSL&lt;/h2&gt;
&lt;p&gt;Whether SSL verification is enabled/disabled on the s3 compatible destination. [ default: Yes ]&lt;/p&gt;
&lt;h2 id=&#34;http-retries&#34;&gt;HTTP Retries&lt;/h2&gt;
&lt;p&gt;Controls how many retries will be attempted if the destination returns an error for an HTTP call (upload / download / delete). [default: 3 retries]&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Increasing the number of retries may also increase your backup time accordingly as JetBackup tries to upload for a maximum set number of times until either getting a successful response from the S3 provider or reaching the set number of retries.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;large-files-upload-chunk-size&#34;&gt;Large files upload chunk size&lt;/h2&gt;
&lt;p&gt;Select the multipart upload chunk size for large files. Lower this value if you find large files are failing to upload. [default: 5120 MB]&lt;/p&gt;
&lt;h2 id=&#34;keep-alive-timeout&#34;&gt;Keep Alive timeout&lt;/h2&gt;
&lt;p&gt;The time in seconds, that the host will allow an idle connection to remain open before it is closed. [default: 60 seconds]&lt;/p&gt;
&lt;h2 id=&#34;max-keep-alive-requests&#34;&gt;Max Keep Alive Requests&lt;/h2&gt;
&lt;p&gt;The maximum number of requests that can be sent on a single connection before closing it. Choose &amp;ldquo;Determined by remote vendor&amp;rdquo; to fetch the maximum keep alive requests automatically. [default: 100]&lt;/p&gt;
&lt;h2 id=&#34;low-speed-timeout&#34;&gt;Low Speed Timeout&lt;/h2&gt;
&lt;p&gt;Require at least 1 byte in the configured interval otherwise the connection is considered slow and connection is aborted. Increase this for slow or unstable connections. [default: 120 seconds]&lt;/p&gt;
&lt;h2 id=&#34;upload-verification&#34;&gt;Upload Verification&lt;/h2&gt;
&lt;p&gt;Ensures the uploaded file is successfully stored on the remote destination by reconnecting and verifying its presence using getObject.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: Enabling this feature may result in significant performance downgrade due to additional verification steps on each uploaded file.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;Object storage is a type of storage where data is stored as objects rather than blocks. This concept is useful for data backup, archiving, and scalability for high-load environments.&lt;/p&gt;
&lt;p&gt;Objects are the entities of data storage in S3 buckets. S3 objects are comprised of three main parts; the content of the object (data contained in the object includiing directories or files), the unique object identifier (Unique string used to identify the item within the bucket.), and metadata. Metadata contains information such as name, size, date, security attributes, content type, and URL. Each object has an ACL or Access Control list which dictates who is permitted access to the object. S3 object storage has distinct advantages such as allowing you to avoid network bottlenecks as well as a high degree of scalability and data security.&lt;/p&gt;
&lt;h3 id=&#34;s3-object-storage-vs-traditional-file-system-comparison&#34;&gt;S3 Object Storage vs Traditional File System Comparison&lt;/h3&gt;
&lt;p&gt;The S3 protocol uses object storage where data is stored as objects with unique identifiers, compared to standard file storage where your data are stored in files and directories and are human-readable.&lt;/p&gt;
&lt;p&gt;As an example, this is how a snap is structured on JetBackup 5&amp;rsquo;s backup format, organized per backup item plus additional metadata for JetBackup&amp;rsquo;s use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── certificate
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── cronjob
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── database
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── database_user
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── email
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── ftp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── homedir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── jetbackup.configs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once this data is transferred to an S3 Compatible Destination, this is then converted and stored as objects and will look something similar to the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── export
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│    ....
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── files
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30008839f00001146
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30009115600001148
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a3000914d000001149
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a30009180b0000114b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a300091a820000114c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   ├── 6258c0a300091f3400001151
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│    ....
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── snap.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── jetbackup.index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Under &amp;ldquo;files&amp;rdquo;, this is where backup data across all the snaps are actually stored, and each object represents a file in the backup. Additionally, there will also be a corresponding &amp;ldquo;snap&amp;rdquo; and &amp;ldquo;export&amp;rdquo; data which stores the information required for JetBackup to read this backup.&lt;/p&gt;
&lt;h3 id=&#34;s3-lifecycle-settings&#34;&gt;S3 Lifecycle Settings&lt;/h3&gt;
&lt;p&gt;It is important to verify proper Lifecycle Settings when setting up an S3 destination to prevent excess storage usage. Some providers will keep all verisons of a file stored by default which can unncessarily increase storage utilization and costs.&lt;/p&gt;
&lt;h3 id=&#34;s3-minimum-storage-retention-policies&#34;&gt;S3 Minimum Storage Retention Policies&lt;/h3&gt;
&lt;p&gt;Some providers may apply a charge for stored objects that have been been deleted before a certain number of days. With this in mind, even though JetBackup is removing files during the integrity check and snapshot cleanup processes, the storage usage and costs may not reflect these changes accurately.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://knowledgebase.wasabi.com/hc/en-us/articles/360058734492-How-does-Wasabi-s-minimum-storage-duration-policy-work&#34;&gt;Wasabi Minimum Storage Duration Policy&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;s3-object-integrity&#34;&gt;S3 Object Integrity&lt;/h3&gt;
&lt;p&gt;Please be aware that when utilizing S3 storage destinations, a file hashing mechanism is employed to ensure object integrity during the file upload process. This procedure involves generating a hash of the file, transmitting it to the S3 server, uploading the file, and subsequently hashing the file again on the S3 server using the same algorithm. S3 then compares these two hashes, and if they do not match, the file upload is declined. As this is required for all file uploading to S3 storage, this cannot be disabled at the JetBackup level. With this in mind, we recommend excluding certain files that are regularly written to (logs, temp files, etc.) to mitigate partial backups.&lt;/p&gt;
&lt;h3 id=&#34;resources&#34;&gt;Resources&lt;/h3&gt;
&lt;p&gt;Additional reading on the S3 storage type can be found &lt;a href=&#34;https://www.redhat.com/en/topics/data-storage/file-block-object-storage&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: FTP</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/ftpdestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/ftpdestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;ftp&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-ftp&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;ftp&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-ftp&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=430&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;






&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;JetBackup does not support FTP servers hosted on windows as a backup destination.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add an FTP backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;FTP destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;Then create a new FTP user and password on the backup destination server. Then create the destination and add the credentials in the &amp;ldquo;Add Destination Screen&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;An example FTP Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/FTPdestination.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/FTPdestination.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. There are two ways to get to each directory: Relative and Absolute
&lt;strong&gt;Relative path&lt;/strong&gt; &amp;ldquo;./&amp;rdquo; will point to the &lt;strong&gt;Absolute&lt;/strong&gt; path of the SSH/Linux user home directory &amp;ldquo;/home/USERNAME&amp;rdquo;
Make sure that you always have the right permission to the path you&amp;rsquo;re using.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a “Read Only” Destination to that path.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;remote-host&#34;&gt;Remote Host&lt;/h2&gt;
&lt;p&gt;A simple hostname or IP address to access the remote backup server.&lt;/p&gt;
&lt;h2 id=&#34;port&#34;&gt;Port&lt;/h2&gt;
&lt;p&gt;Your remote port. Default port is 21.&lt;/p&gt;
&lt;h2 id=&#34;remote-username&#34;&gt;Remote Username&lt;/h2&gt;
&lt;p&gt;The remote user to login with. It is recommended to create a dedicated user for backups and not use root user.&lt;/p&gt;
&lt;h2 id=&#34;remote-password&#34;&gt;Remote Password&lt;/h2&gt;
&lt;p&gt;Password for the provided FTP user.&lt;/p&gt;
&lt;h2 id=&#34;connection-timeout&#34;&gt;Connection Timeout&lt;/h2&gt;
&lt;p&gt;Timeout for the connection. The default value is 30 (in seconds), you can increase this if the connection to the remote server is poor and you might face longer timeout issues.&lt;/p&gt;
&lt;h2 id=&#34;connection-retries&#34;&gt;Connection Retries&lt;/h2&gt;
&lt;p&gt;Number of times JetBackup will attempt to connect to the destination. The default value is 3 Retries. You can increase this value but unsuccessful connections will be made longer.&lt;/p&gt;
&lt;h2 id=&#34;secure-ssl-ftp-connection&#34;&gt;Secure SSL-FTP Connection&lt;/h2&gt;
&lt;p&gt;Support for SSL-FTP connections providing greater security through the use of SSL certificates.&lt;/p&gt;
&lt;h2 id=&#34;passive-mode&#34;&gt;Passive Mode&lt;/h2&gt;
&lt;p&gt;In passive mode, data connections are initiated by the client, rather than by the server. It may be needed if the client is behind firewall.&lt;/p&gt;
&lt;h2 id=&#34;additional-info&#34;&gt;Additional Info&lt;/h2&gt;
&lt;h3 id=&#34;vsftpd-configuration-requirements&#34;&gt;vsftpd Configuration Requirements&lt;/h3&gt;
&lt;p&gt;If you are using vsftpd as your FTP server, the following options must be enabled in your &lt;code&gt;/etc/vsftpd.conf&lt;/code&gt; file. These options are &lt;strong&gt;not&lt;/strong&gt; enabled by default on installation.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chroot_local_user&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;YES
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;allow_writeable_chroot&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;YES
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;write_enable&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;YES
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;chroot_local_user&lt;/code&gt; and &lt;code&gt;allow_writeable_chroot&lt;/code&gt; must be enabled to allow JetBackup to create the backup directory on the remote server. Without these, the backup will fail with below error -&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Error: Failed creating dir &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/backup&amp;#39;&lt;/span&gt;. Error: QUOT command failed with &lt;span style=&#34;color:#ae81ff&#34;&gt;550&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;write_enable&lt;/code&gt; must also be set to allow JetBackup write permissions on the FTP server.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: SFTP</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/SFTPdestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/SFTPdestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;sftp&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-sftp&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;sftp&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-sftp&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=496&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;






&lt;div class=&#34;alert alert-warning&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;JetBackup does not support SFTP servers hosted on windows as a backup destination.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add an SFTP backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate SFTP &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;When creating the Destination, you will be prompted to install the SFTP plugin and can click &amp;ldquo;Install Now&amp;rdquo; to install and enable the plugin. Be sure that you&amp;rsquo;ve created a new FTP user on the backup destination server before proceeding.&lt;/p&gt;
&lt;p&gt;Next, fill in the Backup Directory with the path you&amp;rsquo;d like to store your backups, along with the Remote Host, SFTP port, Remote Username, and authentication details. If you&amp;rsquo;d like to use a SSH Private Key or SSH Private Key with passphrase, please ensure you&amp;rsquo;ve authorized key on the FTP users authorized_keys file on the destination first.&lt;/p&gt;
&lt;p&gt;Next, click &amp;ldquo;Save&amp;rdquo; or &amp;ldquo;Apply&amp;rdquo; to save the destination.&lt;/p&gt;
&lt;p&gt;An example SFTP Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/SFTPdestination.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/SFTPdestination.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. There are two ways to get to each directory: Relative and Absolute
&lt;strong&gt;Relative path&lt;/strong&gt; &amp;ldquo;./&amp;rdquo; will point to the &lt;strong&gt;Absolute&lt;/strong&gt; path of the SSH/Linux user home directory &amp;ldquo;/home/USERNAME&amp;rdquo;
Make sure that you always have the right permission to the path you&amp;rsquo;re using.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a “Read Only” Destination to that path.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;remote-host&#34;&gt;Remote Host&lt;/h2&gt;
&lt;p&gt;A simple hostname or IP address to access the remote backup server.&lt;/p&gt;
&lt;h2 id=&#34;port&#34;&gt;Port&lt;/h2&gt;
&lt;p&gt;Your remote port. Default port is 21.&lt;/p&gt;
&lt;h2 id=&#34;remote-username&#34;&gt;Remote Username&lt;/h2&gt;
&lt;p&gt;The remote user to login with. It is recommended to create a dedicated user for backups and not use root user.&lt;/p&gt;
&lt;h2 id=&#34;authentication-type&#34;&gt;Authentication Type&lt;/h2&gt;
&lt;h3 id=&#34;private-key&#34;&gt;Private key&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The path to the private key.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SSH keys with or without a passphrase are supported. For optimal security, we recommend creating a SSH key with a passphrase. Please verify that the SSH Public Key is added to the remote user authorized_keys file before creating the destination.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;Please review the following guide for instructions on &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9&#34;&gt;creating a SSH key with password here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please visit the following links for specific instructions on how to generate Private keys for &lt;a href=&#34;https://www.rsync.net/resources/howto/ssh_keys.html&#34;&gt;Rsync.net&lt;/a&gt; or &lt;a href=&#34;https://docs.hetzner.com/robot/storage-box/backup-space-ssh-keys/&#34;&gt;Hetzner Storage Box&lt;/a&gt;.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;remote-password&#34;&gt;Remote Password&lt;/h2&gt;
&lt;p&gt;Password for the provided FTP user.&lt;/p&gt;
&lt;h2 id=&#34;connection-timeout&#34;&gt;Connection Timeout&lt;/h2&gt;
&lt;p&gt;Timeout for the connection. The default value is 30 (in seconds), you can increase this if the connection to the remote server is poor and you might face longer timeout issues.&lt;/p&gt;
&lt;h2 id=&#34;connection-retries&#34;&gt;Connection Retries&lt;/h2&gt;
&lt;p&gt;Number of times JetBackup will attempt to connect to the destination. The default value is 3 Retries. You can increase this value but unsuccessful connections will be made longer.&lt;/p&gt;
&lt;h2 id=&#34;performancetroubleshooting&#34;&gt;Performance/Troubleshooting&lt;/h2&gt;
&lt;p&gt;The SFTP destination uses the OpenSSH sftp-server file transfer daemon. If you receive &lt;strong&gt;Error: Expected NET_SFTP_VERSION&lt;/strong&gt; when creating the destination, please enable the sftp-server or internal-sftp subsystems in the remote destination&amp;rsquo;s /etc/ssh/sshd_config in order to add the SFTP destination to JetBackup 5.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# override default of no subsystems&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subsystem       sftp    /usr/libexec/openssh/sftp-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The SFTP destination will open up to 10 Connections per Backup Fork by default. The &lt;em&gt;Maximum Concurrent Threads&lt;/em&gt; setting will determine the number of Connections per Backup Fork. If you encounter abnormally slow backups or retry errors, you may be reaching session/IO limits on the destination.&lt;/p&gt;
&lt;p&gt;If your destination is returning rate limit errors, first try reducing the number of &lt;em&gt;Maximum Concurrent Threads&lt;/em&gt; or the number of Concurrent Backup Tasks.&lt;/p&gt;
&lt;p&gt;Otherwise, you can modify the &amp;ldquo;MaxSessions&amp;rdquo; and &amp;ldquo;MaxStartups&amp;rdquo; settings on the destination &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; to allow a higher volume of sftp-server processes to be opened on the destination and avoid rate limiting. For more information on these settings, please see the &lt;a href=&#34;https://man.openbsd.org/sshd_config#MaxSessions&#34;&gt;sshd_config manual&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaxSessions &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaxStartups &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Jb5: Google Drive</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/GoogleDriveDestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/GoogleDriveDestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;google_drive&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-google_drive&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;google_drive&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-google_drive&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=588&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;






&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: We do not recommend using the Integrated Google Drive Project for Incremental backups due to the write limits. To reduce the amount of rate limiting from Google Drive, kindly attempt to backup using a Compressed/Archived backup type, or lowering the “Maximum Concurrent Threads” value for the destination. Kindly refer to Google Drive’s API and Upload limitations  &lt;a href=&#34;https://developers.google.com/drive/api/guides/limits&#34;&gt;HERE&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;We suggest using the Custom Google Drive Project if you encounter any rate limiting.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add a Google Drive backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate Google Drive &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;When creating the Destination, you will be prompted to install the Google Drive plugin and can click &amp;ldquo;Install Now&amp;rdquo; to install and enable the plugin.&lt;/p&gt;
&lt;p&gt;Next, fill in the Backup Directory with the path you&amp;rsquo;d like to store your backups.&lt;/p&gt;
&lt;p&gt;Then select the Google Drive Project (&lt;a href=&#34;#integrated&#34;&gt;Integrated&lt;/a&gt;/&lt;a href=&#34;#custom&#34;&gt;Custom&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After selecting a Google Drive Project, click &amp;ldquo;Request Access Code&amp;rdquo; to authorize JetBackup to read and store files it creates using your Google Drive account. Proceed through the popup window until you receive an Access Code, which you can then paste in the &amp;ldquo;Request Access Code&amp;rdquo; text field.&lt;/p&gt;
&lt;p&gt;An example of the Google App authorization popup after clicking &amp;ldquo;Request Access Code&amp;rdquo;. Please be sure to check the box &amp;ldquo;See, edit, create, and delete only the specific Google Drive files you use with this app&amp;rdquo; to allow JB the proper permissions:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveAccessCode.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveAccessCode.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;integrated&#34;&gt;Integrated&lt;/h3&gt;
&lt;p&gt;An example Integrated Google Drive Project Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveIntegrated.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveIntegrated.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;custom&#34;&gt;Custom&lt;/h3&gt;
&lt;p&gt;Follow these steps to setup your Custom Google Drive Project:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;a href=&#34;https://console.developers.google.com/cloud-resource-manager&#34;&gt;https://console.developers.google.com/cloud-resource-manager&lt;/a&gt; and sign in with the Google Account you would like to create the custom project on.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/createProject.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/createProject.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Type in your project Name and then click the &amp;ldquo;CREATE&amp;rdquo; button&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/projectName.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/projectName.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Enable Google Drive API for the project&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Search for &amp;ldquo;Google Drive API&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/searchBar.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/searchBar.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enable it for the project&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/googleDriveAPIEnable.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/googleDriveAPIEnable.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure the OAuth Consent Screen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Click the drawer icon left to Google Cloud logo -&amp;gt; APIs &amp;amp; services -&amp;gt; OAuth Consent Screen to navigate to the Google Auth Platform page and then, press the &amp;ldquo;Get started&amp;rdquo; button. The consent screen must be configured prior to creating an OAuth Client ID for JetBackup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/oauthConsent.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/oauthConsent.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Under &amp;ldquo;App Name&amp;rdquo; type the backup product&amp;rsquo;s name, such as &amp;ldquo;JetBackup&amp;rdquo;. Fill in the &amp;ldquo;User Support Email&amp;rdquo; field with your email address.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/appName.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/appName.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the Audience&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/audience.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/audience.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add your email in the Contact Information&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/contactInfo.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/contactInfo.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Review Google API Services: User Data Policy and then press the &amp;ldquo;Create&amp;rdquo; button.&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Configure the &amp;ldquo;Scopes&amp;rdquo; for your project. Scopes control what access your &amp;ldquo;App&amp;rdquo; has to your Google Drive. JetBackup will require read and write ability to be able to back up to your Google Drive.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Click the &amp;ldquo;Add or Remove Scopes&amp;rdquo; button&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/scopes.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/scopes.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you should see a &amp;ldquo;Update Selected Scopes&amp;rdquo; panel on the right hand side. Please select the following scopes so you can add the Destination to JetBackup.
The first two scopes are required to successfully authenticate when you use &amp;ldquo;Request Access Code&amp;rdquo; in a later step.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;../auth/userinfo.email&lt;/strong&gt; - View your email address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;openid&lt;/strong&gt; - Associate you with your personal info on Google&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;../auth/documents&lt;/strong&gt; - See, edit, create, and delete all of your Google Drive files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;../auth/drive&lt;/strong&gt; - See, edit, create, and delete all of your Google Drive files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/updateScopes.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/updateScopes.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The scopes &lt;strong&gt;../auth/documents&lt;/strong&gt; and &lt;strong&gt;../auth/drive&lt;/strong&gt; may not appear on the list and can be added in the &amp;ldquo;Manually add scopes&amp;rdquo; field.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/documents
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Create OAuth client ID&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Navigate to the Clients page on the left side bar and press &amp;ldquo;Create client&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/createClient.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/createClient.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Choose &amp;ldquo;Web Application&amp;rdquo; under the Application type dropdown menu and choose a name to identify the OAuth client such as &amp;ldquo;JetBackupOAuth&amp;rdquo;. Under Authorized redirect URIs, click on &amp;ldquo;+ ADD URI&amp;rdquo;, specify &lt;code&gt;https://auth.jetbackup.com/google/&lt;/code&gt; on the URI field then click the &amp;ldquo;Create&amp;rdquo; button.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/webApp.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/webApp.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;OAuth client created&amp;rdquo; modal should appear. Save the Client ID and Client secret to use when adding the Custom Google Drive destination in JetBackup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/oauthCreated.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/oauthCreated.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; You will need to add your email address as a “Test User” in the Audience page to authenticate with Google Drive if you do not move the project out of “Testing” status in the Google Developer Console. You can skip adding a “Test User” by clicking “Publish App” from the Audience when complete.&lt;/p&gt;


&lt;/div&gt;

&lt;p&gt;In JetBackup, fill in the &lt;code&gt;OAuth 2.0 Client Id&lt;/code&gt; and &lt;code&gt;OAuth 2.0 Client Secret&lt;/code&gt; fields with the Client ID and Client secret that was generated earlier.&lt;/p&gt;
&lt;p&gt;An example Custom Google Drive Project Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveCustom.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/GoogleDriveCustom.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.
For example: &lt;strong&gt;/PATH/TO/FOLDER&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a “Read Only” Destination to that path.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;oauth-20-client-id-custom-google-drive-project&#34;&gt;OAuth 2.0 Client Id (Custom Google Drive Project)&lt;/h2&gt;
&lt;p&gt;The unique identifier generated in the Google Cloud Console that identifies the application (JetBackup) requesting authorization to access Google Drive.&lt;/p&gt;
&lt;h2 id=&#34;oauth-20-client-secret-custom-google-drive-project&#34;&gt;OAuth 2.0 Client Secret (Custom Google Drive Project)&lt;/h2&gt;
&lt;p&gt;The confidential key generated in the Google Cloud Console that is used to authenticate the application (JetBackup) when requesting authorization tokens from Google Drive.&lt;/p&gt;
&lt;h2 id=&#34;request-access-code&#34;&gt;Request Access Code&lt;/h2&gt;
&lt;p&gt;This option allows you to generate a secure access token for the purpose of storing and retrieving snapshots that were uploaded from your server using JetBackup.&lt;/p&gt;
&lt;h2 id=&#34;http-retries&#34;&gt;HTTP Retries&lt;/h2&gt;
&lt;p&gt;Controls how many retries will be attempted if the destination returns an error for an HTTP call (upload / download / delete). [ default: 3 retries ]&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: Dropbox</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/DropBoxDestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/DropBoxDestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;dropbox&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-dropbox&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;dropbox&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-dropbox&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=666&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;




&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add a Dropbox backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate Dropbox &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;When creating the Destination, you will be prompted to install the Dropbox plugin and can click &amp;ldquo;Install Now&amp;rdquo; to install and enable the plugin.&lt;/p&gt;
&lt;p&gt;Next, fill in the Backup Directory with the path you&amp;rsquo;d like to store your backups.&lt;/p&gt;
&lt;p&gt;Then, click &amp;ldquo;Request Acces Code&amp;rdquo; to authorize JetBackup to read and store files it creates using your Dropbox account. Proceed through the popup window until you receive an Access Code, which you can then paste in the &amp;ldquo;Request Acces Code&amp;rdquo; text field.&lt;/p&gt;
&lt;p&gt;An example Dropbox Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/Dropbox.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/Dropbox.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An example of the Dropbox App authorization popup after clicking &amp;ldquo;Request Access Code&amp;rdquo;. If you are already signed in to Dropbox, you will receive a new access code automatically.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/DropboxAccessCode.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/DropboxAccessCode.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.
For example: &lt;strong&gt;/PATH/TO/FOLDER&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a “Read Only” Destination to that path.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;request-access-code&#34;&gt;Request Access Code&lt;/h2&gt;
&lt;p&gt;This option allows you to generate a secure access token for the purpose of storing and retrieving snapshots that were uploaded from your server using JetBackup.&lt;/p&gt;
&lt;h2 id=&#34;http-retries&#34;&gt;HTTP Retries&lt;/h2&gt;
&lt;p&gt;Controls how many retries will be attempted if the destination returns an error for an HTTP call (upload / download / delete). [ default: 3 retries ]&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Jb5: OneDrive</title>
      <link>/v5.4-EDGE/adminpanel/Destinations/OneDriveDestination.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/v5.4-EDGE/adminpanel/Destinations/OneDriveDestination.html</guid>
      <description>
        
        
        

&lt;div style=&#34;text-align: center;&#34;&gt;
    &lt;h3&gt;For video tutorials, please click here: &lt;i class=&#34;fa-brands fa-youtube open-video&#34; onclick=&#34;openModal(&#39;onedrive&#39;)&#34;&gt;&lt;/i&gt;

&lt;div id=&#34;videoModal-onedrive&#34; class=&#34;modal&#34;&gt;
    &lt;div class=&#34;modal-content&#34;&gt;
        &lt;button class=&#34;close&#34; onclick=&#34;closeModal(&#39;onedrive&#39;)&#34;&gt;x&lt;/button&gt;
        &lt;iframe id=&#34;youtubePlayer-onedrive&#34; width=&#34;600&#34; height=&#34;340&#34;
                 src=&#34;https://www.youtube.com/embed/rDA24ZhYtA4?enablejsapi=1&amp;start=727&#34;
                frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    .modal {
        display: none;
        position: fixed;
        z-index: 1000;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
    }

    .modal-content {
        justify-content: center;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: transparent;
        padding: 10px;
        max-width: 80%;
        border-radius: 10px;
        width: auto; 
        height: auto;
        border: transparent;
    }

    .close {
        position: absolute;
        top: 10px;
        right: 15px;
        font-size: 16px;
        cursor: pointer;
        color: white;
        background: none;
        border: none;
        padding: 5px;
    }

    .open-video {
        cursor: pointer !important;
        font-size: 30px !important; 
        padding: 0px 0px !important;
        margin: 0;
        background: none !important;
        color: #fd0808 !important;
        position: relative !important;
        transform: translate(0%, 10%);
    }
&lt;/style&gt;

&lt;script&gt;
    function openModal(videoId) {
        console.log(&#34;Opening modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        if (modal) {
            modal.style.display = &#34;block&#34;;
        } else {
            console.error(&#34;Modal not found: videoModal-&#34; + videoId);
        }
    }

    function closeModal(videoId) {
        console.log(&#34;Closing modal: videoModal-&#34; + videoId);
        var modal = document.getElementById(&#34;videoModal-&#34; + videoId);
        var iframe = document.getElementById(&#34;youtubePlayer-&#34; + videoId);

        if (modal) {
            modal.style.display = &#34;none&#34;;
        }

        if (iframe) {
            iframe.src = iframe.src;
        }
    }

    
    window.onclick = function(event) {
        var modals = document.querySelectorAll(&#34;.modal&#34;);
        modals.forEach(function(modal) {
            if (event.target === modal) {
                var videoId = modal.id.replace(&#34;videoModal-&#34;, &#34;&#34;);
                closeModal(videoId);
            }
        });
    }
&lt;/script&gt;
&lt;/h3&gt;&lt;br&gt;
&lt;/div&gt;




&lt;h2 id=&#34;creating-the-destination&#34;&gt;Creating the Destination&lt;/h2&gt;
&lt;p&gt;This guide shows how to add a OneDrive backup destination to JetBackup.&lt;/p&gt;
&lt;p&gt;First make sure that you have the appropriate OneDrive &lt;a href=&#34;../Plugins/plugins.html&#34;&gt;destination plugin&lt;/a&gt; installed and enabled.&lt;/p&gt;
&lt;p&gt;When creating the Destination, you will be prompted to install the OneDrive plugin and can click &amp;ldquo;Install Now&amp;rdquo; to install and enable the plugin.&lt;/p&gt;
&lt;p&gt;Next, fill in the Backup Directory with the path you&amp;rsquo;d like to store your backups.&lt;/p&gt;
&lt;p&gt;Then, click &amp;ldquo;Get Authorization Code&amp;rdquo; to authorize JetBackup to read and store files it creates using your OneDrive account. Proceed through the popup window until you receive an Authorization Code, which you can then paste in the &amp;ldquo;Get Authorization Code&amp;rdquo; text field.&lt;/p&gt;
&lt;p&gt;An example OneDrive Configuration page for the destination:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/OneDrive.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/OneDrive.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An example of the OneDrive App authorization popup after clicking &amp;ldquo;Get Authorization Code&amp;rdquo;. If you are already signed in to OneDrive, you will receive a new Authorization code after accepting the required scopes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/v5.4-EDGE/images/adminpanel/Destinations/OneDriveAccessCode.PNG&#34;&gt;&lt;img src=&#34;/v5.4-EDGE/images/adminpanel/Destinations/OneDriveAccessCode.PNG&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;destination-name&#34;&gt;Destination Name&lt;/h2&gt;
&lt;p&gt;Specify a unique name for your destination. This will be used internally for your convenience.&lt;/p&gt;
&lt;h2 id=&#34;read-only&#34;&gt;Read Only&lt;/h2&gt;
&lt;p&gt;This option allows you to add the destination as a &amp;ldquo;Read Only&amp;rdquo; destination. You can only restore and download existing backups from a read-only destination. Read Only is required if the Backup Directory is already owned by another destination/server. &lt;strong&gt;This option is only selectable upon creating the destination and will be automatically enabled for any destinations added during a Disaster Recovery.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;owner&#34;&gt;Owner&lt;/h2&gt;
&lt;p&gt;Specify the owner for this destination. This grants the owner and its parent account(s) permission to modify and delete this destination. Please note that the owner specified will also need &lt;a href=&#34;../permissions.html#defaultpermissions&#34;&gt;Can Manage Destinations&lt;/a&gt; permission granted under the &lt;a href=&#34;../permissions.html&#34;&gt;Permissions&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&#34;maximum-concurrent-threads&#34;&gt;Maximum Concurrent Threads&lt;/h2&gt;
&lt;p&gt;This option allows you to set the number of worker threads that can be used by the destination for upload/download/get/delete requests. This will be shared evenly across the number of &lt;a href=&#34;../settings.html#settingsperformance&#34;&gt;Concurrent Tasks&lt;/a&gt; set for Backup or Restore/Download. As the tasks complete, the available threads will be allocated to the remaining active tasks up to the set limit. You can lower this value if you receive rate-limit errors from the remote destination.&lt;/p&gt;
&lt;h2 id=&#34;backup-directory&#34;&gt;Backup Directory&lt;/h2&gt;
&lt;p&gt;This will be our starting point when accessing this destination. Always use the absolute path and make sure to start with &amp;ldquo;/&amp;rdquo;.
For example: &lt;strong&gt;/PATH/TO/FOLDER&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The absolute path must be unique and can not be used by two different Destination Configurations. If a backup directory is already owned by another JetBackup Destination, you may create a “Read Only” Destination to that path.&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;request-access-code&#34;&gt;Request Access Code&lt;/h2&gt;
&lt;p&gt;This option allows you to generate a secure access token for the purpose of storing and retrieving snapshots that were uploaded from your server using JetBackup.&lt;/p&gt;
&lt;h2 id=&#34;http-version&#34;&gt;HTTP Version&lt;/h2&gt;
&lt;p&gt;Select the HTTP version that will be used to connect with the destinations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Default - selects the version configured on the destination&lt;/li&gt;
&lt;li&gt;HTTP/1.1&lt;/li&gt;
&lt;li&gt;HTTP/1.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;http-retries&#34;&gt;HTTP Retries&lt;/h2&gt;
&lt;p&gt;Controls how many retries will be attempted if the destination returns an error for an HTTP call (upload / download / delete). [ default: 3 retries ]&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
