LinuxでSSDパーティション全体をTRIM / DISCARDする方法は?


28

/dev/sda3SSDドライブのパーティションにはファイルシステムが含まれていませんが、ゴミが含まれています。パーティション全体でTRIM / DISCARD操作を実行するにはどうすればよいですか?


7
私はポイントは、彼がデータを書きたくない、彼がSSDにフラッシュブロックを消去したいが、SSDドライブのフレッシュと呼ばれる書き込み可能なように空のままにしておくことだと思う。
クリストンプソン


@joe:ATA Secure Eraseリンクには、パリティも記載されていません。ドライブ全体を消去するのではなく、パーティションだけを消去します。そして、ドライブ全体を誤って消去してしまう危険はありません。
pts

11
@Doc:ガベージデータでパーティションを埋めることは、ptsの意図とは正反対です。パーティションが使用中に完全に満たされていることをSSDに通知します。これにより、SSDのパフォーマンスと寿命が低下します。
ブラック

回答:


40

util-linuxのバージョンが十分に新しい場合(2012年9月)、専用のツールが実際にありblkdiscardます。これは、これを行う最適な方法です。

sudo blkdiscard /dev/sda3

古いLinuxディストリビューションのバージョンとの互換性が必要な場合でも、ケースがあります...読みhdparm/ wiper.shそれはパーティションではありませんので、我々はそれを超えた何かを必要とするので、ゴミは、ボリュームに触れることが。

私が見つけた最もサポートされている方法は、Linuxスワップボリュームが有効になっているときにDISCARDをサポートするという事実を利用することです。最後のワイプはそこにあるので、ボリュームは後でスワップとして認識されません。

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

これにより、デバイスの大部分でDISCARDが発行されます。


1
ありがとう、知らなかったblkdiscard。危険なコマンド... :)
frostschutz

どうして?私はそれをマニュアルで調べました:WARNING: All data in the discarded region on the device will be lost!
MrCalvin

9

この質問はかなり古いものですが、...

これを行う最も簡単な方法は、合理的に最新のバージョンのext4ファイルシステムをパーティションに作成することですmkfs.ext4。このツールが最初に行うことは、パーティション全体のTRIMです。それが完了したら、作成したデータを任意のファイルシステムで上書きできます。

(たとえば、SDカードに新しいvfatパーティションを作成するためにこれを実行しました。)


ヒントをありがとう!FYI TRIMming後、空のext4ファイルシステムのメタデータでいくつかのブロックを書き込みます。そのため、パーティションの数パーセントはトリムされません。
pts

4
あなたはinodeのジャーナルサイズと数を減らすことで、メタデータのサイズを最小限に抑えることができ@pts:mkfs.ext4 -J size=4 -N1 /dev/my/device
Aryeh Leib Taurog

2
@AryehLeibTaurogを使用-E lazy_journal_initすると、書き込みよりも書き込みがやや少なくなる-J size=4ようです。(物理SSDではなくスパースファイルを使用した実験に基づいduており、書き込まれた量を確認します。)
kasperd

@kasperd興味深い結果が得られる巧妙な実験!ありがとう。
アリーエレイブタウログ

8

hdparm --trim-sector-rangesは低レベルであり、SSDと直接通信するため、ファイルシステムに依存しません。ワイパー.shが行うことは、ファイルシステム固有のプログラムを使用して空き(ファイルシステム)領域を(ハードウェア)SSDセクターにマッピングし、hdparmを使用してそれらをトリミングすることです。

質問に答えると、hdparmを使用してそのパーティションをトリミングできますが、非常に注意する必要があります。その方法は、パーティションで使用されるセクター範囲を取得し、そのセクター範囲でhdparmを使用することです。--trim-sector-rangesの各範囲には最大65535セクターを含めることができるため、おそらく複数のセクター範囲を渡す必要があります。

fdisk -lは、パーティションの開始とサイズを示します。fdiskが使用しているユニットとSSDのセクターサイズに注意してください。

例(私のSSD):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

このパーティションの前のスペースを破棄するには、セクター1から始まる2047(SSDでは512バイトサイズ)セクターをトリミングできますhdparm --trim-sector-ranges 1:2047。セクター0から開始することはできません。これはMBRであるためです(GPTの場合はどうでしょう)。

パーティションで使用されているスペースを破棄するには、を実行しますhdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...。スクリプトを作成することもできますが、今は作成しません。

また、念のため:ここでは何も保証していません。誤って計算されたセクターがある可能性があります。すべてをバックアップしてから、-trim-sector-rangesを効果的に使用します。

:最初に示したように、最初のパーティションの前に「空の」スペースをトリミングする場合、GRUBは最初のパーティションの前の「未使用」セクターにその一部を保存するため、再起動する前に必ずGRUB(または使用するブートローダー)を再インストールしてください。他のブートローダーを知らないが、そうかもしれないので、注意してください。


7
wiper.sh廃止されましfstrimたが、これははるかに安全ですが、この特定の使用法でblkdiscardは両方に勝ります。2013年には、計算範囲を手動で危険にさらす必要はありません。
ガブリエル

6

wiper.shhdparmパッケージに含まれているスクリプトを見ることができます。--trim-sector-ranges少なくともext3 / 4ファイルシステムが含まれている場合は、hdparmコマンドを使用して、パーティション上のすべての空のセクターをトリムします。フォーマットされていないパーティションで動作するかどうかはわかりませんが、ext4で常に一時的にフォーマットできます。


ext4でフォーマットしてから実行wiper.shすると、ext4メタデータを除くほぼすべてのパーティションがトリミングされます。しかし、パーティション全体をトリミングしたいと思います。
pts

2
@pts:ワイパー.shのコードを見て、それがトリム範囲をどのように推測するかを理解することをお勧めします。次に、トリム範囲をhdparmに手動で送信して、パーティション全体をTRIMできます。
ヤープEldering

4

blkdiscardドライブ全体だけでなくパーティションでも機能します。Fedora 20で正常にテストしました。ソースを確認しましたblkdiscard。これは、パーティションについて何も知らない非常に単純なプログラムです。カーネルが翻訳を行うと思います。

非常に注意し、blkdiscard質問をせず、進捗情報を表示しません。

blkdiscardが利用できない場合、このスクリプトを使用して、その出力をhdparmにフィードします。最初の引数はトリミングするセクターの数で、2番目はトリミングする最初のセクターです。

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done

-1

HDDEraseを使用して、SSDに組み込まれたセキュアな消去機能を呼び出す方法について説明している興味深い記事があります。

http://www.windowsitpro.com/article/file-systems/q-how-can-i-reset-a-solid-state-disk-ssd-to-a-fully-erased-clean-state-


回答いただきありがとうございますが、1)ドライブ全体を消去する2)Microsoft Windowsが必要であり、Linuxソリューションを探していたため、うまくいきません。
pts

2
また、これは基本的に同じことblkdiscard --secureです。
ntninja
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.