ext ファイルシステムのファイルはいつ解放されますか?

ext ファイルシステムのファイルはいつ解放されますか?

紹介する

最近まで、extファイルシステムでは、inodeにディレクトリエントリまたはファイル記述子がファイルを参照した回数を数える参照カウンタがあると思いました。

その後、参照カウンタはそれを参照するディレクトリエントリの数だけを計算することがわかりました。これを偽造するには、ビデオファイルの参照カウントを読み取る方法を使用しますls -l。期待どおりに追加のハードリンクを作成しなかったので、1でした。その後、ビデオプレーヤーでビデオファイルを開き、同じコマンドを再実行しました。驚くべきことに、参照数はまだ1です。したがって、私の偽造は失敗しました。

ただし、唯一のディレクトリエントリを削除した後でもビデオを視聴し続けることはできます。大容量のビデオファイルを開いてそのディレクトリエントリを削除しても、ファイルシステムで使用可能なストレージ容量は変更されません。プレーヤーがビデオの終わりに到達し、ファイル記述子を閉じるか、プレーヤーが自己終了した場合にのみ変更されます(ビデオファイルのサイズによって)(使用されているビデオプレーヤーによって異なります)。

質問

外部ファイルシステムからファイルを解放するための正確な条件は何ですか? ext2、ext3、ext4でどのように処理されるのか疑問に思います。使用されているカーネルやOSの他の部分によって違いはありますか?

ベストアンサー1

ファイルシステムリンクカウンタとファイル記述子参照カウンタという2つのカウンタを混同しています。

  1. ファイルシステムリンクカウンタは、ファイルシステム自体のinodeへのリンク数を計算します。 inodeはファイルメタデータを含む構造です。 ext* ファイルシステムでは、このカウンタはファイルシステム自体に保存されます。

    inodeのあるリンク数を確認するために使用できますls -l。また、をls -i使用してファイルのinode番号を取得することもできます。たとえば、ファイルを倍増するリンクを使用して、lnすべてのリンクの inode 番号が同じであることを確認します。

    andcoz@tseenfoo:~/refcount> ls -li
    total 40
    2248813 -rw-r--r-- 1 andcoz users 40960  7 feb 21.34 test
    andcoz@tseenfoo:~/refcount> ln test test2
    andcoz@tseenfoo:~/refcount> ln test test3
    andcoz@tseenfoo:~/refcount> ls -li
    total 120
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test2
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test3
    
  2. ファイル記述子参照カウンタは、プロセスがファイルを開いた回数、より正式にはそのinodeを参照するファイル記述子の数を計算します。この情報はカーネルメモリに保存されます。

    コマンドを使用して、この値のおおよその値を取得できますfuser。このコマンドは、ファイルが開いているすべてのプロセスを一覧表示します。単一のプロセスが同じファイルを複数回開くことができるので、フューザリストのサイズは通常、参照カウンタより小さいか等しい。

    andcoz@tseenfoo:~/refcount> tail -f test &
    [3] 4226
    andcoz@tseenfoo:~/refcount> fuser test
    /home/andcoz/refcount/test:  4226
    andcoz@tseenfoo:~/refcount> tail -f test2 &
    [4] 4354
    andcoz@tseenfoo:~/refcount> fuser test
    /home/andcoz/refcount/test:  4226  4354
    

次の場合、ファイルはファイルシステムから削除されます。両方カウンタは0です。

おすすめ記事