*nix ファイルシステムのファイルには、ほぼ常に関連する inode 番号があります。ほとんどの場合、ユーザーはファイル名(つまり、階層パス名 - ファイル名構造)を使用してファイルと対話するため、これらのinode番号にはあまり気にしないようです。したがって、ファイル名を変更するのは一般的なことです。
mv oldname newname
あるinode番号から別のinode番号に名前変更(再割り当て)はどのように機能しますか?
背景は、私のファイルシステムからファイルをバックアップ(復元/カタログなど)したいということです。回復しながら、以前のinode#7が再び幸運のinode#7になったことを見て嬉しかったです。
カーネルのファイルシステム処理がinode処理を抽象化できることがわかっている場合は、割り当てたいファイルの前に他のファイルが#7として割り当てられることがあるとします。簡単に言えば、#7がすでに使用されているとき、「親愛なるカーネルがinode#12345を#7に変更しました」という決定に問題があると予想されます。ファイル名はファイル名と比較して一意ですが、ファイル名をすでに使用されているファイル名に変更するには、次の手順を実行します。
mv newname othername
mv oldname newname
上記の方法で古いファイルoldfile
の名前を。newname
newname
othername
したがって、inodeの番号付けを変更/影響を与える方法があると思います。この場合、質問に完全に答えることができます。何らかの方法でファイルシステムに依存している場合は、ext4について最も知りたいです。
修正する
私の不注意によって無視されるようになったhttps://stackoverflow.com/questions/5752822/how-do-i-create-a-file-with-a-特異的-inode-numberこれはほとんどの同じ問題を解決します。 UnixやLinuxではなくSOを使用しているので、この質問をここに残したり削除したりするのに十分かどうかはわかりません。ところで、すでに答えが出ているのでしょうか?
答え1
35年が過ぎた今、このオプションはもう存在しません。まともなファイルシステムでは、inodeの数を制御できません。
あなたができることはufsrestoreから回復シンボルを解析することですが、文書化されておらずバイナリです。
Star は同じ基本アルゴリズムを使用して名前の変更を追跡し、データベースを星印テーブルに配置します。ファイルはテキストファイルで、star_symプログラムはそれを人間が読める形式に変換します。
したがって、取得できる最善の方法は、古いinode番号から新しいinode番号への変換テーブルです。
答え2
ext4の場合、debugfs
ツールをこの方法で使用できます
(debugfsがファイルシステムを破損する可能性があるため、適切な予防措置を講じる必要があります)。
目的は、inodeという77
名前のファイルを作成することです/lucky77
。 inodeが77
まだ使用されていない、空である、または利用できないと仮定し、filenameも同様です/lucky77
。また、マウントされていないファイルシステムでオフラインで作業します。
debugfs -w /dev/ext4fsblockdev
debugfs 1.42 (29-Nov-2011)
debugfs: seti <77>
debugfs: sif <77> mode 0x81B6
debugfs: ln <77> luck77
debugfs: sif <77> links_count 1
debugfs: quit
inodeがすでに使用されている場合は、まずinodeを変更するために追加の手順が必要です。単純な場合、ファイルのコピーを作成してからソースを削除すると、コピーは新しいinodeを使用するため、ファイル名は解放されます。とにかく、ディレクトリやinodeへのハードリンクやその他の状況など、より複雑な状況が発生します。このような場合、必要なinodeを解放するには、単純な処理以上の作業が必要です。
答え3
AFAIK、ファイルデータをコピーしないと、1つのinodeを別のinodeにコピーすることはできません。
特定のinode番号を持つ新しいファイルを要求するためのAPIもありません。
したがって、あなたができることは、cp -a old new && rm old
ファイルの新しいinodeを取得するだけですが、それが何であるかを選択することはできません。もちろん、これはデータ全体をコピーするので、遅くなります。
ファイルシステム用の一部のFS関連ダンプ/復元ツールはinode番号を保持できますが、ほとんどはそうではありません。これらのツールは、ファイルシステムAPIを介さずにブロックデバイスに直接読み書きします。 XFS:(xfsdump/xfsrestore
時々)inode番号を保持しない。 (dumpe2fs
情報のみが印刷されます。Linux ext2 dumpコマンドは、dump
inode番号を保存するかどうかを.IDKと呼びます。)
inode番号を保存/制御することは通常役に立ちません。 inumを介してファイルを開くか、与えられたinumを参照するファイル名を見つけるシステムコールもありません(ツリー全体をナビゲートすることを除く)。 (FSデバッグツールはxfs_db
もちろん、inumを介してブロックデバイスを読み込んでファイルをインポートできます。)
場合によっては、inode番号を直接所有するファイルシステムの外部で使用されます。 NFSの使用ファイルハンドルとしての Inode 番号クライアントとサーバー間。 XFSデータの移行これを使用して、テープに移行されたデータをFS上のファイルと一致させます。明らかに、これがxfsdump/xfsrestore
inode番号の保存に興味を持っている理由です。