【鯖】バックアップ戯言@Ubuntu Server20.04
ふっとLinuxサーバ(Ubuntu Server20.04.1LTS)においてバックアップ周りを触る事があっての備忘録です。
Linuxたまにしか触らないので、まず確実に忘却の彼方に飛んでいってしまうのですよ。
(;^ω^)
Windowsで動作するWSL2(Ubuntuそのもの)にて、動作を確認。
ターッを調査
バックアップなので、まずはTar(ファイルまとめ上げ)について。
ワンファイルに纏め上げる他、圧縮も可能で、3種類あるようです。ZIP/BZ2/7Z、右に行くほど圧縮率は上がる。
んで、950MBのISOファイル(バイナリ)を対象に簡単に調べてみた。
BZ2 914MB > 893MB 4min
ZIP 914MB > 891MB 1min
※WSL2上、AMD Ryzen3600、SSD(Nvme)
対バイナリだと圧縮率はほぼ大差ないようで、処理時間を見ても、明らかに往年のZIPが優秀に見えます。HDDだと、もっと遅いでしょう。
111バイトの全角半角を含むテキストで調査。
いずれも、234バイト辺りで、言うほどの差が出なかった。元よりも大きくなってしまってるが、これはTarのヘッダ分が付いちゃうんでしょうね。多分
tar –numeric-owner -cvzpf document.tgz document.txt 1>>bak.log 2>>error.log
※BZ2なら、-cvjpf となる(z→j)
参考記事が星の数程あるが、一応、書き方。
tar –numeric-owner -cvzpf document.tgz document.txt …
太字の部分が出力ファイル、分かり難いがーf への引数という事。
最後に羅列されたファイルやホルダーを、対象に処理するイメージです。
バックアップのつもりなので、パーミッションやユーザーID(UID)も、そのまま変換せず処理する。
念の為の検証
しっかりとTarファイルが生成されたかどうかを検証します。ストレージが部分破損してる可能性だってゼロじゃないので。
tar –compare –file=document.tgz document.txt 1>>bak.log 2>>error.log
エラーがでなければOK。
暗号化して仕上げ
バックアップ後は暗号化して保管しておきたいですよね。
opensslコマンドはあまりに多機能過ぎて・・、調べるのに苦労でした。また、バージョンによって書き方も変わります。
(;´Д`)
こんな形で暗号化できます。今書ける形では、相当強固かと思います。
openssl enc -e -aes256 -iter 2525 -salt -in document.tgz -out document.tgs -pass file:pass.txt 1>>bak.log 2>>error.log
-iterは、ブルーフォート攻撃への対処で復号化時に必要な値、-saltは、乱数調整、-passは、単純なパスワード指定(さらに強固にするなら、鍵を使う)
ファイルサイズは?
ここまでで、111バイトのテキストファイルのサイズがこうなりました。ただの1ファイルですが。
document.txt 111バイト(平文)
document.tgz 234バイト(Tar+ZIP圧縮)
document.tgs 256バイト(+暗号化)※拡張子は適当
元に戻すばやい
もちろん、逆の手順で戻す事になります。
以下では、document1という名前で、testディレクトリに展開してます。
間に、cmpが入ってますが、これでバイナリ検証した名残(バックアップ生成時のものと、展開時のものをバイナリレベルで検証)
openssl enc -d -aes256 -pass file:pass.txt -in document.tgs -out document1.tgz -iter 2525
cmp document.tgz document1.tgz
tar –numeric-owner -xvzpf document.tgz -C test 1>>bak.log 2>>error.log
※-C が、展開先のtestディレクトリを指してる
DVDメディアに分割保管する?
多重バックアップとして、今なら光学メディアになるかと思います。安価だし。
DVDで1層4.5GB、Blurayで1層25GBです。4層あるので、最大でも100GBでしょうか。高いけども。
このサイズを超えてる場合は、分割しなければならない(以下のコードはまだ未検証)
tar -M –tape-length=4580000 -cvjpf bak_p1.tar -f bak_p2.tar -f bak_p3.tar .\backup202012\
4.5GB毎に、ーf で指定されたファイルで生成する。
光学メディアに書き込む際は、以下のコマンドになるようです(こちらも未検証)dvd+rw-toolsが必要。
yum install dvd+rw-tools
growisofs -Z -dvd-compat -overburn -allow-limited-size -speed=8 /mnt/sr0 -R -J bak_p1.tgz
規格が乱立してるので、下手なオプション付けると、他ドライブで読み込み出来なくなるので注意です。ドライブやメディア性能に依存する、サイズも若干少なめの4.5GBとしてる。
増分バックアップ
日常のバックアップだと、増分バックアップ(変化分)なるかと思います。
-g によるsnarファイル指定で自動でやってくれるようです。初回はフルバックアップ。
tar –numeric-owner -g ${_dirpath}/backup.snar -cvzpf ${_dirpath}/inc_${_datenow}_backup.tgz /mnt/sdb/holder 1>> ${_dirpath}/backup_${_datenow}.log 2>> ${_dirpath}/error_${_datenow}.log
${..}なんちゃらの部分は無視してください。あくまでイメージ(SHスクリプトでいう変数値が入る)
最後に細かな事
業務用途での事(セキュリティ)考えると、Tarの処理最中とかファイル覗けたりするんだろうか・・とか(Temp内とか)
暗号化処理するまでの間の短い時間どうするよ、とか。
エラー処理を随時入れ込むつもりだと、なかなかにメンドイ。
Tarで一括で暗号化までやってくれたりしたら便利なんだが。
綺麗なSHスクリプトが書けるようになりたい。