第21章 ソリッドステートディスクの導入ガイドライン

ソリッドステートディスク (SSD) とは永続的なデータの格納に NAND フラッシュチップを使用するストレージデバイスを指します。今までのディスクとは大きく異なり、データを回転する円盤状の磁気記憶媒体に格納します。SSD では、論理ブロックアドレス (LBA) 全体でのデータへのアクセス時間は一定になります。一方、回転媒体を使用するこれまでのディスクの場合、広範囲のアドレスにまたがるデータにアクセスするパターンでは時間がかかります。このように、SSD デバイスの方が待ち時間やスループットに優れています。
使用中のブロック数がディスクの最大容量に近づくにつれパフォーマンスが低下してきます。パフォーマンス低下の度合いはデバイスのベンダーごとに大きく異なりますが、いずれのデバイスにもある程度のパフォーマンス低下が見られます。
パフォーマンス低下の問題に対応するため、ホストシステム (Linux カーネルなど) は、特定のブロック範囲が使用されなくなっていることをストレージに知らせる discard 要求を使用できます。SSD はこの情報に基づいて領域を内部で解放し、解放した空きブロックをウェアレベリングに使用することができます。discard 要求が実行できるのは、そのストレージがストレージプロトコル (ATA または SCSI) に対応している場合のみです。discard の要求は、ストレージプロトコル固有のネゴシエート済みの discard コマンドによってストレージに対して実行されます (ATA の場合は TRIM コマンド、SCSI の場合は WRITE SAME (UNMAP を設定)、または UNMAP コマンドになります)。
discard サポートを有効にすると、以下の 2 点が「true」である場合に最も役立ちます。1 つ目として、ファイルシステムに使用可能な空き領域が依然としてある場合、2 つ目として、基礎となるストレージデバイスの論理ブロックのほとんどがすでに書き込まれている場合です。TRIM の詳細については、次のリンクにある 『Data Set Management T13 Specifications』 を参照してください。
UNMAP の詳細については、次のリンクにある 『SCSI Block Commands 3 T10 Specification』 のセクション 4.7.3.4 を参照してください。

注記

市場で販売されているソリッドステートのデバイスすべてに discard サポートがある訳ではありません。ソリッドステートのデバイスに discard サポートがあるかどうかを判別するには、/sys/block/sda/queue/discard_granularity を確認します。

21.1. 導入に関する考慮事項

SSD の操作および内部のレイアウト上、デバイスのパーティション設定は内部の 消去ブロックの境界 で行うのが最適です。SSD によりトポロジー情報がエクスポートされると、Red Hat Enterprise Linux 6 のパーティション設定ユーティリティーによって適切なデフォルト設定が選択されます。
ただし、デバイスがトポロジー情報を エクスポートしない 場合には、1 番目のパーティションを 1MB の境界で作成することをお勧めします。
さらに、MD (ソフトウェア RAID) は discard 要求に対応しないことに注意してください。これとは対照的に、論理ボリュームマネージャー (LVM) や LVM が使用する device-mapper (DM) ターゲットは discard 要求に対応しています。discard 要求に対応しない DM ターゲットは dm-snapshot、dm-crypt、dm-raid45 のみなります。Red Hat Enterprise Linux 6.1 では dm-mirror の discard 要求サポートが追加されました。
また、Red Hat では SSD 上でのソフトウェア RAID レベル 1、4、5、6 の使用は推奨していないことに注意してください。このような RAID レベルの初期化段階で、チェックサムの正常な動作確認のために RAID 管理ユーティリティー (mdadm など) によってストレージデバイス上の 全ブロック に書き込みが行われることがあります。この書き込みが実行されると、SSD のパフォーマンスが急速に低下してしまいます。
Red Hat Enterprise Linux 6.4 では、discard に完全に対応しているファイルシステムは ext4 と XFS のみになります。Red Hat Enterprise Linux 6 のそれ以前のバージョンでは、discard に完全に対応しているのは ext4 のみでした。デバイスで discard コマンドを有効にするには、mount オプションの discard を使用します。たとえば、discard を有効にして /dev/sda2/mnt にマウントする場合は、以下を実行します。
# mount -t ext4 -o discard /dev/sda2 /mnt
ext4 はデフォルトでは discard コマンドを発行しません。discard コマンドを正しく実装しない可能性があるデバイス上での問題を回避するためです。Linux swap コードは discard が有効になっているデバイスに対して discard コマンドを発行するため、この動作を制御するオプションはありません。