inode番号を使用してファイルをコピーする方法は?

inode番号を使用してファイルをコピーする方法は?

この質問はSambaに関連しており、inodeは必要ありません。


特殊文字を含むファイルの処理に問題があります。それを押して検索すると、inodeファイルが一覧表示されます。

 $ find . -inum 90505400 -exec ls {} \;
./12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac

ただし、ファイルでまたはを使用し続けるとcpエラーが発生します(ドイツ語で「Datei oder Verzeichnis nicht gefunden」)。rmfile not found

 $ find . -inum 90505400 -exec cp {} ne.flac \;
cp: './12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac' kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden

私はファイルをコピーするために直接inodeを使用する他のコマンドを使用できるかどうか疑問に思います。私もしばらくこの問題を経験しました。を使用してすべてのファイルを削除できますが、破損したrm *ファイル名を変更したいと思います。


これはext4、次の行を使用して外部USB HDDからRaspiにマウントされたファイルシステムです(難読化されたパスとIPが変更されました)。

UUID=e3f9d42a-9703-4e47-9185-33be24b81c46   /mnt/test   ext4    rw,auto,defaults,nofail,x-systemd.device-timeout=15 0 2

次に、Sambaを使用して以下を共有します。

[mybook]
path=/mnt/test
public = yes
browseable = yes
writeable = yes
comment = test
printable = no
guest ok = no

Lubuntu 16にインストールしました。

//192.168.1.190/test         /home/ben/test               cifs auto,nofail,username=XXX,password=XXX,uid=1000,gid=1000

VNCMacbookを介してLubuntu 16に接続されています。それとも、SSHちょうど入ります。私は完全な情報を得るように言うだけです。

また、FinderでこのMacbook(およびその他)の共有をマウントしました。 Finderはファイル名を正しく表示できません。

ここに画像の説明を入力してください。


あるユーザーから役立つコメントを聞いた後、ホスト上のファイルを操作するには、Sambaを介してファイルを操作するのではなく、生のファイルシステムを使用する必要があることに気づきました。

SSH0xF022ホストを入力すると、次のファイル名が表示されます(「135」の後の記号を参照)。

'12 String Quartet No. 16 in F Major Op. 135 Der schwer gefa?te Entschlu? Grave, ma non troppo tratto (Mu? es sein ) - Allegro (Es mu? sein !).flac'

cpその後、ホスト自体にファイルをコピーできます。

(ファイル名をどのように取得したのか疑問に思った人は、要約flacファイルとそのcueシートを別々のファイルに分割して自動的に名前を付けました。)

答え1

open()(コピー)rename()、(削除)の両方がunlink()ファイル名で構成されています。 debugfs.

を使用してファイルを削除できる場合は、を使用して名前を変更するか、を使用してファイルをコピーrm *できます。そのファイルのみが一致すると仮定します。それ自体には何の違いもありません。mv ./12* someothername.flaccp ./12* newfile.flac./12*find

しかし、Macについて言及しましたが、Macではファイル名が有効なUTF-8でなければならないと思います。これは、ファイル名が破損している場合に問題を引き起こす可能性があります。 Linuxは間違ったUTF-8の名前を指定しませんが、もちろんいくつかのツールは奇妙に反応するかもしれません。 (まだテストしていません。)Sambaも役に立ちません。

これが問題に関連していると仮定すると、ファイルシステムを使用してホストにSSHを接続し、中間部分をスキップしてそこからファイル名を変更できます。

答え2

そのinodeを介してファイルを開くことはできません。 inodeでファイルを開くと権限がバイパスされるため、これはオペレーティングシステムの設計の意図的な側面です。

呼び出しは、find . -inum $inode_number -exec … {} \;そのinodeに基づくファイル操作に最も近いです。ただし、これはファイル名を使用し、バグフリーのシステムで動作することを保証します。

出力は、?有効な文字を構成しないバイトを示します。おそらく、UTF-8を必要とするツールにレガシー8ビットエンコーディングを提供するソフトウェアがあります。

これが誤ってエンコードされたファイル名を使用するmacOSツールの症状であるかどうかはわかりません。もしそうなら、Cロケールでコマンドを実行してみてください。これは、すべてのファイル名がバイトシーケンスとして扱われるため、無効な文字がないことを意味します(ユーザースペースツールに関する限り - リモートサーバーが誤ったデータを提供すると、カーネルにまだ問題がある可能性があります)。

LC_ALL=C find . -inum 90505400 -exec cp {} ne.flac \;

もう一度試すことができるもう1つの方法は、export LC_ALL=Crunを入力して[完了]をmv 12クリックすることですTab

これがうまくいかない場合、問題はファイルを開くように指示されたときとファイルのメタデータを検索するように指示されたときに異なる反応をする欠陥のあるファイルシステムです。これはSambaクライアントまたはSambaサーバーのバグまたは構成エラーの可能性があります。または、SambaはUTF-8で完全に構成されており、UTF-8でエンコードされていないサーバーのファイル名を処理できません。ファイル名がUTF-8でエンコードされているかどうかをサーバーで確認することをお勧めします。そうでない場合は、サーバーで名前を変更してください。もしそうなら、Sambaの設定に問題があります。

関連情報