データストレージとしてのSSD

2020-11-07

SSDがだいぶ安くなったので、そろそろデータストレージにSSDを、って人も出てくるだろう。 というか、私もそこそこそうしてる。

私がSSDを初めて買ったときは、120GBのSSDで1万円くらいだった。CorsairのFORCE LSだ。 ちなみに、容量は少なくてもいいから、高性能なSSDがほしい、という選び方だった。

このForce LSは6年半経った今でもシステムディスクとして現役だ。

しかし、現在はSSDの性能は飛躍的に向上し、容量も増加し、価格も安くなった。 そしてそれに伴って、一口に「SSD」といっても、様々な製品が存在するようになった。

一般教養

今のSSDについてざっとまとめよう。

現在一般向けに流通しているSSDの形式は

  • SATA/AHCI
  • M.2 (Key B/B+M/M) SATA/AHCI
  • M.2 (Key B/B+M) PCIe 2x/NVMe
  • M.2 (Key M) PCIe 4x/NVMe
  • PCIe 4x/NVMe

の5種類。 形状的には

  • 2.5inch (エンクロージャ)
  • M.2
  • PCIe

の3種類。さらにM.2が長さの違いで、

  • 2230
  • 2242
  • 2260
  • 2280
  • 22110

の5種類。

M.2そのものは幅も違う規格があるけど、SSDスロットとしてはない模様。

実用的知識

この中で現実的に使われるのは、

  • 2.5inch SATA
  • Key M M.2 2280 PCIe 4x NVMe
  • Key B+M M.2 2280 SATA AHCI

なので、呼び方は

  • SATA
  • M.2 or NVMe
  • M.2 SATA

って感じになっている。

例外的なことを言うと、一部の小型モバイルラップトップが2242のSSDを使っているほか、WD_BLACK AN1500とかOptane 905Pとか一部のSSDは一般向けでもPCIe接続だったりする。 間違って買う人はいないと思うけど。

注意点は、M.2の挿されるほうがSATAとNVMeどちらに(あるいはどちらも)対応しているか。 これによって使えるストレージのタイプが変わる。

SATAの転送速度は6Gbpsで、言い換えると750MB/s。 WD_BLACK AN1500のreadが最大6500MB/sなので、帯域は全然足りない、ということになる。PCIe Gen4は1レーンあたり片方向約2GBps(=2000MB/s)で、2レーンだと4000MB/sとまだ足りず、4レーンなら8000MB/sになる。実際にはB550のM.2スロットはPCIe gen3接続だったりするから、4xでも約4GB/sで最速SSDの公称値には到達しない。そのあたりの速度を求めるなら570Xボードが必要になる。

なんで、“SATA”, “NVMe”なんだろね? 用語のレイヤーが方や伝送規格で、方やプロトコルなのに。別にSATA/NVMeも可能なはずだけど。

だいたいラップトップはM.2スロットになっていて、デスクトップのほうも1つか2つM.2スロットを持っているのが現代的な仕様。この手の組み込みM.2はNVMeオンリーが増えていて、M.2 SATA/AHCIなカードはやや下火。1TBカードもあんまり出てないし。

また、NVMeスロットを持つようになった分、SATAポートは減少傾向。4ポートしかないとか、M.2スロットと排他だとかあったりする。

製品パターン

現状、販売されてるSSDはこんな感じの種類がある。

  • 読みが500MB/sクラス、書きは300-450MB/sくらいのSATA
  • 読み書きとも500MB/sクラスのSATA, DRAMなし, SLCキャッシュあり
  • 読み書きとも500MB/sクラスのSATA, DRAMあり
  • 読み書きともに1000-1500MB/sクラスのNVMe 1.2/PCIe gen3
  • 読み2500-3500MB/s, 書き1500-2000MB/sくらいのNVMe 1.3/PCIe gen3, DRAMなし, HMBサポート
  • 読み2500-3500MB/s, 書き1500-2000MB/sくらいのNVMe 1.3/PCIe gen3, DRAMあり
  • 読み、書きともに3000MB/sを越えるNVMe 1.3/PCIe gen3
  • 読み、書きともに5000MB/sを越えるNVMe 1.4/PCIe gen4

