blkdiscardがドライブ全体のすべてのデータを消去しないのはなぜですか?

blkdiscardがドライブ全体のすべてのデータを消去しないのはなぜですか?

ASM1153Eコントローラー付きのmSATA-USBエンクロージャーには、既存のmSATA SSD(モデル名:Plextor PX-128M6M)が取り付けられています。

欲しい(論理的にはSSDコントローラレベルで)すべてのデータを削除します。

しかし、次のようになります。

  1. blkdiscardこのコマンドは、実際に要求されたデータ領域全体を削除せず、最初の2GiBから32KiBを引いたデータ領域のみを削除します。

  2. hdparm --trim-sector-ranges-stdinうまく動作しているようですが、SSDコントローラは問題です。(具体的にはこのモデルのSSD、他のモデルはこのように動作しないようです)TRIM最初の8つのセクタ(4KiBのデータ)がコマンドによってクリアされないように保護しているようです。


私の試みと実験は次のとおりです。

  1. Ubuntu 23.04で行われました。

  2. Arch Wikiのガイドのおかげで、最初に/sys/block/sdX/device/scsi_disk/*/provisioning_mode設定する必要があることがわかりました。unmapそう始まったfull。その後、システムはSCSIUNMAPコマンド(UASPを介してTRIMコントローラによってコマンドに変換されます)を既存のSSDに送信できると思います。

  3. その後、ドライブ全体に対してこれを行いました。 (blkdiscard -f -v /dev/sdXsdX実際のデバイス名)その後、すべてのバイト(ディスク容量と一致)が削除(削除)されたことを報告しましたが、プライマリGPTとバックアップGPTの両方がディスクにあることがわかりました。 spaceの開始/終了はまだ削除されていません。

  4. 2GiBサイズのパーティションを作成し/dev/urandom、 。

  5. blkdiscard -f -v /dev/sdXフルドライブを実行しhexdumpたところ、最初のパーティションの最後の1MiB + 32KiBがクリアされていないことがわかりました(パーティションは512バイトのセクタサイズのLBA 2048で始まります)。

  6. blkdiscard -f -v /dev/sdX1ドライブ全体ではなく新しいパーティションで再実行した結果、hexdumpそのパーティションの最後の32KiBは削除されていないとマークされます。

  7. hdparm --trim-sector-ranges-stdinその後、標準入力で提供されているドライブ全体のすべてのセクタのリストを試しました。今回はデフォルトのGPTがまだ存在しますが、残りのデータはすべてゼロにクリアされます。

  8. 最初の2048セクタをデータで埋めました/dev/urandom。その後、hdparm --trim-sector-ranges-stdin最初の8つのセクタ(4KiBのデータ)を除くすべてのセクタが削除されたように見えます。


クリアされていない最初の8セクタの動作がmSATA-USBチップではなくSSDコントローラによって実行されることを確認するには:

  1. その後、USBエンクロージャなしでこの古いPlextor SSDを内蔵mSATAドライブとして取り付けました。その後も、最初の8つのセクターはまだ残りますhdparm --trim-sector-ranges-stdin

  2. 別の最新のキングストンブランドmSATA SSDがあります。としてテストしましたが、hdparm --trim-sector-ranges-stdinUSBカプセル化されているか内部ドライブに直接マウントされているかどうかは例外なく、すべてのセクタがゼロでした。

関連情報