1. 概要

このチュートリアルでは、Linuxファイル階層をナビゲートするときに多くのシステム管理者が遭遇した lost +foundディレクトリを見ていきます。 このディレクトリが存在する理由とその目的を確認します。 また、 lost +foundディレクトリからデータを回復することについても触れます。

最後に、findコマンドを使用して、ディスク上の lost +foundディレクトリを検索して削除します。

2. lost +foundディレクトリ

lost + foundディレクトリは、fsckシステムユーティリティによって使用される構造です。これは、廃止されたデータを含む特別なディレクトリです。 fsck ユーティリティは、拡張ファイルシステム( ext2-ext4 )のパーティションを持つLinuxマシン上にそれを作成します。 ただし、UNIX派生のUFSやZFSなどの他のファイルシステムでも作成されます。

fsck ユーティリティは、ボリュームのルート lost +foundディレクトリを作成します。 したがって、ボリュームごとに1つずつ、複数の lost +foundディレクトリを作成できます。

2.1. lost +foundディレクトリの目的

lost + found ディレクトリには、ディスク操作で削除または失われたファイルが含まれています。 このディレクトリ内のファイルにはiノードがありますが、通常はシステム上のファイルにアクセスできる対応するファイル名がありません。ただし、ファイルの整合性が損なわれていない場合は、ファイルのデータにアクセスまたは復元できます。

このディレクトリ内のファイルは、iノードとファイル名を持つ通常のファイルでした。 ただし、まれに、プロセスが操作のためにファイルを開き、古いプロセスでまだ使用されているときに別のプロセスがファイルを削除すると、データフラグメントになります。したがって、プロセスがデータを使用しているときに不適切なシャットダウンまたはカーネルパニックが発生すると、データは廃止されます。

ファイルへの参照が存在しなくなり、ファイルに通常どおりアクセスできなくなったため、 fsck はデータを新しいファイルに戻し、 lost +foundディレクトリに保存します。

すでにファイルを削除しているので、気にする必要はなく、無視しても問題ありません。 一方、ハードウェアまたはソフトウェアのバグが原因でファイルシステムに損傷があった場合、fsckがこれらのファイルをlost + foundディレクトリに配置した後、fsckチェックを実行してこれらのファイルを見つけるのはユーザーの責任です。[ X211X]その後、これらのファイルからデータを回復できます。これは、ファイルシステムの損傷の程度に応じて、役立つ場合と役に立たない場合があります。

2.2. mklost +foundユーティリティ

何らかの理由でlost+ found ディレクトリを誤って削除した場合は、 mkdir を使用する代わりに、 mklost +foundを使用する必要があります。 mklost+foundコマンドは現在のディレクトリにlost+foundディレクトリを作成し、fsckにスペースを事前に割り当てるため、fsckはリカバリ中にファイルシステムにデータブロックを割り当てる必要がありません。これは、データとファイルシステムに同時に変更を加えると、データが破損する可能性があります。 そのため、 mkdir の使用を避け、代わりに mklost +foundを使用する必要があります。

mklost +foundの使用は非常に簡単です。 ボリュームにcdして、オプションなしでコマンドを実行する必要があります。

$ mklost+found 
mklost+found 1.46.4 (18-Aug-2021)
$ ls -l
drwx------ 2 xsh xsh 49152 Dec  7 20:46 lost+found

さらに、 mkfs などのツールも、ディスク上に新しいパーティションを作成するときにディレクトリを作成します。

3. lost +foundディレクトリからのデータの回復

fsck ユーティリティを使用すると、失われたデータを簡単に回復できます。 失われたデータを回復するには、前にfsckを実行する必要があります。マシンが適切にシャットダウンしなかった場合、ほとんどのLinuxディストリビューションは起動時にfsckコマンドを実行します。 それ以外の場合は、手動で実行する必要があります。

マウントされたパーティションでfsckを実行すると非常に有害になる可能性があるため、fsckを実行しているパーティションがマウント解除されていることを確認する必要があります。 たとえば、 /homeパーティションにマップされる/dev / sda3、fsckを実行してみましょう。

$ fsck /dev/sda3
fsck from util-linux 2.37.2
fsck.fat 4.2 (2021-01-31)
/dev/sda3: 200 files, 38/130811 clusters

fsck コマンドは、 / dev / sda1 のチェックを実行し、パーティションのルートに lost +foundディレクトリを作成します。 次に、パーティションをマウントして、 lost +foundディレクトリに移動します。

$ mkdir -p /tmp/home
$ mount /dev/sda3 /tmp/home
$ cd /tmp/home/lost+found

ファイルは元のファイル名を失ったため、fsckはそれらの名前をランダムな番号に変更します。 したがって、データを調べて、それを理解するために使用します。 まず、 ファイルコマンド。ファイルのヘッダーからメタデータを抽出します。

$ file *
#4605470:          ASCII text
#4655470:          PNG image data, 943 x 436, 8-bit/color RGBA, non-interlaced
#4610801:          directory
#4613588:          PDF document, version 1.4, 1 pages
...

多くのファイルがある場合、各ファイルのメタデータを調べるのは大変な作業になる可能性があります。 したがって、 grep は、 file コマンドの出力からいくつかの有用な情報を取得し、それを操作できます。

$ file * | grep PNG
#4655470: PNG image data, 943 x 436, 8-bit/color RGBA, non-interlaced
...

ここで、最初のPNGファイルを復元したいとします。 awk からファイル名を取得し、ファイルを次の場所にコピーします。

$ cp "$(file * | grep PNG | awk '{print $1}' | cut -d':' -f1)" /tmp/home/username/image.png

理論的には、データが破損している可能性があるため、回復が困難ですが、回復されたデータの整合性が損なわれない可能性もあります。

4. lost +foundディレクトリの検索と削除

lost + found ディレクトリ内のデータが膨大で、必要ない場合があります。 ただし、 lost + found は通常のディレクトリとは異なることに注意する必要があります。これは、 fsck にはブロックが事前に割り当てられているため、リカバリ中に作成されないためです。 lost + foundディレクトリを削除することはお勧めしませんが、ディスクにスペースを確保したい場合は、データを削除しても問題はありません。

find ツールを使用して、すべてのパーティションの lost +foundディレクトリを削除できます。 すべてのパーティションがマウントされていること、およびrootアクセス権があることを確認する必要があることに注意してください。

$ find "-iname" lost+found -type d -exec rm -r "{}" \;

5. 結論

この記事では、 lost + found ディレクトリの使用法と、それがLinuxファイルシステムに存在する理由について説明しました。 また、 mklost +foundを使用してlost+foundディレクトリを作成する方法も確認しました。 その後、 lost +foundディレクトリからデータを簡単に復元しました。

最後に、 lost +foundディレクトリを見つけて削除してスペースを確保する方法を確認しました。