TRIMを有効にする方法は?


189

Linuxカーネルがバージョン2.6.33の時点でTRIMをサポートしていることを知っているため、ubuntuでTRIMをサポートする必要があります。

TRIMはデフォルトで有効になっていますか、それとも機能するためにいくつかの設定を変更したり、追加のソフトウェアをインストールする必要がありますか?もしそうなら、どのように?


私はちょうど:-)いくつかの本当に良いオプションを提供しますwebupd8に、これらの命令に続くwebupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.htmlで前述したように、私は自動トリムのためのオプションを試してみましたが「自動TRIM」が、毎日のcronを設定することで、私の設定でより良く機能することがわかりました。
bmbaker

回答:


197

Ubuntu 14.10以降

Ubuntu 14.10および15.04では、がサポートするすべてのSSDでTRIMmingが毎週自動的に行われfstrimます。

$ tail -n1 /etc/cron.weekly/fstrim 
/sbin/fstrim --all || true

15.04以降、Ubuntuはsystemdとそのタイマーを使用しますman systemd.timerArch wiki

systemctl list-timers
systemctl status fstrim.timer

Ubuntu 14.04

Ubuntu 14.04の時点では、Intel、SAMSUNG、OCZ、Patriot、Sandisk SSDのスケジュールされたTRIMはデフォルトで有効になっています。別のブランドがある場合は、次のコマンドを実行してベンダーチェックを無効にできます。

sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim

