
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.142 / 読者数:1295名こんばんは、うすだです。 とあるブログにあったリンクから、以下を知りました。
ブログ通信簿 - gooラボ
ブログの通信簿を作成してくださるようです。
すると…
ブログをお持ちのかたは、是非、試してみてください。 それでは、女性的なわたくしが、今回もはりきってお送りいたします。 今回のお題 - 削除したファイルを復元する前回は、ファイルを消してもデータが残ることがあるから要注意だ! 的な内容を、 お送りしました。
Vol.141 - データをしっかり消去する さて、今回は逆で、うっかり削除してしまったファイルを、 なんとかして復元する方法について、ご紹介しようと思います。
とはいっても、なんでもかんでも召喚できるというわけではありません。
Ext2 ファイルシステムでは、ファイルを削除したときに、
使用していたデータブロックの情報まで消し去ることをしません。
ちなみに、ext3 ファイルシステムの場合は、ファイルを削除しますと、
使用していたデータブロックの情報を消し去ってしまいます。 さて、削除したファイルの復元には、debugfs コマンドを使用します。 debugfs コマンドは、対話的に作業を行えますので、実際に試しながら、 復元方法をご紹介していきましょう。 前回と同様に、普通のファイルをファイルシステムに仕立て上げ、 その上で試していきたいと思います。 まずは、1MB のファイルを作成し、ext2 ファイルシステムにします。 # dd if=/dev/zero of=tameshi.img bs=1M count=1 # mkfs.ext2 -m 0 -F tameshi.img このファイルを /mnt/tmp に mount して、なにかファイルをコピーしてみます。 (以下では、なんとなく /ets/hosts をコピーしています。) # mount -o loop tameshi.img /mnt/tmp # cp -p /etc/hosts /mnt/tmp そして、きちんと記録されるよう、マウントし直してから、削除します。 # umount /mnt/tmp # mount -o loop tameshi.img /mnt/tmp # rm -f /mnt/tmp/hosts
「あちゃー、消してしまったー!」とわざとらしく叫んだところで、
復元の手順に入ります。 # umount /mnt/tmp # debugfs tameshi.img ... debugfs:
すると、debugfs: というプロンプトが出力されます。
debugfs: lsdel
Inode Owner Mode Size Blocks Time deleted
12 0 100644 6446 7/ 7 Sun Aug 3 14:57:49 2008
1 deleted inodes found.
今回は、削除したファイルが1つだけですので、一目瞭然的にわかりますが、 実際にはずらずらっと出力されて、どれがそうなのかよくわからん、 ということも、しばしばありえます。
そんなときには、stat コマンドで、詳細情報を確認します。 debugfs: stat <12> Inode: 12 Type: regular Mode: 0644 Flags: 0x0 ... User: 0 Group: 0 Size: 6446 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 14 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x489548dd -- Sun Aug 3 14:57:49 2008 atime: 0x48954816 -- Sun Aug 3 14:54:30 2008 mtime: 0x4874e2e4 -- Thu Jul 10 01:10:12 2008 dtime: 0x489548dd -- Sun Aug 3 14:57:49 2008 BLOCKS: (0-6):38-44 TOTAL: 7
モードやファイルサイズ、更新時刻などの情報がわかります。
さて、上記の場合、データブロックは、38〜44 の7個を使用しています。 debugfs: dump <12> /tmp/hosts 復元できた(かもしれない)ようですので、quit と入力して、 debugfs を終了させます。そして、ファイルが同じかどうか確認します。 debugfs: quit % diff /etc/hosts /tmp/hosts %
同じようです。データブロックの中身は無事でしたー。ふぅ。
ちなみに、lsdel コマンドで、該当すると思われる iノードが出てこない場合でも、
復元したいファイルのiノード番号があらかじめわかっているなら、
dump コマンドによる復元(の試み)は可能です。 # ls -li /mnt/tmp 12 -rw-r--r-- 1 root root 6446 7月10日 01:10 hosts 11 drwx------ 2 root root 12288 8月 3日 14:56 lost+found/
hosts ファイルのiノード番号は 12番だ、ということがわかります。
以上、削除したファイルの復元手順をご説明しました。 ではここで視点を変えて、うっかり消してしまわないようにする工夫を、 少し考えてみたいと思います。
まずは、削除するときや上書きするときに、ほんとに実行してよいのか、 逐一お伺いをたててもらうようにしてみましょう。
はい、ご想像通り、エイリアスを使う方法です。 # alias rm rm -i rm コマンドを、-i オプションつきで実行しますと、削除する前に、 必ずお伺いをたてるようになります。(以下は、エイリアス設定後です。) # rm /etc/passwd rm: remove regular file `/etc/passwd'? 同様に、mv コマンドや cp コマンドにも、-i オプションをつけるとよいと思います。 # alias mv mv -i # alias cp cp -i これらの設定を、~/.bashrc などに書いておくとよいですね… と言いたいところですが、主要なディストリビューションでは、 上記がすでに設定済になっていました。
気をとり直して、次に、リンクを増やす方法です。
rm コマンドなどでファイルを削除しようとすると、
指定されたファイルのディレクトリエントリを削除します。 ですが、もし、別のディレクトリエントリからも参照されている場合は、 rm しても、別のディレクトリエントリからの参照が残っていますので、 ファイルが消し去られることはありません。 ということは、消されると困るファイルは、別からリンクしておけばよい (rm したときに、リンク数が 0 にならなければいい)ですよね。 普通、ファイルのリンク数は、1 です。 # cd /etc # ls -l hosts -rw-r--r-- 1 root root 6446 7月10日 01:10 hosts
root の手前の数字が、リンク数です。いまは 1 ですね。 # ln hosts .hosts.backup # ls -l hosts .hosts.backup -rw-r--r-- 2 root root 6446 7月10日 01:10 .hosts.backup -rw-r--r-- 2 root root 6446 7月10日 01:10 hosts
すると、リンク数が 2 になります。 # ls -1i hosts .hosts.backup 230596 .hosts.backup 230596 hosts ということは、この状態で hosts を削除しても、 .hosts.backup からの参照がありますので、hosts の実体が消されることはありません。 # rm -f hosts # ls -l hosts .hosts.backup /bin/ls: hosts: そのようなファイルやディレクトリはありません -rw-r--r-- 1 root root 6446 7月10日 01:10 .hosts.backup ですので、再度リンクを作成すれば、めでたく復元できます。 # ln .hosts.backup hosts # ls -l hosts .hosts.backup -rw-r--r-- 2 root root 6446 7月10日 01:10 .hosts.backup -rw-r--r-- 2 root root 6446 7月10日 01:10 hosts
ただし、リンクは、同一ファイルシステム内でしか作成できません。 また、シンボリックリンクでは、リンク数は増えませんので、 削除を阻止する力はありません。ご注意ください。 # ls -l hosts -rw-r--r-- 1 root root 6446 7月10日 01:10 hosts # ln -s hosts .dame # ls -il hosts .dame 7734322 lrwxrwxrwx 1 root root 5 8月 3日 17:41 .dame -> hosts 230596 -rw-r--r-- 1 root root 6446 7月10日 01:10 hosts リンク数は 1 のままですし、iノード番号も異なります。 以上、消してしまったファイルを復活できるかもしれない方法や、 消してしまわないための予防策を、ご紹介しました。 ちなみに、今回の元ネタは、以下です。
Linx Ext2fs Undeletion mini-HOWTO しょ、正直に申し上げますと、今回は、上記の抜粋的な内容です。 もちろん、不足している点や情報の古い点などを、自分なりに補足して、 オリジナリティーを出すようにしたつもりです。 詳細を確認されたい場合や、 ファイルの復元手順を違う視点で眺めたいと思われた貴兄は、上記をご覧くださいませ。 宿題の答え前回の宿題は、 ファイルの中の一部分を消去したとき、前データがどうなるのか、確認 してみましょう。 でした。
先頭や途中のデータを削除した場合は、後続のデータに上書きされますので、
きれいさっぱりなくなると思われます。 (↓ファイルシステムを作成します。) # dd if=/dev/zero of=tameshi.img bs=1M count=1 # mkfs.ext2 -m 0 -F tameshi.img (↓mount して shadow ファイルをコピーします。) # mount -o loop tameshi.img /mnt/tmp # cp -p /etc/shadow /mnt/tmp/ (↓念のため mount し直します。(sync の代わりです)) # umount /mnt/tmp # mount -o loop tameshi.img /mnt/tmp (エディタで /mnt/tmp/shadow の root の行を削除します。) (↓バックアップファイル shadow~ があるので消し去ります。) # ls /mnt/tmp lost+found/ shadow shadow~ # shred -u /mnt/tmp/shadow~ # ls /mnt/tmp lost+found/ shadow (↓umount して、消した行がないか探します。) # umount /mnt/tmp # strings tameshi.img | grep root # なにも出てきませんので、上書きされて消されてしまったようです。
では、途中ではなく最後の方だと、どうでしょうか。 # mount -o loop tameshi.img /mnt/tmp # tail -1 /mnt/tmp/shadow test:秘密だよ:13996:0:99999:7::: (↑この test の行を、vi などで削除します。) # shred -u /mnt/tmp/shadow~ # grep test /mnt/tmp/shadow # umount /mnt/tmp # strings tameshi.img | grep test #
…大丈夫なようです。 まず、dumpe2fs コマンドで、ブロックサイズを確認します。 # dumpe2fs tameshi.img ... Block size: 1024 ...
1ブロックは 1024バイトのようです。 # mount -o loop tameshi.img /mnt/tmp # perl -e 'print "test"x260' > /mnt/tmp/foo # ls -l /mnt/tmp/foo -rw-r--r-- 1 root root 1040 7月25日 01:23 /mnt/tmp/foo # umount /mnt/tmp # strings tameshi.img | grep test testtesttest... "test" という文字を 260個書きましたので、foo のサイズは、 4*260 = 1040 バイトになります。
これを、上書きして、1ブロックにおさまるサイズにしてみます。 # mount -o loop tameshi.img /mnt/tmp # perl -e 'print "BAD"x16' > /mnt/tmp/foo すると… # umount /mnt/tmp # strings tameshi.img | grep test testtesttesttest おお、データが残りました。見たところ、"test" が4個あります。
最初のブロックは、"BAD"x16 で上書きされてしまいましたが、
もう1つのブロックには、まだ元のデータが残っているようです。
ちなみに、最初のデータを "test"x280 にしますと、
最終的には、"test" の数が 24個になりました。 というわけで、単一のファイルの変更でも、古いデータが残ることがありました。 ですので、機密情報の扱いには、十分ご注意くださいませ。 今回の宿題今回の宿題は、 削除したファイルを復元しようとしたところ、データブロックがすでに 再利用されていて途方に暮れる、という経験をしてみましょう。 です。 ようは、debugfs の dump で復元するまでの間に、 データブロックの中身が書き換わる行為をして、 復元したけど中身が違って時すでに遅し、的な状況を作り出してみてください。 経験こそすべてだ、と無理矢理自分に言い聞かせて、試していただけますと、幸いです。 あとがきもう2年以上、当メルマガを書いていますが、最初の頃と比べて、 文章がうまくなったよなあ、という気がまったくしません。
たまに、過去のネタとダブっていないか、昔の文章を読みます。 そんな中、以下のようなサイトを見つけました。
人に伝わる文章の書き方 わかりやすい文章の書き方を、おそらく基本的なところから、逐一教えてくださる、 ありがたいサイトです。 上記を拝見して、いろいろ間違っていたこと、わかりにくい文章を書いてきたことに、 気づくことができました。
というわけで、今回は、それらを踏まえた文章に…とはなっていなくて、
ご覧のとおり、ほとんど(あるいはまったく)変わっていません。
今回はイマイチだったねとか、こんなネタを扱ってほしいとか、 なんでもかまいませんので、なにか思うことがありましたら、お気軽に、 メールでご連絡いただけますと、たいへんありがたやです。
今回も、ここまで読んでいただき、ありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」−栗の絵を描いてますが、秋に向けてがんばらないと…。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本 [X]
「センネン画報」 今日 マチ子「粟津潔 デザインする言葉」 粟津潔 「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸 「Make: Volume01」 オライリー・ジャパン 「セーラが町にやってきた」 清野 由実 「手紙屋」 喜多川 泰 「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久 「人蕩し術」 無能 唱元 「子育てハッピーアドバイス2」 明橋 大二, 太田 知子 「ラッセル幸福論」 B. Russell 「それでも人生にイエスと言う」 Viktor Emil Frankl 「子育てハッピーアドバイス」 明橋 大二, 太田 知子 「考具」 加藤 昌治 「北欧デザイン<3>」 渡部 千春 「北斎の謎を解く」 諏訪 春雄 「体感美術館」 平野 暁臣 「チベット永遠の書」 Theodore Illion 「リナックスの革命」 Pekka Himanen 「人月の神話」 Frederick Phillips,Jr. Brooks 「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner 「小布施ッション<2001-2002>」 セーラ・マリ カミングス 「アンパンマン伝説」 やなせ たかし 「夢をかなえるゾウ」 水野 敬也 「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann 「北欧デザイン<2>」 渡部 千春 「北欧デザイン<1>」 渡部 千春 「ヒューマン2.0」 渡辺 千賀 「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯 「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦 「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき 「デザインのデザイン」 原 研哉 「マキアヴェッリ語録」 塩野 七生 「ハンバーガーを待つ3分間の値段」 斎藤 由多加 「星の旅人-スペイン「奥の細道」-」 黛 まどか 「食品の裏側」 安部 司 「On Lisp」 Paul Graham 「ぼくが医者をやめた理由 つづき」 永井 明 「あなたならどうする?」 Jack Nikolaschka 「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」 Mark G. Graff, Kenneth R. van Wyk 「「左利き」は天才?−利き手をめぐる脳と進化の謎」 David Wolman 「自分の中に毒を持て」 岡本 太郎 「アトピーの薬を減らす本」 田中 貴子 「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留 「X51.ORG THE ODYSSEY」 佐藤 健寿 「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子 「沖縄文化論」 岡本 太郎 「「伝説の社員」になれ!」 土井 英司 「コンピュータの構成と設計(上)」 Patterson & Hennessy 「カラスのジョンソン」 明川 哲也 「ドリルを売るには穴を売れ」 佐藤 義典 「頭がよくなる照明術」 結城 未来 「クロフォードのインタラクティブデザイン論」 Chris Crawford 「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso 「非常識のすすめ―逆発想の仏教論」 ひろさちや 「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」 デージーネット 「イノベーションの達人!」 Tom Kelly, Jonathan Littman 「クリエーター50人が語る創造の原点」 小原 啓渡 「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick 「楽しい気象観察図鑑」 武田 康男 「入門 Ajax」 高橋 登史朗 「リリカルな自画像」 岡本 太郎 「やぎの目ゴールデンベスト」 林 雄司 「初めてのPython 第2版」 Mark Lutz,David Ascher 「鼻兎」 小林 賢太郎 「なぜ、これがアートなの?」 Amelia Arenas 「芸術起業論」 村上 隆 「まほう色の瞳」 Enrique Barrios 「ラーメンズつくるひとデコ」 ラーメンズ 「R25 つきぬけた男たち」 R25編集部 「美の呪力」 岡本 太郎 「しろのあお」 上大岡 トメ 「ザ・ゴール」 Eliyahu M. Goldratt 「ハッカーと画家」 Paul Graham 「岡本太郎に乾杯」 岡本 敏子 「Fedore Core Expert」 Software Design 「誰も知らない男」 ブルース・バートン 「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト 「国家の罠」 佐藤 優 「夜回り先生」 水谷 修 「やぎの目絵日記」 林 雄司 「7つの習慣」 スティーブン・R. コヴィー 「まろ、ん?−大掴源氏物語」 小泉 吉宏 「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル 「ポストモダン・マーケティング」 スティーブン ブラウン 「機動戦士ガンダムさん」 大和田 秀樹 「小エロのひみつ - Webやぎの目研究発表」 林 雄司 「これ、誰がデザインしたの?」 渡部千春 「60分間・企業ダントツ化プロジェクト」 神田 昌典 「ガルシアへの手紙」 エルバート ハバード 「人生は素晴らしいものだ」 オグ・マンディーノ 「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン 「ワインバーグのシステム思考法」 G.M.ワインバーグ 「渋谷ではたらく社長の告白」 藤田 晋 「渋井真帆の日経新聞読みこなし隊」 渋井 真帆 「コラム息切れ」 小野 法師丸 「早朝起業」 松山 真之介 「変な人が書いた驚くほどツイてる話」 斎藤 一人 「35歳から仕事で大切にしたいこと」 村井 勉 「金融広告を読め」 吉本 佳生 「発想する会社!」 トム・ケリー,ジョナサン・リットマン 「エハイク」 吉田 戦車 「人生の旋律」 神田 昌典 「仕事の思想」 田坂 広志 「CPUの創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| ||||||||||||||||||||||||||||||||||||||||