という感じ。

実際はもっといっぱいあって、例えばTBWによる耐久性の違いとか。

そう、SSDを選ぶのは非常に難しい。以前は「SLCなら高コスト高品質」くらいにしか言われていなかったのに。

ざっくり私がAmazonで買った履歴を見るとこんな感じ。

  • Trancend TS480 SATA 540/500MBps 480GB 2018/4 Y13500
  • DREVO D1 M.2 SATA 500/500MBps 240GB 2018/4 Y8999
  • Samsung 960 Evo M.2 NVMe(1.2) 3200/1900MBps 250GB 2018/4 Y14696
  • WD BLUE M.2 SATA 560/530MBps 500GB 2019/1 Y7420
  • Crucial P5 M.2 NVMe(PCIe3) 3400/1400MBps 250GB 2020/9 Y6848
  • KIOXIA EXCERIA SATA 555/540MBps 960GB 2020/11 Y10980

2.5インチSSDがこの2年半で480GB 13500円から960GB 10980円に下落している。 なお、480GBなのは、当時500GBは15000円を越えており、このトランセンドの480GBが極端に安かったからである。 一方、KIOXIAのSSDは特にお買い得というわけではなく、ライバルはだいたい1GBになっている。 まぁ、ざっと半額よりは落ちていると考えていい。実際、EXCERIAには480GBモデルがあるが、6000円を切っている。

一方、P.5はNVMeでもハイエンドレンジになる製品だ。1TBは2万円くらいするので、バリューレンジのEXCERIAに対して倍くらいと考えていい。 そして、本当のハイエンドクラスになる、PCIe gen4に対応し、読み書きともに5000MB/sを越える980PROは250GBで1万円くらい、1TBだと25000円くらいしている。

ここまで難しい話をしてきたが、おおまかな話としては、「高い高速・高耐久なSSDと、安いSSDがある」となる。

1TBのM.2 SATAはあまりないので話が難しいが、NVMe SATAであっても安いものは1TBで1万円ちょっとくらい。つまり、ざっと倍の値段差がある「バリューレンジとハイエンド」というものがある。 そして、同レンジの中では色々な仕様の違いがあり、気にいるものを選べばいい、という感じになる。

だが、考えてみてほしい。データ倉庫としてはだいたいメディアデータを放り込むだけだし、あんまりデータの書き換えはしないのではないか。

SSDの重要なところは「書き込み回数で死ぬ」である。 DRAMキャッシュの存在は速度への寄与も大きいが、細かな書き込みで書き込み回数を抑制できるかどうかという点も重要だ。

だから、システムディスクとしてはちゃんとDRAMキャッシュを載せて、TBWも高めで、高速なNVMe SSDを使いたい。 でも高いし、高速なストレージを用意するよりは、データアクセスするストレージを分けた方が高価は大きいので、あまり大きくなくていい。 小さいとTBWも低いし、そもそも書き込みが局所化されてダメージがたまるので、だいたい50%以下で運用できそうなくらいの容量を。私は250GBにしてるけど、あまりデータを置かないようにしても使用率は常に50%を完全に上回ってしまっているので、500GBのほうが良いかもしれない。

一方、データストレージとしては、めっちゃ速い必要もないので、なんならSATAでもいい。DRAMはあったほうがいいけどなくてもいい。

構築を考える

Chienomi的にはLinuxからまず考えたい。むしろWindowsのことはどうでもいい。

まず/は高性能NVMeで決まりだ。私の推しSSDはCorsairのMP510。 1.92TBと4TBはTBWがめちゃくちゃ高いが、その分お値段も高い。 といっても、GB単価は1.92TBで19円くらい、4TBで25円くらいと、単純に高いだけで割高なわけではない。 240GBが26.5円くらいするからそっちのほうが割高。お買い得な960GBも19円を少し切るくらい。

