Linuxのバックアップの設定をした話
こんにちは!
今回は家で使っているLinuxマシンのバックアップについて書いていきたいと思います。内容としてはそんなに深いものでは無いかも知れませんが、せっかくなので記録しておきます。
僕の使っているマシンは、メイン・サーバーともに10年近く前のパソコンをジャンクで購入して使っているので、信頼性については皆無に等しいですw あくまでも個人用データなので消えて本当に困るものはほとんどありませんが、まあそれでもいざという時に復旧できるようにしておくに越したことは無いでしょう。
バックアップの考え方
冒頭に書いたとおり、しっかりバックアップをとっておこうと思った理由は、何か緊急のことがあった時に、データの全消失という最悪の自体がなるべく起こらないようにするためです。この「なるべく」というのがミソで、消失して本当の意味で取り返しがつかないようなデータを扱っているわけではないので、そこまでガチガチにバックアップを考えるつもりはありません。
バックアップに利用するのはこちら。
上の写真がメインPC用のTrancend社の500GBの外付けHDD(多分10年前くらいに買ったもの)で、下の写真がサーバーのバックアップ用のWestern Digital社の1TB 3.5インチHDD(デスクトップ用HDD)。外付けHDDの方は以前の記事でNASにする用のストレージとして紹介したものと同じものです。サーバー用PCを運用しはじめた際に、サーバーのSSDの一部をネットワークストレージにしたため、この外付けHDDが手持ち無沙汰になったわけです。
ちなみに、3.5インチHDDは5年前くらいにデスクトップPC(windows 7)を使っていた際にメインストレージとして使っていたもので、家の中に転がっていたのでバックアップ用のストレージとして流用したわけです。3.5インチHDDは、↓にあるような専用のコネクタを使えば通常の外付けHDDと同じようにUSB接続で使うことができます(パソコン側にUSB2.0しかないので、データ転送速度はお察しのレベルですが)。
外付けHDDにしても、3.5インチHDDにしてもかなり古いので信頼性は低いわけですが、今回はゆるいバックアップなのでこんなものでも問題ないかなと。繰り返し書いているように、本当の意味で取り返しのつかないデータはないので、万が一運悪くメインとバックアップが同じタイミングで消失した場合でも諦めはつくでしょう。
基本的にリスクゼロというのはありえないので、コストと手間を考えてほどほどのところで妥協するのも大切だと思います。5000円とか3500円とかで買ったパソコンのバックアップのために数万円をつかうというのは流石にちょっと割に合わないでしょう。どうせ家が火事になったり水没するようなことがあれば何を持っていてもほぼ全ロストでしょうしね。
システムファイルのバックアップ
さて、ここからが実際のバックアップについてです。バックアップの考え方はいろいろあるとは思いますが、今回はシステムのバックアップとデータのバックアップを分けて行いました。システムバックアップは文字通りOSのシステムに関わる部分で、データバックアップは実際にユーザーが操作するデータのことですね。もう少ししっかしした言葉で言うと、「/home/{user}/」より下の階層がデータバックアップの対象領域で、それ以外のデータがシステムバックアップと言えます。
システムのバックアップについては、LInuxには「Timeshift」というソフトウェアがあり、これを使えばGUIを使って簡単にシステムのバックアップを取ることができます。
こちらが公開されているGithubですが、サーバー用マシンのxubuntuではapt経由でのダウンロードとしました。実際につかったコマンドは下記のとおりです(ちなみに、メインマシンのLinux mint 19.3にはデフォルトでtimeshiftが入っています)。
$ sudo add-apt-repository ppa:teejee2008/timeshift
$ sudo apt install timeshift
実際のTimeshiftの画面はこんな感じ。
GUIの操作法とかは調べれば色々と出てくると思うので割愛します。細かいことをあまり考えずに、バックアップフォルダやバックアップの頻度、どれだけのデータを保持するかとかを設定できるので結構便利なソフトだと思います。
一応、このTimeshiftを使ってデータバックアップもできるようですが、基本的に非推奨とされているようです。やはりというか、データとシステムは別個に管理すべしというところなのでしょうね。
データのバックアップ
こちらはコマンドラインベースで設定していきます。データのコピー方法は色々とあるわけですが、今回使うのは「rsync」というコマンドです。
こちらも詳細は調べてみていただければと思いますが、要するに異なる場所にあるフォルダの内容を同期(Sync)するためのコマンドです。単純にコピーするだけならLinuxには「cp」というコマンドを使うわけですが、この「rsync」を使うと変更のあった部分だけをコピーすることになるので、定期的にバックアップをとるような用途には最適です。データファイルは容量があるので、毎回全コピーをしていたら時間がかかって仕方ないですからね。
もちろん、毎回コマンドを打つのは大変なので、自動で定期的にコピーをするように設定をしていきます。
まずは下記の内容を適当な名前を付けて保存。今回は「~/bin/Backup.sh」という名前で保存しています。
#!/bin/bash
rsync -av --delete --exclude='.cache' /home/koji/ /mnt/nas/share/homebk
「--delete」オプションは同期元にないファイルを削除するというもので、「--exclude='.cache'」は「.cache」という名前のフォルダは同期しないと言う意味を表します。「.cache」フォルダはある意味ゴミみたいなものなので(流石にゴミは言い過ぎですがw)、サイズの肥大化を避ける意味でも同期ファイルからは除外しておきます。
いずれにしても、これでバックアップ用のシェルスクリプトができたので、これを定期的に実行するために「crontab」に登録します。Linuxを使っている方ならあえて説明するまでもないとは思いますが、この「crontab」は指定したスクリプトを自動で定期的に実行するソフトウェアです。
実際に打ち込むコマンドは。
$ sudo crontab -u root -e
このコマンドを打ち込むとCrontabの編集画面にうつります。
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
こんな感じの画面がでるので、最終行に下記を追記。
0 15 * * * /home/{user}/bin/Backup.sh
この書き方だと、毎日15時ちょうどに「Backup.sh」を実行するという設定になります。こんな感じで、決まったプログラムを定期的に動かせるので、上手く使えば応用の幅は広そうです。今までは、「crontab」の存在は知っていながら使ったことはなかったので、これを機会に積極的に使っていきたいですね。
まとめ
今回は家にあるLinuxマシンのバックアップの設定を行いました。本格的にやろうとすると結構費用がかさみますが、今回はほとんど手元にあるものだけでの構成にしたのでだいぶ節約できたと思います(購入したのは1000円くらいのHDDをUSBでつなぐケーブルくらいですね)。
内容的には大したものではないですが、こういう感じの軽い記事も悪くは無いでしょう。あまり大きな話ばかりだと、実行するのも書くのも大変ですしね。とはいえ、書くネタ自体はまだまだたくさんあるので、継続してぼちぼち書いていきたいと思います。
それでは、また!