Ubuntu20.04でDuplicityを使用してバックアップする方法

システム管理者であり、データのバックアップよりもサーバーの管理を担当している場合は、最も重要なタスクの1つです。 したがって、タスクを簡単にするバックアップツールに関する十分な知識が必要です。

Duplicityは、librsyncとGnuPGの上に構築された、無料のオープンソースの高度なコマンドラインバックアップユーティリティです。 ローカルまたはリモートコンピューターに保存するために、デジタル署名、バージョン管理、暗号化されたtarボリュームを生成します。 Duplicityは、ssh / scp、rsync、ftp、DropBox、Amazon S3、Google Docs、Google Drive、ローカルファイルシステムなど、ファイルサーバーに接続するための多くのプロトコルをサポートしています。 OneDrive、WebDAVおよびその他多数。

このチュートリアルでは、Duplicityをインストールして構成し、Ubuntu20.04サーバーで手動で実行してバックアップを自動化する方法を示します。

前提条件

•• Ubuntu20.04を実行している2台のサーバー。
•• 静的IPアドレス104.245.32.161はDuplicityサーバーで構成され、104.245.32.194はバックアップサーバーで構成されます。
•• ルートパスワードはサーバーで構成されます。

入門

開始する前に、パッケージを最新バージョンに更新する必要があります。 次のコマンドを使用して、それらすべてを更新できます。

apt-get update -y

すべてのパッケージを更新した後、サーバーにいくつかの必要な依存関係をインストールする必要もあります。 次のコマンドを実行して、それらすべてをインストールできます。

apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y

すべてのパッケージがインストールされたら、Duplicityのインストールに進むことができます。

Duplicityをインストールする

デフォルトでは、DuplicityはUbuntu20.04のデフォルトリポジトリで利用できます。 次のコマンドを実行するだけでインストールできます。

apt-get install duplicity -y

インストールしたら、次のコマンドを使用して、インストールされているDuplicityのバージョンを確認します。

duplicity --version

次の出力が表示されます。

duplicity 0.8.12

SSHパスワードレス認証を構成する

次に、RSA 2048ビット暗号化SSHキーを生成し、それを使用して、パスワードを指定せずにリモートシステムで安全に認証する必要があります。

まず、次のコマンドを使用してRSAキーを生成します。

ssh-keygen -t rsa -m PEM

以下に示すように、キーとパスフレーズの場所を指定するように求められます。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:BwKSLtXT+WHhPqhu3MIH07QEb0c5Zh/f0XolMRyQaQE root@ubuntu2004
The key's randomart image is:
+---[RSA 3072]----+
| .o.. ..oE.o*++ |
| o.+.o.O . + +.o|
| o +.*o+ + . +.|
|. . =+o.. . o .|
| . =.oS . . |
| o.o o |
| o.+ |
| .= o |
| ..o |
+----[SHA256]-----+

次に、次のコマンドを使用して、生成されたRSAキーをリモートバックアップサーバーにコピーします。

ssh-copy-id [email protected]

以下に示すように、リモートサーバーのパスワードを入力するように求められます。

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

GPGキーを生成する

次に、データをリモートバックアップサーバーに転送する前に、データを暗号化するためのGPGキーを生成する必要もあります。 GPGキーは、サーバー間で転送されるデータのセキュリティと暗号化の追加レイヤーを提供するために使用されます。

Duplicityサーバーで次のコマンドを使用してGPGキーを作成できます。

gpg --gen-key

以下に示すように、キー生成プロセス中にGPGキーのパスワードを入力するように求められます。

gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

GnuPG needs to construct a user ID to identify your key.

Real name: Hitesh Jethva
Email address: [email protected]
You selected this USER-ID:
"Hitesh Jethva <[email protected]>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key E8A334EB747BAD6A marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A.rev'
public and secret key created and signed.

pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid Hitesh Jethva <[email protected]>
sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]

上記のコマンドはGPGキーを生成し、それを/root/.gnupg/ディレクトリに保存します。

GPGキーを忘れた場合は、次のコマンドで見つけることができます。

