Mac mini M4 の容量不足を Thunderbolt 4 接続の M.2 NVMe で解決した(内蔵 SSD と同等の速度)
概要
- LLM で複数プロジェクトを並行開発していたら、Mac mini M4 の内蔵 SSD(256GB)が 99% 埋まった。。。
- 内蔵 SSD の換装も検討したが、世界的に部品の入荷待ちで断念
- Thunderbolt 4(40Gbps)なら M.2 NVMe を外付けしても内蔵と同等の速度が出るらしいので試した
- 結果:ほぼ内蔵と遜色ないスピード。トータル約 3 万円(1TB)
背景 — ディスク使用率 99%
ベンチマーク画像のヘッダを見るとわかりますが、内蔵の Macintosh HD は 99% used。完全にレッドゾーン。
LLM で複数プロジェクトを動かしていると、依存ライブラリ・モデル・キャッシュ・コンテナイメージがどんどん積み上がって、256GB はあっという間に枯渇します。Mac mini M4 を買った時点では「256GB で十分でしょ」と思っていたんですが、見通しが甘かった。
本来なら内蔵 SSD を換装するのが一番きれいなんですが、Mac mini M4 の SSD モジュールは世界的に入荷待ち。仕方ないので外付けで対処することにしました。
なぜ Thunderbolt 4 + M.2 なのか
外付けストレージというと USB の SSD ケースが定番ですが、開発用途では速度がボトルネックになる。Thunderbolt 4 は 40Gbps(実効でだいたい 3000〜3500MB/s 前後)出るので、Gen4 の M.2 NVMe を入れれば内蔵 SSD に近い体感になるはず、というのが今回の狙いです。
ボトルネックが Thunderbolt 4 の帯域なので、SSD 側を Gen5 にしても意味がない。Gen4 で十分で、その分コストを寿命(チップ品質)に振りました。
買ったもの
Thunderbolt 4 対応 M.2 NVMe ケース

Amazon商品
M.2 NVMe SSD(Gen4・1TB)
開発用途で読み書きが激しいので、寿命優先で SLC チップのものを選択。Gen5 は高いし、どうせ Thunderbolt 4 がボトルネックなので Gen4 で十分。
選んだのは ADATA LEGEND 860(SLEG-860-1TCS / M.2 2280 / Gen4)。

Amazon商品

熱伝導シリコンパッド(任意)
ケースに必要なサーマルパッドはひととおり付属しているので、別途購入する必要はありません。今回は念のため厚みや位置を微調整したくて手元に置いておきましたが、結果として標準のパッドだけで温度的には問題ありませんでした。
汎用品で予備が欲しい人向けの参考リンク:

Amazon商品
トータルでだいたい 3 万円ぐらい。SLC を選んだぶん、ちょっと高くついた感じです。
組み立て
外付けケースに M.2 SSD を組み込んでいきます。
買った筐体

蓋を開けたところ
裏面のネジを外して上蓋を開けると、M.2 スロットとサーマルパッドが見える構造。

M.2 SSD を装着
スロットに斜めから差し込んで、ネジで固定するだけ。シンプル。

熱伝導シリコンパッドを貼り付け
放熱のために、SSD のチップ面に熱伝導シリコンパッドを貼る。これで上蓋のヒートシンクへ熱が伝わるようになります。
なお このパッドはケースに付属していたもので、別途買う必要はありません。袋にひと通り揃って入っているので、開封して使うだけ。

設置
蓋を閉めて、Mac mini の Thunderbolt 4 ポートに繋ぐだけ。

ベンチマーク
AmorphousDiskMark で内蔵 SSD と外付け M.2 NVMe を比較。
内蔵 SSD(APPLE SSD AP0256Z / Apple M4)

外付け M.2 NVMe(SLEG-860-1TCS / Thunderbolt 4 接続)

比較グラフ(対数スケール)

