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 の互換性を確認する
-
最初に、SSD の TRIM サポートを確認します。これには「sg3 ユーティリティパッケージ」のインストールが必要です。
Ubuntu 20.04 LTS の場合sudo apt install sg-utils
Fedora 32 の場合
sudo dnf install sg_utils
-
次に「sg_vpd コマンド」を実行して、アンマップのサポートを確認します。下記の例では、「/dev/sdX」は USB 接続された SSD のブロックデバイスのパスのことです。(これは、ドライブを接続した後 `dmesg` の出力をチェックするか、`lsblk`コマンドで確認できます。)
sudo sg_vpd -a /dev/sdX | grep "Unmap"
-
もしコマンドが以下の行を返してきたら、この 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