[Linux] TRIM コマンドの使用(外部接続 SSD)

Last Update: September 10th, 2021
Article ID: 1037776

SSD での TRIM コマンド

TRIM は、ATA(高度技術命令)コマンドの 1 つです。OS がデータブロックをもう二度と使用しないと判断する場合、データブロックの完全消去を行います。この TRIM コマンドによって、SSD のコントローラーがもっと効率的に SSD の利用可能なスペースを管理することが可能になります。結果として TRIM コマンドは SSD の性能を上げ、使用寿命を延長することができます。


Linux における TRIM

現在の Linux ディストリビューションでは、SATA SSD 用に TRIM コマンド、NVMe SSD 用には DEALLOCATE コマンドがサポートされています。本記事ではシンプルにするため、これら 2 つのコマンドを TRIM と呼んでいます。

これらのコマンドはファイルシステムタイプに依存しており、以下のファイルシステムでサポートされています。

ファイルシステム TRIM サポート
Btrfs はい
Ext4 はい
XFS はい
JFX はい
EXT3 いいえ
NTFS-3G はい(Periodic のみ)
VFAT はい

ファイルシステムでファイルが不要になった際に SSD に TRIM コマンドを実行すると、ファイルシステム内蔵の「ガベージコレクション(ゴミの排除)」ユーティリティーの機能を助けとなります。具体的にはどのメモリロケーションを維持する必要があり、どのロケーションを無視してもよいかを判断させることができます。不必要なメモリの場所を維持していると処理に時間がかかり、ドライブへの読み書きのアクセスが遅くなることがあるためです。

現在のほとんどの Linux ディストリビューションでは、「fstrim.service」と「fstrim.timer」を使用して、TRIM による SSD の定期的なメンテナンスを行っています。しかし、USB に外部接続された  SSD は自動的に TRIM が有効にならず、手動での設定が必要になります。

一例として以下のコードを紹介します。これは、「/media/user/USBSTORAGE」にマウントされた互換性のあるファイルシステム上で TRIM を実行するものです。このドキュメントに記載されているすべてのコード例では、特に断りのない限り、root 権限が必要です。

fstrim -v /media/user/USBSTORAGE


Ubuntu 20.04 LTS では USB 接続された外部ストレージを「/media/{username}/{storage volume name}」に自動的にマウントします。Fedora 34 では「/run/media/{username}/{storage volume name}」にマウントします。USB ストレージに対して TRIM を有効にした後、これらの自動マウントポイントを使って fstrim コマンドを実行することができます。


外部接続 SSD と TRIM の互換性を確認する

  1. 最初に、SSD の TRIM サポートを確認します。これには「sg3 ユーティリティパッケージ」のインストールが必要です。

    Ubuntu 20.04 LTS の場合
    sudo apt install sg-utils

    Fedora 32 の場合

    sudo dnf install sg_utils


  2. 次に「sg_vpd コマンド」を実行して、アンマップのサポートを確認します。下記の例では、「/dev/sdX」は USB 接続された SSD のブロックデバイスのパスのことです。(これは、ドライブを接続した後 `dmesg` の出力をチェックするか、`lsblk`コマンドで確認できます。)

    sudo sg_vpd -a /dev/sdX | grep "Unmap"


  3. もしコマンドが以下の行を返してきたら、この SSD で TRIM を有効にすることができるということです。

    Unmap command supported (LBPU): 1


外部 SSD で一時的に TRIM を有効にする

下記のコマンドを使い、ドライブの接続を解除するかこのコマンドでコンピュータを再起動するまで、SSD の TRIM を有効にすることができます。「sdX」は USB 接続された外部 SSD のブロックデバイスを指しています。

echo unmap | sudo tee /sys/block/sdX/device/scsi_disk/*/provisioning_mode


TRIM コマンドを Plugable 社製 SATA 変換ケーブル、SSD ケースなどで常に有効にする

Plugable USB-C SATA 変換ケーブル(UBC-SATA24)

Plugable USB-C SATA 変換ケーブル は、接続される 2.5 インチ SSD で TRIM および SMART コマンドをサポートしています。

次のコマンドを実行して、SSD がコンピューターに接続されているときに TRIM を有効してください。

echo 'ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' | sudo tee --append /etc/udev/rules.d/10-uas-discard.rules

Plugable USB C NVMe SSD ケース(USBC-NVME)

Our Plugable USB C NVMe SSD ケース は、内蔵された NVMe SSD で TRIM および SMART コマンドをサポートしています。

次のコマンドを実行して、このケースによって コンピューターに SSD が接続されているときに TRIM を有効してください。

echo 'ACTION=="add|change", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="9210", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"' | sudo tee --append /etc/udev/rules.d/10-uas-discard.rules
この情報は役に立ちましたか?