私のパーティション/dev/sda3
SSDドライブのファイルシステムは含まれていませんが、ゴミが含まれています。パーティション全体でTRIM/DISCARD操作を実行するにはどうすればよいですか?
Util-linuxのバージョンが十分に新しい場合(2012年9月)、実際には専用のツール blkdiscard
があり、これがこれを行うための最良の方法です。
Sudo blkdiscard /dev/sda3
しかし、古いLinuxディストリビューションバージョンとの互換性が必要な場合は、以下をお読みください... hdparm
/wiper.sh
ボリュームではないため、ボリュームへの接触を拒否します。したがって、それ以上のものが必要です。
私が見つけた最もサポートされている方法は、Linuxスワップボリュームが有効になっている場合にDISCARDをサポートするという事実を利用することです。最後のwipefsはそこにあるので、ボリュームは後でスワップとして認識されません。
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
これにより、デバイスの大部分でDISCARDが発行されます。
この質問はかなり古いですが...
これを行うsimplest方法は、mkfs.ext4
のかなり最近のバージョンを使用して、パーティションにext4ファイルシステムを作成することです。このツールが最初に行うことは、パーティション全体をトリムすることです。それが完了したら、作成したデータを任意のファイルシステムで上書きできます。
(たとえば、SDカードに新しいvfatパーティションを作成するためにこれを実行しました。)
hdparm --trim-sector-rangesは低レベルであり、SSDと直接通信するため、ファイルシステムに依存していません。 wiper.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(512バイトサイズ、SSD上の)セクターをトリミングできます:hdparm --trim-sector-ranges 1:2047
。これはMBR(GPTの場合はどうなるか)であるため、セクター0からトリムすることはできません。
パーティションで使用されているスペースを破棄するには、hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
を実行します。スクリプトで記述できますが、今は記述しません。
また、念のため、ここでは何も保証していません。セクターの計算が間違っている可能性があります。--trim-sector-rangesを効果的に使用する前に、すべてのバックアップを行ってください。
注:最初に示したように、最初のパーティションの前に "空の"スペースをトリミングする場合は、再起動する前にGRUB(または使用するブートローダー))を必ず再インストールしてくださいGRUBは、その一部を最初のパーティションの前の「未使用」セクターに格納します。他のブートローダーはわかりませんが、そうかもしれないので、注意してください。
あなたはスクリプトを見ることができますwiper.sh
hdparmパッケージに含まれています。 hdparmコマンドを使用します--trim-sector-ranges
少なくともext3/4ファイルシステムが含まれている場合、パーティション上のすべての空のセクターをトリムします。それがフォーマットされていないパーティションで機能するかどうかはわかりませんが、ext4でいつでも一時的にフォーマットすることができます。
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