比較表(MB/s)
| テスト | 内蔵 Read | 内蔵 Write | 外付け Read | 外付け Write |
|---|---|---|---|---|
| SEQ1M QD8 | 3537.38 | 5950.95 | 3401.00 | 3203.53 |
| SEQ1M QD1 | 2224.55 | 5087.25 | 2753.98 | 2902.15 |
| RND4K QD64 | 709.87 | 92.84 | 867.12 | 330.90 |
| RND4K QD1 | 63.93 | 30.34 | 76.71 | 48.25 |
所感
- シーケンシャル Read は内蔵とほぼ同じ(3537 vs 3401 MB/s)
- シーケンシャル Write は内蔵が圧倒的に速い(5950 vs 3203 MB/s)が、これは Apple Silicon の内蔵 SSD が異常に速いだけで、外付けの 3203 MB/s も Gen4 SSD として十分な数値
- 面白いのは ランダムアクセスは外付けのほうが全項目で速いこと。RND4K QD1 Write は内蔵 30.34 → 外付け 48.25 と 1.5 倍以上。SEQ1M QD1 Read も外付け 2753 vs 内蔵 2224
- 体感では内蔵と区別がつかない
ということで、開発の作業ディレクトリを丸ごと外付けに移しても困らなそうです。
温度と SMART 情報
M.2 の筐体を触るとほんのり温かい。常時体温よりは温かいので一応計測。
$ smartctl -a /dev/disk6 | grep -i Temp | grep -v -i threshold | grep -v -i timeTemperature: 35 CelsiusTemperature Sensor 1: 40 CelsiusTemperature Sensor 2: 55 Celsiusセンサー 2 が 55℃ とちょっと高めですが、Gen4 NVMe としては許容範囲。Warning Temperature Threshold が 86℃、Critical が 93℃ なので、まだ十分マージンはあります。
2 週間後の SMART ログ全文
導入から 2 週間後の smartctl -a /dev/disk6 の出力。
=== START OF INFORMATION SECTION ===Model Number: SLEG-860-1TCSSerial Number: 2P3229ANQNFGFirmware Version: X1105E00PCI Vendor/Subsystem ID: 0x1cc1Total NVM Capacity: 1,024,209,543,168 [1.02 TB]NVMe Version: 2.0Warning Comp. Temp. Threshold: 86 CelsiusCritical Comp. Temp. Threshold: 93 Celsius
=== START OF SMART DATA SECTION ===SMART overall-health self-assessment test result: PASSED
SMART/Health Information (NVMe Log 0x02, NSID 0xffffffff)Critical Warning: 0x00Temperature: 39 CelsiusAvailable Spare: 100%Available Spare Threshold: 10%Percentage Used: 0%Data Units Read: 1,080,412 [553 GB]Data Units Written: 3,314,686 [1.69 TB]Host Read Commands: 20,994,074Host Write Commands: 27,511,057Controller Busy Time: 290Power Cycles: 45Power On Hours: 544Unsafe Shutdowns: 16Media and Data Integrity Errors: 0Error Information Log Entries: 0Warning Comp. Temperature Time: 0Critical Comp. Temperature Time: 0Temperature Sensor 1: 39 CelsiusTemperature Sensor 2: 54 Celsiusポイント:
- Percentage Used: 0% — 書き込み寿命の消費は 2 週間でほぼゼロ
- Available Spare: 100% — 代替セクタの予備領域もまったく減っていない
- Data Units Written: 1.69 TB — 2 週間で 1.69TB 書き込み(後述の
.colimaやbun-cacheなどが効いている) - Power On Hours: 544 — 常時起動状態に近い(544 時間 ≒ 22.7 日。設置時刻からの累計)
- Unsafe Shutdowns: 16 — Mac の再起動・スリープ時にこのカウントは増えがち。問題はなし
- Media and Data Integrity Errors: 0 — エラーゼロ
長寿命チップを選んだ甲斐あって、書き込み量に対して寿命消費はほぼ目に見えません。長時間の重い書き込みを続けるなら追加のヒートシンクや冷却を考えても良さそうですが、現状は無調整で安定しています。
2 週間運用してみて
導入から 2 週間ほど経ったので、実際の使用状況を duf で確認。

外付け NVMe(/Volumes/nvme、999.9GB)にはまだ余裕がある一方、内蔵の Macintosh HD は依然 60% 台。退避がうまく効いている感じです。
退避の方針はシンプルで、容量を食う系のキャッシュ・コンテナ・ソースツリーをまるごと外付けに置いて、元の場所からシンボリックリンクを貼るだけ。
❯❯❯ eza -al /Volumes/nvme/matsu/drwxr-xr-x@ - matsu 2026/04/26 10:10 .aube-storedrwxr-xr-x@ - matsu 2026/04/27 13:05 .bun-cachedrwxr-xr-x@ - matsu 2026/04/16 00:29 .colimadrwxr-xr-x@ - matsu 2026/03/25 15:21 ghq❯❯❯ \du -hs /Volumes/nvme/matsu/{.*,*}362M /Volumes/nvme/matsu/.aube-store503M /Volumes/nvme/matsu/.bun-cache 72G /Volumes/nvme/matsu/.colima 39G /Volumes/nvme/matsu/ghq中身を見ると、
.colimaが 72GB(Docker 用 Linux VM のディスクイメージ)ghqが 39GB(クローンしているリポジトリ群).bun-cacheと.aube-storeで 1GB 弱
合計で 110GB 超を内蔵から外付けに逃がしている計算。これがまるごと内蔵に乗っていたら 256GB ではどうやっても足りないので、退避の効果は明確です。
体感としても、colima の起動も git clone も外付けで普通に速い。Thunderbolt 4 の帯域だと開発ワークロードでは内蔵との差は感じません。
まとめ
- Mac mini M4 の内蔵 SSD が満杯になっても、Thunderbolt 4 + M.2 NVMe で内蔵に近い性能の追加ストレージを確保できる
- コスト:約 3 万円 / 1TB(ケース + Gen4 SLC SSD)
- 内蔵換装の入荷を待つよりこっちのほうが現実的。やって正解
- 2 週間運用しても安定。
.colimaとghqを逃がすだけで内蔵に十分な余裕ができた
余談
そもそも Mac mini M4 を買うときに 256GB を選んだのが間違いでした。Apple の SSD アップグレード料金が高いので渋ったわけですが、開発機としては最低でも 1TB 欲しい。
ただ、結果的には外付けでも十分使える速度が出ることがわかったので、**「とりあえず最小構成で買って、足りなくなったら Thunderbolt 4 で外付け」**という戦略はけっこう有りかもしれません。内蔵を盛るより、後から付け外しできる外付けのほうが用途変更にも強いし。
参考までに、当時のメモはこちら: https://x.com/matsubokkuri/status/2044363980114694188


