ラズパイをdumpからrestoreで一部復元した
コマンドの試験をしてる最中にホームディレクトリでrm .bashrc .bash_profile .profile
が走り、背筋が凍りましたが毎日Dump
していたので首の皮一枚で助かりました。
dumpコマンドでバックアップを作れることが皆さんご存知でしょうし、実際やっていると思うのですが、初めてrestore
の方をやる機会が生まれたのでメモがわりに。
Raspbian Busterでは/boot
が/dev/mmcblk0p1
に、/
が/dev/mmcblk0p2
にマウントされています。
現環境では、次のようなコマンドでバックアップを作成しています。
if [ $? -ne 1 ]; then echo "set directory where dump put in. ex: ./sdump.sh /mnt/nas/" fi dest=$1 dump -j3 -0f ${dest}/root.dump.bz2 /dev/mmcblk0p2
シェルにdumpをどこに配置するかを指定しています。
内部的にはdumpをフルバックアップ・bzlibを用いて圧縮レベル3で圧縮ということをしているだけです。
今回restore
を行なったことがなかったので、restore
を試してみようと操作していました。
今回は人間に優しいrestoreの対話モードを利用して復帰させました。ParallelsのUbuntu Desktopがこんな形で役に立ってくれて感無量です。
ext4を書き込めるだけでもUbuntu仮想マシンを持つ価値があります。始めに復元を行う環境(Ubuntu)にdumpをインストールしました。
ubuntu@paralells:~$ sudo apt install dump ...(中略)...
一応、restoreする先のフォルダを作成しておきます。
ubuntu@paralells:~$ mkdir temp ubuntu@paralells:~$ cd temp/ ubuntu@paralells:~/temp$ ll 合計 8 drwxr-xr-x 2 ubuntu ubuntu 4096 2月 24 19:30 ./ drwxr-xr-x 22 ubuntu ubuntu 4096 2月 24 19:30 ../
restoreの対話モードへ。英語が読めればなんてことはありません。ただ、ヘルプの出し方が「?」であることは知っていないと使えません。
あと、実行の際には-i
を指定し、引数にはリストア先(以下ではカレントディレクトリを指定)を指定します。
どうも引数を指定してもしなくてもカレントディレクトリをリストア先に選択するようなので、cdでリストアする先に移動しておく必要があるように見えます。
ubuntu@paralells:~/temp$ sudo restore -if ~/raspbian.dump.gz . Dump tape is compressed. restore > ? Available commands are: ls [arg] - list directory cd arg - change directory pwd - print current directory add [arg] - add `arg' to list of files to be extracted delete [arg] - delete `arg' from list of files to be extracted extract - extract requested files setmodes - set modes of requested directories quit - immediately exit program what - list dump header information verbose - toggle verbose flag (useful with ``ls'') prompt - toggle the prompt display help or `?' - print this list If no `arg' is supplied, the current directory is used restore > ls .: bin/ etc/ media/ root/ sys/ ved_to boot/ home/ mnt/ run/ tmp/ boot.bak/ lib/ opt/ sbin/ usr/ dev/ lost+found/ proc/ srv/ var/ restore > cd home restore > ls ./home: razpi/ restore > cd razpi/ restore > ls ./home/razpi: ._commands.txt .bashrc .profile cpustat.py@ .bash_history .gnupg/ .selected_editor .bash_logout .lesshst .ssh/ restore > add .bashrc .profile .bash_logout restore > extract You have not read any volumes yet. Unless you know which volume your file(s) are on you should start with the last volume and work towards the first. Specify next volume # (none if no more volumes): 1 Mount tape volume 1 Enter ``none'' if there are no more tapes otherwise enter tape name (default: /home/ubuntu/raspbian.dump.gz) Dump tape is compressed. resync restore, skipped 232 blocks set owner/mode for '.'? [yn] n restore > quit ubuntu@paralells:~/temp$ ll 合計 12 drwxr-xr-x 3 ubuntu ubuntu 4096 2月 24 19:33 ./ drwxr-xr-x 22 ubuntu ubuntu 4096 2月 24 19:31 ../ drwxr-xr-x 3 root root 4096 1月 13 13:44 home/ ubuntu@paralells:~/temp$ cd home/razpi/ ubuntu@paralells:~/temp/home/razpi$ ll 合計 20 drwxr-xr-x 2 ubuntu ubuntu 4096 2月 24 00:25 ./ drwxr-xr-x 3 root root 4096 1月 13 13:44 ../ -rw-r--r-- 1 ubuntu ubuntu 220 9月 26 09:09 .bash_logout -rw-r--r-- 1 ubuntu ubuntu 3522 2月 2 22:28 .bashrc -rw-r--r-- 1 ubuntu ubuntu 807 9月 26 09:09 .profile ubuntu@paralells:~/temp/home/razpi$
addしてextractしてやれば全てが解決。全て復元するのであればadd .
すれば良い感じです。
全て復元する場合はそもそも対話モードなんか使わず、sudo restore -rf root.dump.bz2 /
でいいと思います。
やろうと思えばオーナー情報も復元できたり、復帰させたファイルのタイムスタンプまできっちり正しかったり至れり尽くせりです。
これで安心してcronにdumpを登録しておけます。