P5もなかなか良い。もちろん、どうしても速さが欲しいなら980PRO, MP610, PCIe接続のWD_BLACKなんかも考えてもいい。

これにデータストレージを載せる。こっちはSATA SSDでもいいし、NVMeでも1TB 1万円くらいのやつでもいい。 ただ、重要なのはF2FSを使う、ということだ。

データストレージとして考えたとき、1TBもあれば数的にはともかく、容量的にはメディアデータが多くなる。 F2FSはメディアデータをColdデータとして扱い、「変更されず置きっぱなしになるだろうデータ」と認識する。この特性の違いをうまく扱うのだ。

F2FSはFTLのあるフラッシュストレージを前提にしている。 LogFSやJFFS2は生フラッシュメモリを想定しているのでFTLがない前提、つまりフラッシュメディアへの書き込みを完全にコントロールできる前提で考えている。FTLを前提にしたF2FSはSSD向きだ。 なお、最近のSDカードやUSBメモリ(SDXCカードとか)はFTLを持っているので、JFFS2よりもF2FSがいい。まあ、つまりはだいたいフラッシュメモリでデータ倉庫にするような大きいものならF2FSがいい。速いし、寿命も伸びるし。

なお、私は経験上、全デバイスを暗号化している。 dm-crypt上にF2FSを構築することが、F2FSとしてのメリットを保つかどうかについては明確な回答が得られていない。 だが、少なくともF2FSが良好なパフォーマンスを発揮するという点では変わらない。 可能なら暗号化なしでF2FSを使うのが良いだろう。

現在の私の主な構成は以下のようになっている。

マシン OS/Type ディスクタイプ サイズ
B550 Linux NVMe SSD ハイエンド 250GB
B550 Windows NVMe SSD ハイグレード 1TB
B550 Data SATA SSD 960GB
B550 Cache 2.5” HDD 500GB
P720 Linux NVMe SSD ハイエンド 250GB
P720 Windows SATA SSD 1TB
P720 Cache 2.5” HDD 320GB
A10 Linux SATA SSD 120GB
A10 Windows SATA SSD 480GB
A10 Cache 2.5” HDD 250GB
Z400 Linux M.2 SATA SSD 120GB
Z400 Windows 3.5” HDD 250GB
Portable Data M.2 SATA SSD USB3.1 gen2 Enclosed 240GB
Portable Data SATA SSD USB3.0 Enclosed 960GB

Cacheとはなにか。

まず私のデータは膨大である。今は不均衡になっていて、ちゃんとデータが整理できないが、格納されているデータ容量は数十TBにものぼる。 これらはRAIDディスク上で暗号化されたものがiSCSIで提供され、その上にBtrfsが構築されており、任意のマシンがGbE LAN上でアクセスし、マウントする。

つまり、容量がでかい上に起動がめんどくさく、起動すればかなりの電気代がかかり、しかも遅い。さらにいえば、今はディスクが死にかけているから、二重化されているとはいえ気安く起動できない。

そのため、アクセス頻度の高いデータを置いておくための領域がCacheである。 一方、Dataはディスクが死にかけているせいでメインストレージはroでマウントしているから、メインストレージを復活させるまでの救済措置としてデータを置いておく場所になっている。

ただし、Portable Dataは意味が違う。 SATA SSDをエンクロージャに入れたものはHDDのように運搬に気を遣わずによく、ラップトップを含むクロスマシンで使いたいデータなどが入っている。

例えば小さいほうのPortable Dataは、人に説明するときに見せることがある画像や動画などが入っているほか、必要なときに完全にクリーンな環境で作業できるデータ一式も入っている。これとUSB Linux(要はManjaroのインストールイメージ)を組み合わせることで、任意のマシンでManjaroを起動し、systemd-nspawnを使って本格的に作業可能な環境を用意する、というようなことも可能だ(まぁ、それだと日本語が入力できないが)。 まぁ、本気でやるならそもそも小さいほうのPortable DataをBootableにするという選択肢もあるだろう。今のところそこまでやる必要性を感じていない(そもそもそれはSSDに結構な負荷がかかる)。

