ラズパイを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を登録しておけます。