ーろぐたんでーろぐてきとーに、のらりくらりと、つつがなく。rsyncたんでーNUC(DN2820FYKH)で、起動用のドライブとは別のドライブを用意して、すぐに起動できるシステムバックアップを作成した。USBドライブなどの外付けデバイスでシステムバックアップを作成するときにでもご参考に。やりたいことNUC(DN2820FYKH)で、現在USB3.0なUSBメモリ(32GB)を起動ドライブとしている。USBメモリがいつ壊れるかと気にしながら使い続けるというのもさすがに心もとないので、すぐに起動できるバックアップを用意しておきたい。用意してあったのは、128GBのSSDと、それを外付けドライブ化するUSB接続のハウジングのみ。ちなみに、DN2820FYKHにはUSB3.0の口が一つしかないので、このドライブはUSB2.0でつなぐ。検討btrfsでは、ファイルシステムでRAIDが作成できるが、今はドライブの容量が違うので、RAID1で実現するのはやめた。その代わり今回はcron.weeklyでrsyncするスクリプトを走らせることにした。今回はbtrfsで使えるsnapshotをバックアップ生成にも便利に使っているが、これについては別の記事で書くので、この記事では触れない。(当然、スナップショット自体もドライブ内のバックアップとして考えることになる。これは、ドライブ故障時のためのバックアップではなくて、設定ファイルの意図しない変更等に備えるもの。)やったことドライブごとのアクセス速度も違うし容量も違うので、この状況ではさすがにRAID組んでもなぁ、ということで、バックアップの方は、cron.weeklyでrsyncなスクリプトを走らせることした。問題は、起動ドライブに異常があったときに、バックアップからすぐに起動させるのが面倒、ということ。システムまるごとrsyncでバックアップするので、fstabの中見が同じままである。マウントしようとしてしまうのが面倒。grub2の設定ファイルに、パーティションのUUIDが書いてある。ここを書き換えておかないと、起動すら怪しくなる。いう感じで、こちらもUUIDで指定してあり、このドライブがないと起動しないことが予想される。これらを解決するため、cron.weekyでのrsyncでのバックアップスクリプトの中に、別に用意したfstabファイルをコピーするコマンドと、chroot環境下でgrub2-mkconfigして、バックアップ中のgrub.cfgを適切に構築するスクリプトを走らせることにした。fstab関係fstabでのドライブの指定はUUIDではなくてLABELで行う。)で指定するのも怖いので、単純なやり方としてはこれがよい。ファイルシステムにラベルをふることになるのだが、btrfsでは、ファイルシステムをマウントしたままでラベルを変更できる。(本当は、mkfsするときにラベルをふっておくほうがよかったのだけれども、いまさらしょうがない。指定しましたが、USBメモリの方はすでに稼働していた、、、。)ラベルの変更はこんな感じのコマンドで。スワップは、作り直す。マウントする形にした。(今回の作業では手でサブボリュームを追加しました。以下はSSDドライブに保存したものをマウントしてある。fstabの中身はこちら(長いので改行されてしまいますが、うまく解釈してください。意味があるのかよくわからないオプションもついていますが、あまり気にしないでくださいませ、、、。ここにある通り、btrfsでは、fsckは不要のようです。別の記事にも書きました。マウントしてしまうため、なんとか対応する必要がある。対応策としては、適当な場所にバックアップ用の別のfstabファイルを置いておき、rsyncが走った直後にそれをバックアップにコピーする、という手段をとった。マウントし、USB_DATAの方は認識されるとは限らないので、マウントしない。これで一つ目の問題は解決。単純にシステムワイドなバックアップを作成すると、grubの設定ファイルまでコピーされてしまい、いざというときにドライブが見つかりませんで起動できなくては困る。/boot以下はバックアップしないという手もあるが、CentOS7でもカーネルのアップデートはちょくちょくあるのであり、それらのときにいちいち手で/bootをバックアップするというのもあまりよくない。いうわけで、今回は、rsyncでのバックアップ直後に、同時にgrubの設定ファイルも作成することにした。バックアップされ、これが動く)がこちら。ないとumountが動かないexitバックアップ系の方の設定ファイルを作成するといいつつ、本番系の/boot/に書こうとしているのではないか、と思うかもしれないが、これは、chrootで実行するためにそのように書いてある。grub2-mkconfigは、procやらdevやらがないと動かないわけだが、本番系の方で動かしてしまうと、当然本番系の設定ファイルを作成してしまう。バックアップ先に入って実行してしまうことで対応できる(マウントコマンドは、chrootの外側で叩こうとすると、すでにマウント済み、ということで/sysがマウントできません。オプションを忘れると、SELinuxのコンテキストがコピーされず、起動できなくなってしまう。その場合は、/.aoutorelabelをtouchしておけば、起動時に再作成され、起動できるようになるはずである(その分、起動が相当遅くなりますので、毎回やるものではありません。これはおそらくrsyncに-AXオプションを付ければ全く不要と思うが、自分は最初にrsyncをしたときにうっかり忘れてしまい、後から.autorelabelで修正したので、それだけでうまくいくかどうかはわからないし、自分で試すほどの元気もない。これで2つ目の問題もOKrsyncスクリプトバックアップから起動させるための小細工を終えたところで、肝心のバックアップスクリプトはこちら。1日1回のバックアップのうち、最新の1回分が常に格納されているもの。実行で、fstabファイルの差し替えとgrubの設定ファイルの書き換えbashの-eオプションで、エラーが出たらそこでスクリプトを終了のあたりと思う。これで、いきなりUSBメモリがだめになっても、最大でも1週間前の状態の、すぐに起動できるバックアップは残っているので、修復作業なり、新しいUSBメモリにデータを移すなりができるようになった。これとは別に1日1回のsnapshot作成も行っているが、長くなったので記事を改めて書く。pspgoのスライド部分が壊れたのでばらして直した。btrfsのスナップショットを定期的に保存するようにした。btrfsのスナップショットを定期的に保存するようにした。何もしないし、定期的に実行しなくてもよいという話。共有のために使われています。