大きいほうのPortable Dataは音楽ファイル、動画や資料などが入っている。主に集中して作業するマシンで使うものであり、幅広い使い方に耐えるようになっている。 こちらはあまり外で使うものではないが、出張のような状況(まぁ、私にはないが)にも対応し、複数のマシンにデータをそれぞれ配置する必要がなく、メインマシンを落としてしまっても(SSHFSでマウントできなくても)アクセスできるようにということだ。

2台のPortableがあるのは、データストレージの容量が逼迫しているという事情が前提にあり、2台に分ける意味はあまりない。

補足すると、Z400はPCIeのM.2ブラケットを使っている。 これはPCIe接続で、NVMeとSATAの2つのM.2ディスクを搭載できるものだが、SATAに関しては給電するだけで、データ接続はSATAケーブルを接続する仕組みだ。 ちなみに、Z400はSATA3=3Gbps=375MB/s)である。

さて、基本的な考え方としては次のようなものだ。

  • システムストレージは高速でTBWも高いNVMeディスクを搭載
  • Windowsはそもそも起動することが極めて少ないのであんまり耐久性も気にしていない。ただ、DTMソフトウェアはreadが激しいので、DTM環境のディスクはreadは速いものを
  • 各マシンにCacheディスクを載せる。この場合、「NASの電源が落とせる」が重要なので、HDDでも良いが、SSDだとなお良い
  • どこかしらにデータディスクを用意する。SSDで事足りるならSSDがいいし、普通に6TB HDD RAID1とかでもいい。NASでもいい。データはマスターとしてデータディスクにあるという状態を前提に、頻繁に使うデータはキャッシュ上に配置する。
  • マシン間で共有したいデータはUSBエンクロージャを使う。特にM.2に関してはエンクロージャに入れてポケットに簡単に入るサイズなのでとても良い

私はキャッシュのマウントポイントはホームディレクトリ以下に置いている。また、システムディスク上に置かれているユーザーデータは複製されている。 ここは重要だ。例えばメールなどはローカルSSDに置くべきだが、ローカルSSDだけに置いていると壊れたとき困る。冗長化すべき対象はデータディスクだけであり、データディスク以外にある冗長化すべきデータはシングルデータであってはならない。

もしHDDクラスの容量が必要だが、HDDでは速度的に不満、くらいの話であればおすすめできるのがSSDとHDDをハイブリッド搭載してdm-cacheを使う方法だ。 HDD+αくらいの話になってしまうが、HDDで頻繁にアクセスするデータをSSDにストアするため、HDDの負担が減少し、高速化できる。まぁ、6TBのHDDに250GBとか500GBのSSDを組み合わせる感じだろうか。 この場合、SSDの性能を活かされる場面はとても限定的なので、SATA SSDで十分である。

前述ルールに従った構築例

1ラップトップ

種別 ディスク種別
Internal SSD
Portable USB3 Enclosed SATA SSD

内蔵ディスクは選択可能なのであれば、マイレージ重視ならSATA、性能重視ならNVMeが良い。 なるべくハイグレードなものを使うこと。

ポータブルディスクはM.2ディスクを使うほうが持ち歩きに良い。

1モダンデスクトップ

種別 ディスク種別
System NVMe Highend SSD
Cache Value grade SSD
Main Data HDD
Backup Data HDD

計4台のディスク。

HDDはデータ保管であり、RAID1でも良いが、データミラーのほうがより良い。 HDDはBtrfsにして、MainからBackupへSendを行う形がいいだろう。Btrfsをあまり好まないのであればZFSでもいいし、Backupのほうは非Btrfsにしてファイルとしてストアしても良い。 HDDは同一容量にすべき。

モダンデスクトップ+ラップトップ