(または単にファイル/etc/cron.weekly/fstrimを編集して追加--no-model-check

Ubuntu 13.10以前

TRIMを実行するには、手動、スケジュール、自動の3つの方法があります。

手動トリム

Ubuntuでは、次の方法で実行できますfstrim

sudo fstrim /

ただし、以下のセクションで詳述するように、スケジュールされたTRIMまたは自動TRIMが有効になっている場合は必要ありません。

注意:のためのUbuntu 11.04およびそれ以前のシステムでは、fstrimが利用できないので、あなたが使用する必要がwiper.sh付属hdparm/usr/share/doc/hdparm/contrib/wiper.sh.gz

スケジュールされたTRIM(推奨)

これは現在推奨される方法であり、Ubuntu 14.04のデフォルトごとにアクティブ化される予定です。古いバージョンのubuntu(11.10から13.10)で手動でアクティベートする方法は次のとおりです。

毎週のCRONジョブスクリプトファイルを作成します。

gksudo gedit /etc/cron.weekly/fstrim

次のコードをファイルに貼り付けてから、ファイルを保存して閉じます。

#! /bin/sh  

# By default we assume only / is on an SSD. 
# You can add more SSD mount points, separated by spaces.
# Make sure all mount points are within the quotes. For example:
# SSD_MOUNT_POINTS='/ /boot /home /media/my_other_ssd'  

SSD_MOUNT_POINTS='/'  

for mount_point in $SSD_MOUNT_POINTS
do  
    fstrim $mount_point  
done

上記では、ルートファイルシステムのみ/がSSDにあると想定しています。1つ以上のSSDにあるマウントポイントがさらにある場合SSD_MOUNT_POINTSは、コードの説明に従って追加します。

スクリプトを実行可能にします。

sudo chmod +x /etc/cron.weekly/fstrim

そして最後にテストします:

sudo /etc/cron.weekly/fstrim

エラーが表示されない場合、cronジョブは正常に機能しているはずです。

自動TRIM(非推奨、低速)

自動TRIMは、Ubuntu 10.10(カーネル2.6.33)以降、EXT4ファイルシステムでサポートされています。ただし、一部のドライブでは、削除のたびに-TRIMコマンドをリアルタイムでSSDに送信することが認識されているため、削除が通常よりも大幅に遅くなります。したがって、cronジョブ(上記)を介して毎週スケジュールされたTRIMが推奨されます。

ドライブまたはパーティションで自動TRIMを有効にするには、のdiscardオプションでそれらをマウントする必要がありますfstab。最初にfstabをバックアップしてから編集用に開きます。

sudo cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

discardSSDドライブまたは各パーティションのfstabオプションエントリ(カンマ区切り)に追加します。

UUID=00000000-0000-0000-0000-000000000000  /  ext4  discard,errors=remount-ro  0  1

fstabを閉じて保存し、再起動すると自動TRIMが機能するようになります。

自動TRIMのテスト

TRIMが機能しているかどうかをテストするには、次のコマンド(source)を発行します。

cd  / # Replace with SSD file system
sudo dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
sudo hdparm --fibmap tempfile

出力から番号をコピーし、begin_LBASSDのデバイス名を確認します(System->Administration->Disk Utility例:sda、sdb、sdc ...)

以下を実行しますが、[ADDRESS](begin_LBA)とsdX(SSDデバイス名)を上記で取得した詳細に置き換えます。

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

出力は、それらのセクターの長い文字列でなければなりません

sudo rm tempfile
sync

hdparm上記のコマンドを繰り返します。

sudo hdparm --read-sector [ADDRESS] /dev/sdX 

ゼロしか得られない場合は、自動TRIMが機能しています。ただし、ファイルを削除してもセクターが空でない場合は、しばらく待ってからコマンドを再実行してください。


5
:テストTRIMは、実際にそのように動作しない場合がありますserverfault.com/a/401506/60525
chrishiestand

1
@Uli誰か助けてください。私にはうまくいかないようです。私は私のSSDで4つのパーティションを持っている/ /boot /usr/opt、私は私のために別のHDDを使用しています/home。に進みcd / #sdc、指示を続行しますが、ゼロを取得することはありません。前もって感謝します!
BugShotGG

1
@lightrush:すばらしい編集です!回答を最新の状態に維持していただきありがとうございます。
ウリ

1
少なくとも私のシステムではtempfileがすぐに作成されないためsyncddコマンドの後にaを追加することができます。そのため、hdparmは何も報告しません。
アンドレアスJ.

2
systemdは今これを処理します。sudo systemctl status fstrim.timer
バルーン

28

暗号化を使用している場合、ここまでに投稿したソリューションは役に立たないことに注意してください。暗号化層でもTRIMサポートを有効にする必要があるためです。これは、カーネルバージョン3.1+およびcryptsetupバージョン1.4+で実行できます。どちらもUbuntu 12.04に含まれています。

LUKS暗号化パーティションのTRIMのセットアップに関するガイドはこちら


UbuntuおよびDebianでLUKS暗号化パーティションでTRIMをアクティブにする方法


このステップバイステップのウォークスルーでは、cryptsetup 1.4以降およびカーネル3.1以降の暗号化されたSSDパーティションにTRIMテクノロジーを活用できます。これにより、手間のかからないSSDエクスペリエンスが実現します。

「TRIMを使用すると、SSDはガベージコレクションのオーバーヘッドを処理できます。そうしないと、関連するブロックへの将来の書き込み操作が大幅に遅くなります。」

設定例

SSDを単一ドライブとして使用するノートブック、LinuxをLVMスワップパーティションを持つ単一ext4 LVMルートパーティションにインストールし、両方ともLUKS暗号化論理パーティションを使用します。

SSD:/ dev / sda

sudo fdisk -l /dev/sda
/dev/sda1               # boot partition (83) (unencrypted, ext4)
/dev/sda2               # extended partition
/dev/sda5               # logical partition (83) with LUKS encryption

ls /dev/mapper
/dev/mapper/sda5_crypt         # encrypted LUKS device in physical /dev/sda5 partition
/dev/mapper/volumegroup-root   # rootpartition sda5_crypt
/dev/mapper/volumegroup-swap   # swap partition sda5_crypt

方法

  1. すべてのデータのバックアップを作成します。あなたはファイルシステムをいじっているので、バックアップをとることは単に良い考えです。
  2. 必要なカーネルとcryptsetupのバージョンがあることを確認してください(ただし、Ubuntu 12.04の場合は3.1と1.4、ただし、12.04の執筆時点ではまだベータ版です)。
  3. / etc / fstabファイルの暗号化されたLVMボリュームのファイルシステムオプションにdiscardパラメーターを追加します。これにより、LVMパーティションのファイルシステムがTRIMを使用することを認識します。

    /dev/mapper/volumegroup-root    /   ext4 discard,noatime,nodiratime,errors=remount-ro    0    1
    
  4. ただし、最後の手順では十分ではありません。LUKSは、TRIMの使用を認識していない限り、セキュリティ上の理由から、LVMパーティションのファイルシステムから来るすべてのTRIM操作を効果的にブロックします。/ etc / crypttabのcryptdeviceオプションにdiscardパラメーターを追加して、LUKSがLVMパーティションの破棄動作を受け入れるようにします。

    sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard
    
  5. initramfsを再構築します。crypttabオプションはそこに保存され、起動時に使用されます。

    sudo update-initramfs -c -k all
    
  6. リブート。

  7. TRIMが現在アクティブかどうかを確認します。

    sudo dmsetup table /dev/mapper/sda5_crypt --showkeys
    
  8. 最後のコマンドでこのような結果が表示された場合(最後に1つのallow_discards)、すべて設定されています。

    0  77656056  crypt  aes-cbc-essiv:sha256  abc[...]c7a0c  0  8:5  2056  1  allow_discards
    

結果

TRIMがアクティブになります。手間のかからないSSDをお楽しみください!


@Marco Ceppi編集の特定の理由、私が見落としていた何か?
nem75

ただ、値下げを片付けや「署名」行を削除(あなたがサイト上でコメントや投票を経由してフィードバックを得るだろうと仮定しています。
マルコケッピ

7
サイト/ページが利用できない場合は、ここにガイドを含める必要があります。
カス

これは事実上リンクのみの回答であることに加えて、まったく機能していません。ほとんどのユーザーは、LUKSでLVMを使用します。これは、12.04ではTRIMを伝播できません。詳細については、この回答を参照してください。
gertvdijk

1
これらの指示に従った後でも、14.04でディスクをトリムするためにcronジョブをセットアップする必要がありますか?
ajn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.