それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

稼働中Linux(raspberry pi)のバックアップを取る。`rsync --one-file-system `

raspberry piUbuntu のバックアップを取ろうと思いました。

バックアップとるといえば、dd dump/restore が定番ですが、今回は、ブートの書き換えと、initramfs の再構築のために、Raspberry上でRaspberryPiのバックアップを取る必要がありました。いちいち電源停止して再起動してたらめんどくさいので、稼働中のバックアップを取れないか模索しました。

RaspberryPi4 (arm64)のバックアップを取る--one-file-system

GNU コマンドには、--one-file-system という便利なオプションがあることを知りました。

これを使えば、マウント中のルートファイルシステムのバックアップを取ることが可能です。

--one-file-systemをつかえば、マウント箇所を無視してコピーを取れます。

rsync--one-file-system でバックアップ

--one-file-systemrsync で使えば、この通り。

rsync -avz --progress --one-file-system  /  server01:/home/takuya/backup

たとえば、USBメモリに、バックアップを取る。

mkdir -p /mnt/work/chroot
mount /dev/sdb1 /mnt/work/chroot
rsync -avz --progress --one-file-system  /  /mnt/work/chroot

tar--one-file-systemでバックアップ

--one-file-systemをtar コマンドとを使えばこの通り。

tar cvf - / --one-file-system | ssh  server01 'cat | pigz -  > raspi.tgz '

USBメモリに、tar バックアップを取る。

tar cvf --one-file-system  -  / | tar xvf - -C /mnt/work/chroot

なぜこんなことをしているのか。

感のいい読者さんなら、なぜdump/restoreを使わないんだ。なぜLVM Snapshotを使わないんだと思うかもしれません。

dump/restore は ext4 ファイルシステムが前提です。今回は非ext4 でした。

なぜLVMスナップショットを使わないのかは、そもそもRaspberry Pi は標準インストールがext4です。LVMは非搭載です。

btrfs なら send /recieve があるだろ。と思うかもしれません。今回はbtrfs に限定せずにext4 でも btrfs でも使える方法を模索した結果です。

Raspberry Pi のような ext4 ディスクに最適です。dump/restoreやdd/ddrescue別コマンド体系を覚えなくてすみます。初心者向けではないでしょうか。

--one-file-system のメリット

--one-file-system はいくつかのGNUコマンドで使えます。

私がちょっと調べた限りでは、 tarrsync 、なんと cp コマンドで扱える。

ファイルシステムを横断しない、別のファイルシステムは無視するので、ext4 ベースのシステムには便利です。

バックアップのために仮想マシンを停止しなくて良い、スナップショットをつかなくてもいい。とある程度手軽です。

デメリット

巨大ファイルの高頻度の書き込みがあると、rsync に失敗する。rsync 中にファイルが更新されてしまうと、Rsyncに失敗します。

そのため、巨大ファイルがある場合は、プロセスを停止しておくか、Syncのインターバルの調整が必要です。

スワップファイルを停止する

sudo swapoff /var/swapimg

ext4 に書き込みタイミングを遅らせる /etc/fstab

### ext4 に書き込みは5分一回にする。
LABEL=writable  /        ext4   discard,errors=remount-ro,commit=300    0 1

まとめ

--one-file-system でルートファイルシステムのコピーは恐ろしく簡単になります。

とくに、RaspberryPi( / , /boot 分離構成 かつ Ext4デフォルト) のルートファイルシステムを手軽に扱えて便利でした。

もっと早く知りたかった。

参考資料

https://superuser.com/questions/626141/rsync-recursive-on-same-mount-only