2016-06-17 6 views
2

私はLinuxのファイルシステムがどのように動作しているのかを知り、inodeという概念を見つけました。私は特定のinodeを読み込んでその内容を出力するためのCプログラムを書いています。Cのinodeを変更する機能?

私はCコードからiノードの内容を変更することはできません。何かが間違ってもファイルシステムを破壊する可能性があることは分かっていますが、まだ試してみたいと思います。

どうすればこの問題を解決できますか?

+0

どのように特定のiノードを読み、その内容を印刷しましたか?私はスーパーブロック、そのためのルートのinodeのようなファイルシステムのメタデータを解析したと思います。 – Fazlin

+0

@Fazlin:はい私は同じことをしました – harrythomas

+0

ファイルシステムのメタデータを解析して、inodeの内容を読み込んだら、それを書き直す際に直面する問題は何ですか?特定のinodeを読み取ったオフセットを知ることができます。ローカル構造体のiノードを変更し、同じオフセットで書き戻します。 – Fazlin

答えて

2

通常の情報ではなく、ドライブの情報に関する情報(ドライブの情報に関する情報)にアクセスする必要があります。そのためには、ドライブ内のファイルやディレクトリではなく、ドライブ自体を開く必要があります。

iノードと話すなら、あなたはLinuxとextファイルシステムを使用しているので、ドライブ名は/dev/sdbのようになります。これはディスク全体であり、その中の1つのパーティション/ボリューム/スライスではありません。それは/dev/sdb2か何かと呼ばれるかもしれません - 異なったタイプのLinuxはそれらを別のものと呼んでいます。

パーティションを開いたら、(非常に大きな!)ファイルと同じように扱うことができます。ハードディスク上のセクタとして並んでいる一連のバイトが偶然に発生します。あなたはどこにいてもデータを読むことができます。上書きしたい場合は次のようにします:

ハードディスクのデータを完全に破壊することがあります。

おそらくUSBスティックをマウントして(それに何も重要ではない)、そのことについて試してみましょうか? VERYあなたのメインディスクの名前ではなくITSの名前を開くようにしてください!

+0

このiノードが格納されている実際のハードディスクブロックを見つけて、その特定のブロックを書き直す必要があると言いますか?そして、はい、別のUSBディスクで試してみました。 – harrythomas

+2

またはFS => http://askubuntu.com/questions/85977/how-do-i-create-a-file-and-mount-it-as-a-filesystemを含むファイルを作成する – Garf365

+0

@ハリーそれはちょうど私が言っていること。正しいiノードを知るためには、ディレクトリツリーを解析してファイルのルートiノードを取得し、そこから配列、配列の配列、配列の配列を上に移動する必要があります関心のあるiノードに到達する。あなたは基本的にファイルシステム構造全体をgrokする必要があります... –

関連する問題