マシン 種別 ディスク種別
desktop System NVMe Highend SSD
desktop Cache Value grade SSD
desktop Main Data HDD
desktop Backup Data HDD
laptop Internal SSD
across Portable USB3 Enclosed SATA SSD

ほぼ単純に上2例を結合したものだが、ある程度データがPortableに入ることになるので、Cache容量はより小さくても良いだろう。容量的にはCacheよりPortableのほうが重視される。

2デスクトップ(メイン+サブ)

マシン 種別 ディスク種別
main System NVMe Highend SSD
main Cache Value grade SSD
main Main Data HDD
main Backup Data HDD
sub System NVMe High grade SSD
sub Cache Any

非対称な2つのデスクトップを使う場合、データはメイン側に置く、というのが正しい。

高性能なメインデスクトップはデータを保持するだけでなく、速度も重視する構成に。 一方、サブのほうはデータを持っておらず、通常はSSHFSなどを用いてメインにアクセスするが、メインの電源断が可能なように大きめのキャッシュを持つ。速度を重視されないサブでは

なお、対称のデスクトップ2台の場合は、単純に同様のSystem+Cache構成で、NASなどでデータをどちらでもないものに持たせるだけ(なんならUSB化してもいい)。

マルチ環境

マシン 種別 ディスク種別
power desktop System NVMe Highend SSD
power desktop Data (opt) NVMe SSD
power desktop Cache Value grade SSD
daily desktop System NVMe High grade SSD
daily desktop Cache Value grade SSD
terminal All SSD
laptop Internal SSD
NAS Data RAID HDDs

powerは計算資源としてのコンピュータやゲーミングPC、dailyは日常的に使う「普通のPC」、terminalはリビングのYouTubeを観る用PC(形状問わず)などのことを指している。

powerとdailyの違いは、性能面、そしてどれくらい激しく使うかということを想定した違いがまず大きい。

そして、powerの場合、例えばゲームのデータ、DTMなどのソフトウェアのデータなど大きな固有データを持つ可能性がある。その場合、高速なNVMeディスクをシステムとは別に装着すると良いだろう。このとき、どのグレードを選ぶかは、実際にそのディスクがどのように読み書きされるかによる。

dailyの場合は、小さく高性能なディスクと、データをある程度置けるサイズのSSDがあれば足りるだろう。dailyでゲームをする場合は同様だが、たくさんのタイトルをインストールしたり、ゲームをハイクオリティでプレイしたい場合はpowerに属する。

terminalはSSDであるべきだが、日常的に多用するものでもないので、どのようなものでも良いはずだ。しかし、HDDでは動作がストレスを感じるので、SSDのほうが良い。

データはNAS 1台に収め、ファイル共有によってどのマシンからもアクセスできるようにする と良い。もし1台のNASで収まらなかったり、iSCSIを使う必要性があるといったケースでは、さらにUSBによるポータブルディスクを組み合わせることになるだろう。

USB接続

2.5インチのSATA SSDならHDD用のエンクロージャが使える。 HDDよりも耐衝撃性を気にしなくていいので楽だ。

可能なら、M.2のSATA SSDとエンクロージャを使うほうが良い。 よりコンパクトで、ポケットに入る。 普通は2280になるが、2242を使えば少し大きめのUSBメモリ程度になる。

2242を2242専用のUSBエンクロージャに入れた状態であればポケッタブルな完全なLinux環境になる。

しかし、M.2 SATA SSDは大容量のものがあまり登場しておらず、500GB以上のものはやや割高な傾向にある。

M.2 NVMeをUSBに変換するエンクロージャもあるが、少し高価なのと、放熱に問題があることがある。ポータブルSSDとしては最適ではない。

エンクロージャではなく、USB接続する基盤のみがあるものもある。 基本的にはエンクロージャは単純に基盤+ケースという構造であり、単にケースの有無だけの違いだ。

外付けSSDとして売られているものは品質が低いSSDを搭載していたり、いまいちなケースを使っていたりするので、好きなSSDとエンクロージャを組み合わせるほうが良さそう。