ファイルシステム(ext4)はTRIM情報をどのように「保存」しますか?

ファイルシステム(ext4)はTRIM情報をどのように「保存」しますか?

毎週実行されるTRIMクローンジョブを有効にすることをお勧めします。 fstrimコマンドが呼び出されると、ファイルシステムは削除されたデータを削除するためにTRIMメッセージをドライブに送信します(これを正しく実行してください)。

いろんなところで説明したように、これまではとても良いです。

しかし、fstrimコマンド間のファイルシステムで、このTRIM情報が「保存」される方法/場所に関する情報が見つかりませんか?

SSDが破棄する必要があるすべてのページ/ブロックに関する情報を取得できないように、このTRIM情報を「削除」する方法はありますか?

それとも、fstrimコマンドはファイルシステムとSSDを比較して実際に削除されたデータを確認しますか?

ベストアンサー1

ext4が実際にどこに保存しているのかわかりません。他のファイルシステムは確かにそうではありません。

ext4は、現在のセッションでクリーンアップされたコンテンツのみを防ぎます(まだマウントされている間)。ファイルシステムを再起動または再マウントすると、空き領域が再クリーンアップされます。

したがって、これはまったく保存されないメモリ構造である可能性があります。私は見つけるために非常に良いソースコードを掘り下げませんでした。

少しテスト:

# truncate -s 1G /dev/shm/foobar.img
# losetup --find --show /dev/shm/foobar.img
/dev/loop9
# mkfs.ext4 /dev/loop9
# mkdir /mnt/loop

1Gファイルシステムが与えられたら、それをマウントして整理してみましょう。

# mount /dev/loop9 /mnt/loop/
# fstrim -v /mnt/loop
/mnt/loop: 973.4 MiB (1020678144 bytes) trimmed
# fstrim -v /mnt/loop
/mnt/loop: 0 B (0 bytes) trimmed

だから最初にすべてを整理します...それはすでに怪しいことです。結局、mkfsも整理されたので、まだ空で整理されていることを知る必要があります。そうですか?まあ、知っていれば気にしません。

# umount /mnt/loop
# mount /dev/loop9 /mnt/loop
# fstrim -v /mnt/loop
/mnt/loop: 973.4 MiB (1020678144 bytes) trimmed

したがって、再インストールした後は、利用可能なすべてのスペースを切り捨てます。

ファイルを作成して削除しても正確ではありません。

# dd bs=1M count=10 if=/dev/zero of=/mnt/loop/zerofile
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0124641 s, 841 MB/s
# sync
# rm /mnt/loop/zerofile
# fstrim -v /mnt/loop
/mnt/loop: 117.5 MiB (123203584 bytes) trimmed

したがって、10Mを書くと、117Mが再トリムされます。それは意味がありません。

SSD自体だけが現在クリーンアップされているものとクリーンアップされていないものを知っています。したがって、破損は発生せず、この情報をファイルシステムに実際に保存する必要はありません。

おすすめ記事