/usrをバックアップ
なんて漠然としたタイトルだろう、と思いつつ。
デバイス マウントポイント 使用量 /dev/sda1 /boot 25MB /dev/sda2 / 30GB /dev/sda5 /usr/local 200GB このうち、/usrは使用量1GBもないはず
例えば、こんなスライス構成をしていたとする。
/usrが独立したファイルシステムだったら、dumpでファイルシステム丸ごと拾えば復旧も簡単なんだけどなー。こうなるとtarかcpだなー。rsyncでも良いか、などというコマンド選びが済んで、いざ!という所で素人のみなさんが困るのがコレ↓。
tar zcvf /path/to/archive.tar.gz /usr
えらく時間かかってんなー。わ!/usr/local 200GBもあるのに!!お願いだから/usr/localを拾わないで下さい!と、ここで気づく。
cp -a /usr /path/to/backup/dir
当たり前だけどこれでも/usr/local 拾っちゃうよね。
#!/bin/sh for i in /usr/* do if [ $i != "/usr/local" ]; then cp -a $i /path/to/backup/dir/. fi done
↑言っちゃー何だが、バカですか?(笑)
と、まーこんな調子で/usr/localは拾いたくないのに!という件、こんだけ引っ張っておいて何だけれど、ごく簡単なこと。
man tar より -l, --one-file-system stay in local file system when creating an archive man cp より -x, --one-file-system stay on this file system man rsync より -x, --one-file-system don't cross filesystem boundaries
ちょっと違ったりするけど、どれもこれも同じ意味のオプションを持っている。お仕事する対象を一つのファイルシステムに絞って下さい、再帰的に中を見てった時に別なファイルシステムのマウントポイントを見つけてもそこは潜らないで下さい、という意味。これを使えば済む話、なのでした。
ちなみに、du も同じオプションを持っているので、/usr の中身を /usr/local をキレイに除外して容量を計ることができるよ。
# cd /usr # du -sx .
あら簡単!