バックアップの取り方はいくつかあるが、ここではUbuntuに標準搭載されたtarによる圧縮を用いた方法を示す。
バックアップファイルの作成
まず、バックアップを保存するためのディレクトリを作成する。
mkdir /home/<username>/backup
今後バックアップするときに実行しやすいように、バックアップスクリプトを作成する。
vi /home/<username>/backup/backup.sh
バックアップスクリプトには以下のコマンドを追加する。
#!/bin/bash
BACKUP_DIR="/home/<username>/backup"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
tar -czvfp $BACKUP_DIR/backup_$TIMESTAMP.tar.gz --exclude=$BACKUP_DIR --exclude=/proc --exclude=/tmp --exclude=/mnt --exclude=/dev --exclude=/sys /
ここでtarは圧縮コマンドで指定したオプションは
-c
新しいアーカイブを作る
-z
アーカイブをgzip形式で圧縮する
-v
処理したファイルを詳しく出力する。
-f
アーカイブファイル名を指定する
-p
所有者などのファイル属性を保持する。
—exclude
除外するディレクトリやファイルを指定する
である。
また、除外したディレクトリは以下である。
/proc
はプロセスの情報があるディレクトリで、普通のファイルシステムと違い、ハードディスクやSSDなどのストレージ上ではなく、メモリの中に作られる。
/tmp
は一時的(temporary)なファイルを置くディレクトリで、プログラムが動作する際に一時的に利用するファイルを保存しておくなどの用途で利用される。
/mnt
は新たに追加したストレージ装置などにアクセスできるようにしたマウントポイントが入った仮想的なディレクトリである。
/dev
はハードウェアや仮想デバイスがファイルとして表現されたディレクトリである。
/sys
はデバイスやドライバーの設定ファイルなどが置かれている。
最後にアーカイブするディレクトリが指定でき、/
としてrootディレクトリ下の全てを指定している。
バックアップスクリプトを実行する。すべてのファイルにアクセスできるようにroot権限で行う。
sudo /home/<username>/backup/backup.sh
バックアップファイルの転送
アーカイブファイルが作成されたらscpを用いてバックアップを保存したいマシンに転送する。
ローカルマシンに転送する場合は、ホストマシンに接続していないクライアントマシンのターミナル上で、
scp -P <ポート番号> -i <認証鍵のパス> <username>@<ipアドレス>:/home/<username>/backup/<backupfile> <保存先のパス>
とする。sshと違ってポートの指定は-P
と大文字でなければならない。ipv6の場合はipアドレスを\[ \]
で囲って記述しなければならない。
リストア
リストア用の新しいUbuntuサーバーをセットアップし、新しいサーバーにUbuntuをインストールし、SSH接続を確立する。
バックアップファイルをリストアするためのディレクトリを作成する。例えば、/home/<username>/restore
というディレクトリを作成する。
mkdir /home/<username>/restore
バックアップファイルを新しいサーバーに転送する。ローカルマシンから新しいサーバーにSCPコマンドを使用してバックアップファイルを転送する場合は以下のようになる。
scp -P <ポート番号> -i <認証鍵のパス> <バックアップファイルの送信元のパス> <username>@<ipアドレス>:/home/<username>/restore
ホストマシンでrootディレクトリにバックアップファイルを展開する。
cd /
sudo tar -xzvf /home/<username>/restore /<backup_file>.tar.gz
-x
は展開オプションである。
展開する際、同じ名前のファイルは上書きされるので、これでリストアが完了する。リストアが完了したら再起動する。
sudo reboot
新しいサーバーが再起動したら、バックアップから復元されたシステムが利用可能になる。
ipアドレスに依存した設定の変更
元のシステムのipアドレスが記述されたファイルがある場合はipアドレスを変更する必要があるので、ipアドレスを検索する。例えば/etc
内に前のipアドレスが記述されていないか確認する場合、
grep -r <ipアドレス> /etc
とすれば良い。