【AIX】消してしまったファイルをfsdbコマンドで復元する

【AIX】消してしまったファイルをfsdbコマンドで復元する

AIXで誤って削除してしまったファイルを復元する方法です。

rmコマンドを実行した後でも、実はファイルが見えなくなっただけで、実態としては残っています。ファイルへのリンクが切れてしまっているだけ。

復元するためにはfsdbコマンドとfsckコマンドを使用します。

コマンドの実行結果が手元にないので、How to recover a deleted file in aix? の情報を参考にさせて頂きます。

恐らくですが、fsdbは、File System DeBugerの大文字箇所をとってfsdbなんでしょう。

使い方

fsdb /dev/LV名

fsdb ファイルシステム名

ちなみに、fsdbコマンドでのファイル復元は、ファイルシステムがjfsやjfs2の場合の復元方法となります。

fsdbコマンドでのファイル復元には、指定するファイルシステムをアンマウントする必要があります。マウントした状態でもfsdbコマンドは実行できますが、ファイルの復元はできません。ご注意ください。

以下で流れをみていきます。

fsdbのプロンプトモードに入りました。

「dir 2」と入力してみて下さい。このコマンドでこのファイルシステムのルートディレクトリの内容が確認できます。

「dir 2」の「2」はi-node番号を示しています。

i-node番号はファイルシステムごとに一意であり、ファイルシステム毎のルートディレクトリのi-nodeは必ず「2」になります。

「idotdot」はlsコマンドの実行結果に出てくる「..」のことです。無視して頂いて問題ありません。

ここでは「3      lost+found」に注目してください。

これは、このファイルシステムのルートディレクトリ(もっとも浅いディレクトリ)に「lost+found」ディレクトリが存在することがわかります。そして数字の「3」ですが、これは「i-node」番号を表しています。

続けて以下のように「dir 3」と実行してみます。

このコマンドは「lost+fount」ディレクトリの中身を確認しています。

それ以外は中身が何も表示されていません。

ちなみに、仮に「lost+found」ディレクトリに「test」という名前のファイルが存在する場合、以下のように表示されます。

これは「test」という名称のファイルがi-node番号「4」であることがわかります。

ちなみに、i-node番号は、「ls -li」コマンドで参照可能です。

続けて、「i 4」と入力します。

「i」の後ろにスペースがあり、「4」を入力しています。

これは、正確には「inode 4」のことですが、「i 4」と省略して記載することができます。

実行結果を見ると、パッと見てよくわからない出力が並んでいますね。

ここで重要な箇所は[5]、[26]、[27]、[28]の4つ。26~28については、「tj_sec」が付いていてUnix時間で記述されています。以下では「tj_sec」が付いていない場合の説明になりますが、意味していることは同じです。今回は表記がUnix時間になっているだけです。

di_nlink ファイルへのハード・リンクの数
di_atime ファイルが最後にアクセスされた時刻
di_ctime i ノードが最後に変更された時刻
di_mtime ファイルが最後に変更された時刻

https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_61/com.ibm.aix.genprogc/jfs2i_node.htm

続いて先ほどの続きです。

まずは、「m」を入力しています。

これは「modify」の「m」ですね。修正するということを意味しています。

続けて、「5 1」と入力しています。「5」の後ろにスペースがあり、「1」です。

「5」番目の項目を「1」に設定するというものですね。

「m」を入力する前の情報をみてみると、以下のように5番目の項目が「0」であることがわかります。

この値ですが、「5 1」と入力した後には、以下のように「1」になっていることがわかります。

この「di_nlink」の値はファイルへのハード・リンクの数ですが、それが「0」となっていたものを「1」に変えています。つまり、ハードリンクがなかったものを、ハードリンクがあるように変更しているわけです。

続けて、fsdbから抜けます。

「change inode」から抜ける際には「x」を入力します。これは「exit」の「x」ですね。

fsdbコマンドのプロンプトから抜ける際には「quit」を入力します。

続けて「fsck」コマンドを実行します。

余談ですが、ファイル作成直後にfsdbコマンドでそのファイルの情報を確認しようとしても、表示されないことがあります。

lsコマンドやcatコマンドでそのファイルを確認できたとしてもです。

これ、単純なことですが、ls等の結果はディスクに書かれる前のメモリ上の情報が表示されています。

fsdbコマンドはディスクの情報を参照するので、ディスクに書き込まれていない場合には表示されません。

あるタイミングで書き出されるわけですが、すぐに書き出したいなら以下のおまじないコマンドですね。

カモトラが実験した限りですが、sync2回ではディスクに書かれないことが何度かありました。3回やれば確実に書き込みされていたので、「sync3回のおまじない」はここでも有効なようです。(もちろんシステム次第なところはあると思いますが)

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする