chown -R による壊滅的な状況を切り抜ける方法
ある日、ぼーっと DB のコピーをした後に、コピー元と uid が違っていたので以下のようなコマンドを叩いた。ぼーっと。
chown -R mysql:mysql ../
これを叩いたときのカレントディレクトリは /var/lib/mysql である。ドットが一個多いので /var/lib 以下が全部 mysql になって大惨事。
こういうとき FreeBSD だったらmtreeを使うんですが、 GNU/Linux だと無いようなのでどうするねん。と困っていたところ、 satoh_fumiyasu@ さんに getfacl/setfacl というポインタを教えてもらいました。
同一構成の適当なホストからパチってきて合わせる。
-bash-3.2# hostname rokuchotouge -bash-3.2# pwd /var -bash-3.2# getfacl -R lib | nc tochugoe.localdomain 30000 -bash-3.2#
-bash-3.2# hostname tochugoe.localdomain -bash-3.2# pwd /var -bash-3.2# nc -l 30000 | setfacl --restore=- setfacl: lib/hoge: No such file or directory (snip) -bash-3.2#
残りは ls -Rl | grep mysql とかで探してよきに計らう。
10年に一度ぐらいしか作らないようなホストを作る最後の方でヘマやらかして、作り直しに心折れていたところなので大変役に立ちました。