gpg --list-keys

次の出力が得られるはずです。

gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2022-07-30
/root/.gnupg/pubring.kbx
------------------------
pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid [ultimate] Hitesh Jethva <[email protected]>
sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]

バックアップディレクトリを作成する

次に、バックアップを保存するためにバックアップサーバー上にディレクトリを作成する必要があります。

バックアップサーバーにログインし、次のコマンドを使用してバックアップディレクトリを作成します。

mkdir -p /remotebackup/Duplicity/

終了したら、次のステップに進むことができます。

手動バックアップを実行する

この時点で、Duplicityがインストールおよび構成されています。 それでは、Duplicityサーバーで手動バックアップを実行してみましょう。

次のコマンドを実行して、/ etcという名前のディレクトリを/ remotebackup / Duplicity /ディレクトリ内のリモートバックアップサーバー(104.245.32.194)にバックアップします。

duplicity /etc/ sftp://[email protected]//remotebackup/Duplicity/

以下に示すように、バックアップ操作を実行するには、GPGキーのパスワードを入力する必要があります。

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase for decryption:
Retype passphrase for decryption to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110093.56 (Thu Jul 30 11:54:53 2020)
EndTime 1596110095.24 (Thu Jul 30 11:54:55 2020)
ElapsedTime 1.67 (1.67 seconds)
SourceFiles 1413
SourceFileSize 2698964 (2.57 MB)
NewFiles 1413
NewFileSize 2698964 (2.57 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 1413
RawDeltaSize 1857098 (1.77 MB)
TotalDestinationSizeChange 493579 (482 KB)
Errors 0
-------------------------------------------------

次に、リモートバックアップサーバーにログインし、次のコマンドを使用してバックアップを確認します。

ls / remotebackup / Duplicity /

次の出力が表示されます。

duplicity-full.20200730T115821Z.manifest.gpg duplicity-full-signatures.20200730T115821Z.sigtar.gpg
duplicity-full.20200730T115821Z.vol1.difftar.gpg

cronでバックアップを自動化

指定した時間間隔で自動的に実行するようにCronジョブを設定することにより、バックアップを毎日または毎週スケジュールすることもできます。

まず、/ rootディレクトリの下にパスフレーズファイルを作成して、言い換えのインタラクティブなプロンプトなしでパスフレーズを自動的に渡す必要があります。

次のコマンドで作成できます。

nano /root/.passphrase

以下に示すように、GPGキーのパスワードを追加します。

PASSPHRASE="admin"

Save と close 次に、ファイルを次のコマンドで保護します。

chmod 600 /root/.passphrase

次に、毎日実行される/etc/cron.daily/ディレクトリ内に毎日のバックアップスクリプトを作成します。

nano /etc/cron.daily/duplicity.inc

次の行を追加します。

#!/bin/sh

test -x $(which duplicity) || exit 0
. /root/.passphrase

export PASSPHRASE
$(which duplicity) --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --exclude /var --exclude /home --exclude /swapfile --exclude /proc --exclude /sys --exclude /tmp --exclude /usr / sftp://[email protected]//remotebackup/Duplicity/

Save と close 終了したときのファイル。 次に、次のコマンドを使用して、スクリプトに実行可能権限を付与します。

chmod +x /etc/cron.daily/duplicity.inc

上記のスクリプトは、一部のフォルダを除くルートサーバー全体をバックアップします。

次に、スクリプトをテストして、すべてが正しく機能することを確認します。

/etc/cron.daily/duplicity.inc

次の出力が表示されます。

Local and Remote metadata are synchronized, no sync needed.
Last full backup left a partial set, restarting.
Last full backup date: Thu Jul 30 12:06:52 2020
RESTART: The first volume failed to upload before termination.
Restart is impossible...starting backup from beginning.
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110992.57 (Thu Jul 30 12:09:52 2020)
EndTime 1596111062.63 (Thu Jul 30 12:11:02 2020)
ElapsedTime 70.06 (1 minute 10.06 seconds)
SourceFiles 13313
SourceFileSize 777994890 (742 MB)
NewFiles 13313
NewFileSize 777994890 (742 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 13313
RawDeltaSize 772067520 (736 MB)
TotalDestinationSizeChange 318263295 (304 MB)
Errors 0
-------------------------------------------------

これで、次のコマンドを使用してバックアップのステータスを確認できます。

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status sftp://[email protected]//remotebackup/Duplicity/

次の出力が得られるはずです。

Last full backup date: Thu Jul 30 12:14:17 2020
Collection Status
-----------------
Connecting with backend: BackendWrapper
Archive dir: /root/.cache/duplicity/b2af509c9fab82d874aa492a933aaf70

Found 0 secondary backup chains.

Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Thu Jul 30 12:14:17 2020
Chain end time: Thu Jul 30 12:14:17 2020
Number of contained backup sets: 1
Total number of contained volumes: 2
Type of backup set: Time: Num volumes:
Full Thu Jul 30 12:14:17 2020 2
-------------------------
No orphaned or incomplete backup sets found.

完全バックアップを取りたい場合は、次のコマンドを実行します。

PASSPHRASE="admin" duplicity full --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://[email protected]//remotebackup/Duplicity/

オプションremove-all-but-n-fullを使用して、古いバックアップファイルをクリーンアップすることもできます。 にとって example、不要な古いバックアップファイルをすべて削除し、2つのバックアップとそれに対応する増分バックアップのみを保持する場合は、次のコマンドを実行します。

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force sftp://[email protected]//remotebackup/Duplicity/

バックアップを復元

リモートバックアップサーバーからファイルとディレクトリを簡単に復元することもできます。 –file-to-restoreオプションを使用して、ファイルとディレクトリを復元できます。

復元プロセスを実行する前に、次のコマンドを使用して、バックアップサーバーで使用可能なすべてのファイルとディレクトリを一覧表示できます。

duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files sftp://[email protected]//remotebackup/Duplicity/ | less

次の出力が表示されます。

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020
Thu Jul 30 12:04:04 2020 .
Thu May 14 03:28:54 2020 bin
Thu May 14 03:35:45 2020 boot
Mon Apr 20 16:33:49 2020 boot/System.map-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/System.map-5.4.0-29-generic
Mon Apr 20 16:33:49 2020 boot/config-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/config-5.4.0-29-generic
Thu May 14 03:37:26 2020 boot/grub
Thu May 14 03:31:36 2020 boot/grub/fonts
Thu May 14 03:31:36 2020 boot/grub/fonts/unicode.pf2
Thu May 14 03:31:29 2020 boot/grub/gfxblacklist.txt
Thu May 14 03:37:26 2020 boot/grub/grub.cfg
Wed Jul 29 10:05:41 2020 boot/grub/grubenv
Thu May 14 03:31:37 2020 boot/grub/i386-pc
Thu May 14 03:31:36 2020 boot/grub/i386-pc/915resolution.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/acpi.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/adler32.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/affs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/afs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ahci.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/all_video.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/aout.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/archelp.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/at_keyboard.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ata.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/backtrace.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bfs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/biosdisk.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap_scale.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/blocklist.mod
Thu May 14 03:31:37 2020 boot/grub/i386-pc/boot.img
Thu May 14 03:31:36 2020 boot/grub/i386-pc/boot.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bsd.mod
Thu May 14 03:31:35 2020 boot/grub/i386-pc/bswap_test.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/btrfs.mod

次に、次のコマンドを実行して、「opt」という名前のディレクトリをバックアップサーバーから/ optディレクトリに復元します。

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://[email protected]//remotebackup/Duplicity/ /opt

復元プロセスが正常に完了しました。次の出力が表示されます。

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020

結論

上記のチュートリアルでは、Ubuntu20.04サーバーでDuplicityを使用してファイルとディレクトリをバックアップおよび復元する方法を学習しました。 また、Cronでバックアッププロセスをスケジュールすることにより、バックアッププロセスを自動的に実行する方法も学びました。 この記事が多くの時間を節約するのに役立つことを願っています。