web-dev-qa-db-ja.com

ホームサーバーに最適なLinuxバックアップ方法は何ですか?

現在、rsyncとローカルUSBドライブを使用してFedoraLinuxサーバーをバックアップしています。これまでのところ、これは私のニーズに合っているようですが、これを実行するためのより良い方法があると思います。以前はテープを使用していましたが、サーバーをバックアップするためのサイズのテープバックアップの価格が、私の価格範囲をはるかに超えています。自動化されたものの方が良いでしょう。現在のrsyncバックアップを自動化できると思いますが、これはUSBドライブを常にオンにしておくことを意味します。

考え?

3
Eddie

私が使用する解決策は、家で小さなファンレスサーバーをホストすることを気にしない友人を見つけるためです。次に、データをリモートの場所に同期するために一晩実行される自動化されたrsyncスクリプトがあります。

7
andynormancx

サーバーを duplicity でAmazonS3にバックアップします。私は四半期ごとに完全バックアップを行い、毎晩増分バックアップを行います。非常にうまく機能します。

6
pjz

私は rsnapshot を使用します。これは、rsyncを使用し、増分/完全バックアップを非常にうまく実行します。

Cronジョブから実行してディスクをマウントし、rsnapshotを実行してからディスクをアンマウントするシェルスクリプトを作成したので、常にマウントされるわけではありません。

これが私が使用するスクリプトです。 1つ目は/usr/local/sbin/backup.shです。これは基本的に、実際の作業を実行し、出力と終了ステータスをキャプチャして、結果をルートに電子メールで送信するスクリプトのラッパーです。

#!/bin/sh
#
# Run the dobackup script, capturing the output and then mail it to the
# backup alias person with the right subject line.
#

BACKUP_TYPE=daily
if [ "a$1" != "a" ] ; then
  BACKUP_TYPE=$1
fi

/usr/local/sbin/dobackup.sh ${BACKUP_TYPE} < /dev/null > /tmp/backup.txt 2>&1
RET=$?

SUBJECT="${BACKUP_TYPE} backup for $(hostname) (ERRORS)"
if [ "a$RET" = "a0" ] ; then
  SUBJECT="${BACKUP_TYPE} backup for $(hostname) (successful)"
Elif [ "a$RET" = "a2" ] ; then
  SUBJECT="${BACKUP_TYPE} backup for $(hostname) (WARNINGS)"
fi

mail -s "$SUBJECT" root < /tmp/backup.txt

exit $RET

そして、これが/usr/local/sbin/dobackup.shで、これが本当の主力製品です。

#!/bin/sh
#
# Perform the backup, returning the following return codes:
#
# 0 - backup successful
# 1 - errors
# 2 - backup successful, but with warnings.
#

if [ -e /dev/sdb1 ] ; then
  BACKUP_DEV=/dev/sdb1
else
  echo "No backup device available."
  echo "CANNOT CONTINUE WITH BACKUP."
  exit 1
fi

BACKUP_DIR=/mnt/backup
BACKUP_TYPE=daily

if [ "a$1" != "a" ] ; then
  BACKUP_TYPE=$1
fi

echo "Performing ${BACKUP_TYPE} backup."

umount $BACKUP_DEV 2> /dev/null
mount $BACKUP_DEV $BACKUP_DIR
if [ "a$?" != "a0" ] ; then
  echo "Error occurred trying to mount the external drive with the following command:"
  echo "  mount $BACKUP_DEV $BACKUP_DIR"
  echo "CANNOT CONTINUE WITH BACKUP."
  exit 1
fi

date

rsnapshot $BACKUP_TYPE
RET=$?

date

if [ "a$RET" = "a0" ] ; then
  echo "Snapshot performed successfully."
Elif [ "a$RET" = "a2" ] ; then
  echo "Snapshot performed, but with warnings."
else
  echo "Snapshot had errors (returned ${RET})."
fi

umount $BACKUP_DIR
if [ "a$?" != "a0" ] ; then
  echo "Error occurred trying to unmount the external drive with the following command:"
  echo "  umount $BACKUP_DIR"
  exit 1
fi

exit $RET

BACKUP_DEV変数とBACKUP_DIR変数を適切に変更します。

3
Evan

私は dirvish を使用してUSBドライブにバックアップを作成します。アクティブなドライブをマウントするためにいくつかのスクリプトを作成しました。ファイルシステムの正しいポイントに3つあり、バックアップを実行します。

Dirvishは基本的に、多くのオプションを使用してrsyncを呼び出すPerlスクリプトです。

  • スペースを無駄にすることなく、多くのバックアップを保持できます
  • 単純な構成構文があります
  • 復元は非常に簡単です
2
Zoredache

ほとんどの答え この質問で ここでも当てはまります。上記のツールのほとんどは、Linuxで正常に動作します。

1
Tom Ritter

rdiff-backup を見てください。 USBドライブをそのままにしておくことは害にはなりません。少なくともそれは安価です。彼らはアイドル状態のときに多くの電力を使用しません。

1
Gert M

他の回答が示唆しているように、rsync(および/またはrsyncのラッパー)を使用することは、Linuxサーバーのバックアップを作成する簡単な方法です。覚えておくべきいくつかの事柄:

  • 気になるアプリケーションデータは実際にバックアップされていますか?データベースがある場合は、定期的にデータをダンプするcronジョブが必要です。ライブデータベースシステムのファイルのrsyncは、信頼できるバックアップを提供することが保証されていません。
  • バックアップが機能したかどうか、またはUSBディスクがまだ良好な状態であるかどうかを確認するためにどのくらいの頻度でテストしていますか?
  • バックアップを実行すると、削除されたファイルはどうなりますか? rsnapshot のようなものを使用する場合は、おそらく問題ありません。ただし、--deleteオプションを指定してrsyncを使用している場合は、削除するつもりのないファイルを回復できない可能性があります。

2番目のローカルディスクは、プライマリディスクに障害が発生した場合にファイルをすばやく回復するための最も安価なオプションですが、家が落雷した場合(または安価な電源タップが溶けた場合)は役に立ちません。月額5ドルのオフサイトバックアップソリューションが非常に多いため、両方を実行することは悪い考えではありません。

1
Jason Luther