結論

SSDの寿命は書き込んだ量で決まり、「TBW ÷ 1日の書き込み量」で何年もつかを計算できます。今の消耗度は SMART の値で確かめます。

この記事でわかること

  • 何年もつかの計算式とTBW×書き込み量25通りの表
  • Windows・Mac・Linuxの確認方法とSMART15項目
  • 空き容量とTRIMで書き込み増幅が変わる実測7通り

2026年10月23日更新|smartmontools 7.4・nvme-cli 2.8で確認

SSD は、書き込むたびに中の記憶素子(NAND フラッシュ)が少しずつ傷みます。傷んだ部分は予備に置き換えられ、予備が尽きると書き込めなくなります。

flowchart TD
    A[データを書き込む] --> B[NANDのセルが<br>少しずつ傷む]
    B --> C[傷んだブロックを<br>予備に置き換える]
    C --> D[予備が減る<br>使った割合が増える]
    D --> E[予備が尽きると<br>読み取り専用や故障]

急いでいる人向けに、よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
何年もつ? TBW÷1日の書き込み量。600TBW・1日20GBで約82年 何年もつか
Windows 11 で確かめる 設定>ストレージ>ディスク & ボリューム>プロパティ 確認方法
CrystalDiskInfo で確かめる 健康状態が「注意」「異常」ならまずバックアップ 確認方法
コマンドで確かめる smartctl -a /dev/nvme0・nvme smart-log smartctl・nvme-cli
どの値を見る? Percentage Used と Available Spare SMART の読み方
前ぶれは? 重大な警告・読み取り専用・ファイルの破損 前ぶれ
長持ちさせるには 空き容量を残し、TRIM を有効のままにする 長持ちさせる
HDD との違い SSD は書き換え回数、HDD は動く部品が寿命を決める HDD との違い

確認環境:寿命の定義と値の意味は、Kingston の TBW・DWPD の解説と SLC・MLC・TLC・QLC の解説、Samsung の保証規定、Flash Memory Summit 2012 の Intel の発表資料(JEDEC の耐久性の条件)、NVMe の SMART / Health ログの構造の説明(libnvme の man ページ)で確かめました。Windows の手順は Microsoft サポート(ストレージ デバイスの重大な警告、データ ドライブの最適化、ファイル履歴)と Microsoft Learn(fsutil behavior、Optimize-Volume、Get-StorageReliabilityCounter、MSFT_PhysicalDisk)、Mac は Apple サポート(ディスクユーティリティ、Time Machine)、CrystalDiskInfo は開発元 Crystal Dew World のマニュアル(最新版 9.9.3)で確かめています。smartctl の出力の項目と終了コードは smartmontools 7.4 のソース(nvmeprint.cpp・smartctl.8.in・drivedb.h)で確かめました。Ubuntu 24.04.4 LTS(Linux カーネル 6.18、仮想ディスク virtio)で smartmontools 7.4・nvme-cli 2.8(libnvme 1.8)・util-linux 2.39.3 の lsblk と、Python 3.11.15 の計算と模型を、ディスクを読むだけのコマンドで動かしました(確認日 2026年10月23日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SSDの寿命は何年?TBWの計算式と確認方法・前兆と長持ちのコツ」

SSDの寿命とは(何年もつ?寿命が来る仕組み)

この節では、SSD の「寿命」が何を指すのかと、なぜ使うほど減るのかが分かります。

SSD の寿命は、主に「あとどれだけ書き込めるか」で決まります。 SSD は NAND フラッシュという記憶素子にデータを書きます。NAND は、書き込みと消去(P/E サイクル)をくり返すと少しずつ傷み、決まった回数を超えると、データを正しく保てなくなります。Kingston の解説では、P/E サイクルは「メモリセルが信頼できなくなったり、一貫性がなくなったりする前に、何回書き込みと消去を行うことができるか」で決まる、と説明しています。

1書き換え回数に上限がある

NAND のセルは書き込みと消去で傷む。読み込みだけなら、ほとんど減らない。

2予備で置き換える

傷んだブロックは、SSD の中の予備(スペア)に置き換えて使い続ける。

3全体を均等に使う

ウェアレベリングで、同じ場所ばかり書き換えないように散らす。

4中で余分に書く

空きを作るためにデータを移す分、パソコンが書いた量より NAND に書く量が多くなる(書き込み増幅)。

「何年もつか」は、使い方(1日にどれだけ書くか)で大きく変わります。 書き込みの少ない使い方なら、計算上は数十年もつ製品が多くあります(後の早見表)。ただし、SSD はコントローラーなど書き込み以外の部品の故障でも壊れます。計算で出る年数は「書き込みによる消耗」だけの目安で、壊れない保証ではありません。メーカーの保証は「年数」と「TBW」のどちらか早い方で終わる決め方が多く、Samsung の保証規定では 990 PRO の 1TB は「5年または 600TB TBW」です。

NANDの種類(SLC・MLC・TLC・QLC)と書き換え回数

この節では、NAND の種類で寿命がどれだけ違うのかが分かります。

1つのセルに入れるビットの数が多いほど、容量あたりの値段は下がり、書き換えられる回数は減ります。 Kingston の解説にある値です。

種類 1セルのビット数 書き換え回数(P/E)の目安
SLC 1ビット 100,000回
MLC 2ビット 10,000回
TLC 3ビット 3,000〜5,000回
QLC 4ビット 約1,000回

Kingston は、TBW のおおよその値を「容量 × P/E サイクル ÷ WAF(書き込み増幅)」で表しています。1TB の SSD で計算すると、次のようになりました。

"""容量 × 書き換え回数 ÷ 書き込み増幅(WAF)で TBW の目安を出す(Kingston の式)"""
cap_tb = 1.0
for name, pe in [("SLC", 100_000), ("MLC", 10_000), ("TLC", 3_000), ("QLC", 1_000)]:
    vals = "  ".join(f"WAF{w}: {cap_tb * pe / w:>9,.0f}TB" for w in (1, 2, 4))
    print(f"{name} P/E {pe:>7,} → {vals}")
SLC P/E 100,000 → WAF1:   100,000TB  WAF2:    50,000TB  WAF4:    25,000TB
MLC P/E  10,000 → WAF1:    10,000TB  WAF2:     5,000TB  WAF4:     2,500TB
TLC P/E   3,000 → WAF1:     3,000TB  WAF2:     1,500TB  WAF4:       750TB
QLC P/E   1,000 → WAF1:     1,000TB  WAF2:       500TB  WAF4:       250TB

同じ 1TB でも、QLC は SLC の 100 分の 1、書き込み増幅(WAF)が 2 倍になると、どの種類も書ける量が半分になります。 実際の製品の TBW は、この計算より小さく決められています(例:Samsung 990 PRO の 1TB は 600TB)。TBW は、データを保つ力などの条件を満たしたまま書ける量として決められるためです(次の節)。書き込み増幅を小さくする使い方は、後の「長持ちさせる」の節で模型を使って確かめます。

TBWとDWPDの意味と計算(違いと換算)

この節では、製品の仕様に書かれた TBW と DWPD の意味と、2つを換算する式が分かります。

TBW は「寿命までに書き込める量の合計」、DWPD は「保証期間のあいだ、毎日、容量の何台分を書けるか」です。 どちらも同じ耐久性を別の見方で表しています。

TBW(Terabytes Written)

寿命までに書き込めるデータの総量(TB)

例:1TB で 600TBW

家庭用の製品の仕様によく書かれる

DWPD(Drive Writes Per Day)

保証期間中、1日に容量の何倍を書けるか

例:7.68TB で 1DWPD

サーバー向けの製品の仕様によく書かれる

Kingston の解説の式です。

DWPD = TBW × 1000 ÷(365日 × 保証年数 × 容量[GB])
TBW  = DWPD × 容量[TB] × 365日 × 保証年数

TBW の意味は、JEDEC(半導体の業界団体)の耐久性の決まりで定められています。Flash Memory Summit 2012 の Intel の発表資料によると、TBW は「その量を書き込むまで、次の条件をすべて満たす書き込み量」です。

用途 使うとき(電源オン) 電源を切って保つ期間 故障の割合
Client(PC 向け) 40℃・1日8時間 30℃で1年 3% 以下
Enterprise(サーバー向け) 55℃・1日24時間 40℃で3か月 3% 以下

PC 向けの SSD なら、TBW まで書き込んだあとでも、電源を切った状態で 30℃・1年はデータを保つことが条件になっています。

TBW と DWPD を Python で換算する

"""TBW と DWPD を相互に換算する"""
def dwpd(tbw_tb, cap_tb, years):
    return tbw_tb / (cap_tb * 365 * years)
def tbw(dwpd_v, cap_tb, years):
    return dwpd_v * cap_tb * 365 * years
print(f"1TB・600TBW・保証5年        → {dwpd(600, 1, 5):.2f} DWPD")
print(f"2TB・1200TBW・保証5年       → {dwpd(1200, 2, 5):.2f} DWPD")
print(f"7.68TB・14016TBW・保証5年   → {dwpd(14016, 7.68, 5):.2f} DWPD")
print(f"3.84TB・1DWPD・保証5年      → {tbw(1, 3.84, 5):,.0f} TBW")
print(f"3.84TB・3DWPD・保証5年      → {tbw(3, 3.84, 5):,.0f} TBW")
1TB・600TBW・保証5年        → 0.33 DWPD
2TB・1200TBW・保証5年       → 0.33 DWPD
7.68TB・14016TBW・保証5年   → 1.00 DWPD
3.84TB・1DWPD・保証5年      → 7,008 TBW
3.84TB・3DWPD・保証5年      → 21,024 TBW
0.33PC 向け 1TB(600TBW)毎日、容量の3分の1を5年
1.00サーバー向け 7.68TB毎日、容量いっぱいを5年
600TB990 PRO 1TB の TBW2TB は 1,200TB・4TB は 2,400TB

Samsung 990 PRO は、容量が2倍になると TBW も2倍で、DWPD はどれも 0.33 でした。 同じシリーズなら、容量の大きいものほど書ける総量(TBW)が多くなります。7.68TB で TBW 14,016 の例は Kingston の解説にある例で、計算すると 1.00 DWPD になります。

SSDは何年もつ?計算式と早見表(Pythonで計算)

この節では、自分の使い方で何年もつかを計算する式と、TBW と書き込み量の組み合わせ25通りの年数が分かります。

何年もつか = TBW ÷(1日の書き込み量 × 365日)です。 単位をそろえて、1TB = 1,000GB で計算します。

"""TBW と 1日の書き込み量から、SSD が何年もつかを計算する"""
tbw_list = [150, 300, 600, 1200, 2400]          # TBW(TB)
daily_gb = [10, 20, 50, 100, 200]                # 1日の書き込み量(GB)
print("TBW\1日 |" + "".join(f"{g:>8}GB" for g in daily_gb))
for tbw in tbw_list:
    row = []
    for g in daily_gb:
        years = tbw * 1000 / (g * 365)           # 1TB = 1000GB で計算
        row.append(f"{years:>9.1f}年")
    print(f"{tbw:>6}TB |" + "".join(row))
TBW\1日 |      10GB      20GB      50GB     100GB     200GB
   150TB |     41.1年     20.5年      8.2年      4.1年      2.1年
   300TB |     82.2年     41.1年     16.4年      8.2年      4.1年
   600TB |    164.4年     82.2年     32.9年     16.4年      8.2年
  1200TB |    328.8年    164.4年     65.8年     32.9年     16.4年
  2400TB |    657.5年    328.8年    131.5年     65.8年     32.9年

TBW 600TB の SSD が何年もつか(1日の書き込み量ごと)1日10GB の 164.4年を100%とした長さ

1日10GB164.4年
1日20GB82.2年
1日50GB32.9年
1日100GB16.4年
1日200GB8.2年

1日に書く量が2倍になると、もつ年数は半分になります。 1日 20GB なら TBW 600TB で 82.2年、TBW 150TB でも 20.5年です。動画の編集やキャッシュの多いサーバーのように1日 100GB を超えて書く使い方では、TBW 150TB だと 4.1年になり、保証の年数より先に TBW に届きます。サーバーで1日の書き込み量からディスクを見積もる考え方は、関連記事「キャパシティ見積もりの計算方法|同時接続数・スループット・ディスク容量」で扱っています。

自分の1日の書き込み量を調べる(Linux で実測)

計算に入れる「1日の書き込み量」は、自分の PC で測った値を使うのがいちばん確かです。Linux では、カーネルがディスクごとの書き込み量を /proc/diskstats に数えています。カーネルの文書では、Field 7 が「書き込みに成功したセクタの総数」、Field 14 が「捨てた(discard。TRIM のこと)セクタの総数」で、セクタは「標準の UNIX の 512 バイトのセクタ」です。読むだけのプログラムで、起動してからの量を1日あたりに直しました。

"""/proc/diskstats と /proc/uptime から、起動してからの書き込み量と1日あたりの量を出す(読むだけ)"""
import sys
dev = sys.argv[1] if len(sys.argv) > 1 else "vda"
uptime = float(open("/proc/uptime").read().split()[0])
for line in open("/proc/diskstats"):
    f = line.split()
    if f[2] == dev:
        written = int(f[9]) * 512          # Field 7:書き込んだセクタ数(1セクタ=512バイト)
        discarded = int(f[16]) * 512 if len(f) > 16 else 0  # Field 14:TRIM(discard)したセクタ数
        break
per_day = written / uptime * 86400
print(f"デバイス        : {dev}")
print(f"起動からの時間  : {uptime / 3600:.2f} 時間")
print(f"書き込んだ量    : {written / 10**9:.3f} GB")
print(f"TRIM で捨てた量 : {discarded / 10**9:.3f} GB")
print(f"1日あたりに直す : {per_day / 10**9:.1f} GB/日")
for tbw in (300, 600):
    print(f"  TBW {tbw}TB なら : {tbw * 10**12 / per_day / 365:,.1f} 年")
$ python3 daily.py vda
デバイス        : vda
起動からの時間  : 0.66 時間
書き込んだ量    : 0.454 GB
TRIM で捨てた量 : 4.487 GB
1日あたりに直す : 16.5 GB/日
  TBW 300TB なら : 49.8 年
  TBW 600TB なら : 99.6 年

この仮想マシンでは、起動してから約40分で 0.454GB を書き、1日に直すと 16.5GB でした。起動直後は書き込みが多めに出やすいので、数日動かした後の値や、SSD 自身が数えている書き込み量(次の節の Data Units Written)で計算すると、より実際に近くなります。Windows では、後で説明する SMART の書き込み量を、使った日数で割って求めます。

SSDの寿命の確認方法(Windows 11・CrystalDiskInfo・Mac・Linux)

この節では、OS ごとに SSD の寿命(消耗の度合い)を確かめる方法が分かります。

SSD は自分の状態を SMART(Self-Monitoring, Analysis and Reporting Technology。ディスクが自分で記録している健康の情報)として持っていて、どの方法もそれを読んで表示しています。

OS 方法 分かること
Windows 11・10 設定の「ディスク & ボリューム」→ プロパティ NVMe SSD の推定残存期間・予備・温度
Windows CrystalDiskInfo(無料のアプリ) 健康状態・SMART の全項目(SATA も)
Windows PowerShell の Get-StorageReliabilityCounter 消耗(Wear)・温度・エラーの数
Mac ディスクユーティリティの First Aid 修復と、故障が近いときの警告
Linux・Mac・Windows smartctl(smartmontools) SMART の全項目
Linux nvme smart-log(nvme-cli) NVMe の SMART / Health ログ

Windows 11 の設定で確かめる(NVMe SSD)

1

設定のストレージを開く

スタート > 設定 > システム > ストレージ > 詳細記憶域設定 > ディスク & ボリューム。

開く

2

調べるディスクの「プロパティ」を選ぶ

ドライブの正常性の欄に、推定残存期間・利用可能な予備・温度が出る。

選ぶ

3

重大な警告が出ていないか見る

警告が出ていたら、まずデータをバックアップする。

確認

Microsoft サポートの「ストレージ デバイスの重大な警告についての対処方法」で説明されている項目です。Windows がこの画面で見張っているのは NVMe の SSD だけで、SATA の SSD と HDD は対象外です。 SATA の SSD は、次の CrystalDiskInfo か smartctl で確かめます。

画面の項目 Microsoft の説明
推定残存期間 メーカーのドライブ寿命の予測に基づく使用率。0% が下限で、下がっても故障を意味するとは限らない
利用可能な予備 使える残りの予備の容量の割合(0〜100%)
温度 デバイス全体の温度(摂氏)

PowerShell では、Microsoft Learn の例のように Get-PhysicalDisk と Get-StorageReliabilityCounter をつなぐと、ディスクごとの値が出ます。値が出ないときは、管理者として開いた PowerShell で試します。

# SSD か HDD か(MediaType)と、健康状態(HealthStatus)
Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus

# 消耗(Wear)・温度・エラーの数・使った時間
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object DeviceId, Wear, Temperature, ReadErrorsUncorrected, PowerOnHours

Microsoft Learn によると、Wear は「ストレージ デバイスの消耗の目安(%)。100% で、見積もった消耗の限界に達する」、MediaType は 3 が HDD・4 が SSD、HealthStatus は Healthy・Warning・Unhealthy・Unknown の4つです。

CrystalDiskInfo で確かめる(SATA の SSD も)

CrystalDiskInfo は、SMART を読んで「健康状態」を正常・注意・異常・不明の4段階で表示する、無料の Windows 用のアプリです。 開発元 Crystal Dew World のダウンロードページによると、最新版は 9.9.3(2026年10月11日)で、NVMe の SSD は Windows 10・Server 2016 以降で対応しています。

健康状態 意味(開発元のマニュアル)
正常 問題は見つかっていない。ただし前ぶれなく壊れることはある
注意 SSD では、残り寿命が 10% 以下になると出ることが多い。代替処理済みのセクタなどでも出る
異常 SMART の現在値がメーカーの定めたしきい値を下回った。故障の可能性が高い
不明 判定に要る SMART の項目が無い、または読めない

SMART の表の各列は、マニュアルでは次の意味です。

列 意味
ID 項目の番号(16進数)
現在値・最悪値 いまの値と、これまでで最も悪かった値(メーカーが正規化した数)
しきい値 メーカーが決めた限界。現在値がこれを下回ると故障の可能性がある
生の値 正規化する前の値(16進数)。温度や使用時間などは実際の値が入る

Mac で確かめる

Apple サポートの「Macのディスクユーティリティでストレージデバイスを修復する」では、ディスクユーティリティで「表示」>「すべてのデバイスを表示」を選び、ボリューム → コンテナ → デバイスの順に First Aid を実行します。ディスクの障害が近いという警告が出たときは、データをバックアップしてディスクを交換するよう案内されていて、そのディスクは修復できません。 SMART の細かい値を見るときは、smartmontools の Mac 版の smartctl(/dev/disk0 の形で指定する)を使います。

Linux で確かめる(smartctl・nvme-cli)

# どのディスクが SSD か(ROTA が 0 なら回転しない=SSD)と、TRIM の対応
lsblk -d -o NAME,SIZE,ROTA,DISC-GRAN,DISC-MAX,MODEL,TRAN

# SMART を全部表示する(NVMe・SATA どちらも)
sudo smartctl -a /dev/nvme0
sudo smartctl -a /dev/sda

# 健康状態だけ・JSON で出す
sudo smartctl -H /dev/nvme0
sudo smartctl -j -a /dev/nvme0

# NVMe の SMART / Health ログ(nvme-cli)
sudo nvme list
sudo nvme smart-log /dev/nvme0

smartctl の man ページでは、NVMe は /dev/nvme0(全体)か /dev/nvme0n1(名前空間)の形で指定します。nvme-cli 2.8 の nvme smart-log は、/dev/nvme0 と /dev/nvme0n1 のどちらも受け付けます。nvme-cli の GitHub の最新版(2026年10月23日時点で v3.1)のドキュメントでは、smart-log は nvme log smart の以前の名前として残されている(非推奨)ので、3.x を使うときは nvme log smart と書きます。

smartctl・nvme-cliの出力の実物(値が出ない仮想ディスクの例も)

この節では、smartctl と nvme-cli を実際に動かしたときの出力と、値が出ないときのエラーの意味が分かります。

SMART は、SSD が自分で記録している値です。仮想マシンの仮想ディスク(virtio)のように、間に SMART を伝えない層があると、値は出ません。 この環境(Ubuntu 24.04.4 の仮想マシン)のディスクで、読むだけのコマンドを実行した出力です。

$ lsblk -d -o NAME,SIZE,TYPE,ROTA,DISC-GRAN,DISC-MAX,TRAN /dev/vda
NAME  SIZE TYPE ROTA DISC-GRAN DISC-MAX TRAN
vda   256G disk    1        4K       1G virtio

$ smartctl --version
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.18.44-fc-v153] (local build)

$ smartctl -a /dev/vda
/dev/vda: Unable to detect device type
Please specify device type with the -d option.

Use smartctl -h to get a usage summary

$ echo $?
1

$ smartctl -d sat -i /dev/vda
Smartctl open device: /dev/vda [SAT] failed: Operation not permitted
$ echo $?
2

$ nvme version
nvme version 2.8 (git 2.8)
libnvme version 1.8 (git 1.8)

$ nvme list
Failed to scan topology: No such file or directory

$ nvme smart-log /dev/nvme0
/dev/nvme0: No such file or directory
  • 1Unable to detect device type種類(ATA・SCSI・NVMe)を判別できなかった。仮想ディスクや USB の変換アダプターで出る。実機なら -d で種類を指定する
  • 2Operation not permitted種類を指定しても、そのデバイスに SMART の命令を送れなかった。仮想ディスクではここで止まる
  • 3Failed to scan topologynvme list で NVMe の機器が1台も見つからなかった。NVMe の SSD が無い PC や仮想マシンで出る
  • 4ROTA が 1 でも SSD のことがある仮想ディスクでは、裏が SSD でも回転するディスク(1)と表示された。実機の判定に使う

smartctl の終了コードはビットの組み合わせで、0 なら問題なし、それ以外は理由がビットで分かります。 上の 1 はビット0、2 はビット1 です。smartctl 7.4 の man ページの意味です。

ビット(値) 意味
0(1) コマンドの指定を解釈できなかった
1(2) デバイスを開けなかった・識別情報が返らなかった
2(4) SMART などの命令が失敗した
3(8) SMART の判定が「DISK FAILING」
4(16) 故障の前ぶれの項目がしきい値以下
5(32) 今は OK だが、過去にしきい値以下になった項目がある
6(64) エラーログに記録がある
7(128) セルフテストのログにエラーがある

実機の NVMe SSD で出る項目

実機の NVMe SSD では、smartctl -a の後半に次の形の欄が出ます。項目名は smartmontools 7.4 のソース(nvmeprint.cpp)が出力する文字列のとおりです。

SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:
Temperature:
Available Spare:
Available Spare Threshold:
Percentage Used:
Data Units Read:
Data Units Written:
Host Read Commands:
Host Write Commands:
Controller Busy Time:
Power Cycles:
Power On Hours:
Unsafe Shutdowns:
Media and Data Integrity Errors:
Error Information Log Entries:

ソースでは、1行目の判定は Critical Warning が 0 なら PASSED、0 以外なら FAILED! と出し、続けて立っているビットの理由(available spare has fallen below threshold など)を1行ずつ出します。Data Units Read・Written は、値の後ろに「512 × 1000 バイト」で換算した量(TB など)を括弧で添えます。

JSON で取り出して計算する

smartctl -j の JSON では、NVMe の値は nvme_smart_health_information_log の下に percentage_used・available_spare・data_units_written・media_errors などの名前で入ります(同じくソースで確認)。寿命に関わる値だけを取り出すプログラムです。

"""smartctl の JSON 出力から、寿命に関わる値だけを取り出す(読むだけ)"""
import json, subprocess, sys
dev = sys.argv[1]
out = subprocess.run(["smartctl", "-j", "-a", dev], capture_output=True, text=True)
data = json.loads(out.stdout)
status = data["smartctl"]["exit_status"]
for m in data["smartctl"].get("messages", []):
    print(f"[{m['severity']}] {m['string']}")
log = data.get("nvme_smart_health_information_log")
if log is None:
    print(f"NVMe の SMART ログは取れませんでした(exit status {status})")
    sys.exit(status)
tb = log["data_units_written"] * 512 * 1000 / 10**12
print(f"使った割合 Percentage Used : {log['percentage_used']}%")
print(f"予備 Available Spare       : {log['available_spare']}%(しきい値 {log['available_spare_threshold']}%)")
print(f"書き込んだ量               : {tb:.2f} TB")
print(f"Media Errors               : {log['media_errors']}")
print(f"Critical Warning           : {log['critical_warning']:#04x}")
$ python3 check_ssd.py /dev/vda
[error] /dev/vda: Unable to detect device type
NVMe の SMART ログは取れませんでした(exit status 1)

仮想ディスクでは、JSON にも messages にエラーが入り、exit_status が 1 になりました。実機の NVMe SSD に向けると、使った割合・予備・書き込んだ量が出ます。監視の仕組みに組み込むときは、このように exit_status を見て、値が取れなかったことと値が悪いことを分けて扱います。

SMARTの項目の読み方(Percentage Used・Available Spare・Media Errors)

この節では、NVMe と SATA の SMART の各項目が何を表し、寿命を見るときにどれを見ればよいかが分かります。

寿命を見るときにまず見るのは、Percentage Used(使った割合)・Available Spare(予備の残り)・Media and Data Integrity Errors(直せなかったエラーの数)の3つです。 NVMe の各項目の意味は、NVMe の SMART / Health ログの構造の説明(libnvme の man ページ)によります。

項目 意味 見方
Critical Warning 重大な警告のビット 0 以外なら、すぐバックアップ
Temperature 全体の温度 熱がこもっていないか
Available Spare 残りの予備の容量(0〜100%) 減ってきたら要注意
Available Spare Threshold 予備のしきい値 予備がこれを下回ると警告
Percentage Used 寿命のうち使った割合の見積もり 100% で耐久の見積もりに達する
Data Units Read 読んだ量(512バイト×1000単位) 寿命にはほぼ関係しない
Data Units Written 書き込んだ量(512バイト×1000単位) TBW と比べる
Host Read Commands 読み込みの命令の数 参考
Host Write Commands 書き込みの命令の数 参考
Controller Busy Time 入出力で忙しかった時間(分) 参考
Power Cycles 電源を入れた回数 中古品の目安
Power On Hours 電源が入っていた時間 中古品の目安
Unsafe Shutdowns 正しく終了せずに電源が切れた回数 増え続けるなら電源を見直す
Media and Data Integrity Errors 直せなかったデータのエラーの数 0 以外で増えるなら交換を考える
Error Information Log Entries エラー情報のログの件数 増え方を見る

Percentage Used は、仕様の説明では「NVM サブシステムの寿命のうち使った割合の、メーカー独自の見積もり」です。100 は見積もった耐久を使い切ったという意味で、壊れたという意味ではありません。 100 を超えることもあり、254 を超えると 255 と表示されます。電源が入っている1時間ごとに更新されます。

Critical Warning のビット

smartmontools 7.4 のソースで、各ビットに出す理由の文です。Windows の重大な警告(後の節)は、このうちの予備・信頼性・読み取り専用にあたります。

ビット(値) smartctl が出す理由 意味
0(0x01) available spare has fallen below threshold 予備がしきい値を下回った
1(0x02) temperature is above or below threshold 温度がしきい値の外
2(0x04) NVM subsystem reliability has been degraded 信頼性が落ちた
3(0x08) media has been placed in read only mode 読み取り専用になった
4(0x10) volatile memory backup device has failed 停電時の退避の部品が故障

SMART の値から残りを計算する

"""SMART の値から、使った量と残りの年数を見積もる"""
def units_to_tb(units):
    # NVMe の Data Units Written は「512バイト×1000」単位
    return units * 512 * 1000 / 10**12
def remain_years(used_pct, years_so_far):
    # これまでと同じ使い方を続けたときの残りの年数
    return years_so_far * (100 - used_pct) / used_pct
for units in [1_000_000, 19_531_250, 117_187_500]:
    print(f"Data Units Written {units:>12,} → {units_to_tb(units):8.2f} TB")
for used, yrs in [(3, 2.0), (10, 3.0), (50, 4.0)]:
    print(f"Percentage Used {used:>3}%・使って{yrs}年 → 残り約 {remain_years(used, yrs):.1f} 年")
written_tb, rated_tbw = 45.0, 600
print(f"書き込み {written_tb}TB ÷ TBW {rated_tbw}TB = TBW の {written_tb / rated_tbw:.1%} を使用")
Data Units Written    1,000,000 →     0.51 TB
Data Units Written   19,531,250 →    10.00 TB
Data Units Written  117,187,500 →    60.00 TB
Percentage Used   3%・使って2.0年 → 残り約 64.7 年
Percentage Used  10%・使って3.0年 → 残り約 27.0 年
Percentage Used  50%・使って4.0年 → 残り約 4.0 年
書き込み 45.0TB ÷ TBW 600TB = TBW の 7.5% を使用

Data Units Written の値は「512バイト × 1000」単位なので、19,531,250 なら 10TB です。 Percentage Used が 3% で2年使ったなら、同じ使い方で残り約 64.7年の計算になります。CrystalDiskInfo の開発元は、残り10%なら「あと何日使える」と単純に換算できるものではない、と注意しています。これらは書き込みの消耗だけの目安として使い、ほかの故障に備えてバックアップは別に取ります。

SATA の SSD の SMART の項目(メーカーで番号と名前が違う)

SATA の SSD は、寿命を表す項目の番号と名前がメーカーごとに違います。 smartmontools 7.4 の機種の一覧(drivedb.h)で 241 番の名前の指定を数えると、Host_Writes_32MiB が19か所、Total_LBAs_Written が10か所、Lifetime_Writes_GiB と Host_Writes_GiB が6か所ずつなど、9種類の名前がありました。名前の中の 32MiB・GiB は、生の値の単位です。CrystalDiskInfo のマニュアルも、寿命を表す項目をメーカーごとに分けています。

ID(16進) よく使われる名前 メーカーの例(CrystalDiskInfo)
E9(233) Media_Wearout_Indicator Intel
B1(177) Wear_Leveling_Count Samsung
E7(231) SSD_Life_Left SandForce
CA(202) Percent_Lifetime_Remain Micron
05(5) Reallocated_Sector_Ct(代替処理済みのセクタ数) 共通(HDD でも使う)
F1(241) Total_LBAs_Written など(書き込み量) 単位は機種ごとに違う

自分の SSD の項目の意味は、smartctl -a の表に出る名前(smartmontools が機種ごとに付けたもの)か、メーカーの資料で確かめます。

SSDの寿命の前兆と、出たときにすること

この節では、寿命や故障が近いときに出る警告・症状と、出たときに何をどの順番でするかが分かります。

いちばん確かな前ぶれは、SSD 自身が出す警告(Windows の重大な警告・CrystalDiskInfo の注意と異常・Critical Warning)です。 使っていて気づく症状は、ほかの原因(ソフトウェア・ケーブル・電源)でも起きるので、警告と合わせて判断します。

Microsoft サポートでは、Windows が出す重大な警告を次の3つにしています。

Windows の重大な警告 意味
予備容量が少ない 予備の容量が、製造元の安全しきい値を下回った
信頼性が低下している 重大なメディアのエラーや内部のエラーで、信頼性が落ちた
ドライブが読み取り専用に設定されている 保存済みのデータは読めるが、書き込めない

使っていて気づく症状には、次のものがあります。

SSD 自身が出す警告

Windows の重大な警告の通知

CrystalDiskInfo の「注意」「異常」

smartctl の FAILED!・Media Errors の増加

Mac の First Aid の故障が近いという警告

使っていて気づく症状

保存できない(読み取り専用になった)

ファイルが開けない・中身が壊れる

読み書きが急に遅くなる・固まる

起動しない・ドライブが認識されない

警告が出たときの順番

flowchart TD
    A[警告や症状が出た] --> B[データを別の<br>ドライブへ退避]
    B --> C[SMARTの値を<br>控える]
    C --> D[保証の期間と<br>TBWを確かめる]
    D --> E[交換して<br>データを戻す]
  1. 1まずデータを別のドライブへ移すCrystalDiskInfo の開発元は、原因を調べるより先に退避するよう案内している。同じドライブの別フォルダーや別パーティションはバックアップにならない
  2. 2重い読み書きを避けるデータを確保するまで、長いベンチマーク・全体への書き込みテスト・初期化やフォーマットはしない(同じ案内より)
  3. 3SMART の値を控える画面の写しや smartctl の出力を残す。メーカーや修理の窓口に相談するときに使う
  4. 4保証を確かめて交換する保証は「年数」と「TBW」のどちらか早い方で終わる決め方が多い。重要な用途では、警告が一度出た時点での交換を開発元は最も確実としている

読み取り専用になった SSD は、データを読み出せるうちに移します。 書き込めないので、修復のつもりでフォーマットや書き込みのテストをすると、読み出せる機会を失うことがあります。新しい SSD に Windows を入れ直すときのインストール用 USB の作り方は、関連記事「Rufusとは・使い方|Windows 11のUSB作成と各項目の意味を解説」で扱っています。

SSDが壊れる前のバックアップ(Windows・Mac)

この節では、SSD が急に読めなくなっても困らないように、OS の標準の機能でバックアップを取る手順が分かります。

CrystalDiskInfo の開発元は、「正常」と表示されていても、今後の故障や突然のデータの消失が起きないことは保証しない、としています。 寿命の値に関係なく、別のドライブへのバックアップを続けます。

Windows:ファイル履歴で外付けドライブに保存する

Microsoft サポートの「ファイル履歴を使用したバックアップと復元」の手順です。

1

外付けドライブをつなぐ

ネットワークの保存場所を使ってもよい。

接続

2

コントロール パネルを開く

「システムとセキュリティ」の「ファイル履歴を使用してファイルのバックアップ コピーを保存する」を選ぶ。

開く

3

「オンにする」を選ぶ

ドライブが選ばれていなければ「ドライブの選択」で外付けドライブを選び、OK を押す。

オン

戻すときは、エクスプローラーでフォルダーを右クリックし「以前のバージョンの復元」から版を選んで「復元」を押します。Microsoft サポートによると、復元すると PC の今の版は置き換わり、元に戻せません。別の場所に戻すときは「復元」の横から「復元先」を選びます。

Mac:Time Machine で外付けドライブに保存する

Apple サポートの「Time MachineでMacをバックアップする」(macOS Ventura 13 以降)の手順です。Mac の内蔵ストレージの2倍以上の容量のドライブを使うよう案内されています。

1

外付けドライブをつなぐ

容量は Mac の内蔵ストレージの2倍以上が目安。

接続

2

Time Machine の設定を開く

アップルメニュー > システム設定 > 一般 > Time Machine。

開く

3

バックアップディスクを追加する

「バックアップディスクを追加」か「+」を押し、ドライブを選んで「ディスクを設定」。

設定

設定が終わるとバックアップが始まります。後から手動で取るときは、メニューバーの Time Machine のメニューから「今すぐバックアップを作成」を選びます。バックアップの世代の数や、どこまで戻せればよいかの決め方は、関連記事「バックアップ設計の書き方|RPO・RTOの決め方と世代管理の計算例」で扱っています。

SSDを長持ちさせる使い方(空き容量・TRIM)

この節では、SSD の寿命を縮める「書き込み増幅」を、空き容量と TRIM でどれだけ減らせるかを、模型の実測で確かめます。

SSD は上書きができないので、空いたブロックを作るために、まだ使っているデータを別の場所へ移してから消去します(ガベージコレクション)。この移動の分だけ NAND に余分に書き込み、寿命を使います。 NAND に書いた量 ÷ パソコンが書いた量を、書き込み増幅(WAF)と呼びます。Kingston は「WAF は、データを保存するために SSD がどれだけの追加作業を行わなければならないかを示します」と説明しています。

空き容量が少ないほど、書き込み増幅が増える(模型で実測)

ブロック 256 個 × 64 ページの小さな SSD の模型を Python で作り、ランダムな上書きを 40 万回くり返しました。空きブロックが2個を切ると、有効なページがいちばん少ないブロックを選んで中身を移し、消去します。実際の SSD の制御はメーカーごとに違うので、数値は仕組みを見るための目安です。

"""空き容量が減ると書き込み増幅(WAF)が増える様子を、小さな SSD の模型で試す
- ブロック 256 個 × 1ブロック 64 ページ。書き込みは上書きのみ(場所はランダム)
- 空きブロックが 2 個を切ったら、有効ページがいちばん少ないブロックを選んで
  有効ページを別のブロックへ移し(GC)、そのブロックを消去する
"""
import random
BLOCKS, PAGES = 256, 64
def run(fill, seed=1, host_writes=400_000):
    rnd = random.Random(seed)
    lpages = int(BLOCKS * PAGES * fill)          # 使っている論理ページの数
    valid = [set() for _ in range(BLOCKS)]       # ブロックごとの有効ページ
    where = {}                                   # 論理ページ → ブロック
    free = list(range(BLOCKS)); erase = [0] * BLOCKS
    cur = free.pop(); used = 0; nand = 0
    def put(lp):
        nonlocal cur, used, nand
        if used == PAGES:
            cur = free.pop(); used = 0
        valid[cur].add(lp); where[lp] = cur; used += 1; nand += 1
    def gc():
        nonlocal nand
        cands = [b for b in range(BLOCKS) if b != cur and b not in free]
        v = min(cands, key=lambda b: len(valid[b]))
        moving = list(valid[v]); valid[v].clear()
        free.insert(0, v); erase[v] += 1
        for lp in moving:
            put(lp)
    for lp in range(lpages):                     # 最初に全部を1回書く
        put(lp)
        while len(free) < 2: gc()
    nand0 = nand
    for _ in range(host_writes):                 # ランダムな上書き
        lp = rnd.randrange(lpages)
        valid[where[lp]].discard(lp)
        put(lp)
        while len(free) < 2: gc()
    return (nand - nand0) / host_writes, max(erase)
print("使用率  WAF(NAND書き込み÷ホスト書き込み)")
for fill in (0.50, 0.70, 0.80, 0.90, 0.95):
    waf, _ = run(fill)
    print(f"{fill:>5.0%}   {waf:5.2f}")
使用率  WAF(NAND書き込み÷ホスト書き込み)
  50%    1.24
  70%    1.86
  80%    2.67
  90%    5.15
  95%   10.18

使用率ごとの書き込み増幅(模型・ランダムな上書き)使用率95%の 10.18 を100%とした長さ

50%1.24
70%1.86
80%2.67
90%5.15
95%10.18

この模型では、使用率 50% の WAF は 1.24、90% で 5.15、95% で 10.18 になりました。 使用率が高いと、消去したいブロックにも有効なデータが多く残っていて、移す量が増えるためです。WAF が 5 なら、同じ書き込みでも NAND は5倍傷み、計算上の寿命は5分の1になります。SanDisk は、SSD の手入れとして空き容量を 10〜20% 確保することを挙げています。

TRIM があると、消したファイルを運ばずに済む(模型で実測)

TRIM は、ファイルを消したときに「この場所はもう使わない」と SSD に伝える仕組みです。 TRIM が無いと、SSD は消されたことを知らないので、消したファイルのデータまで有効なものとして運び続けます。同じ模型で、90% まで書いたあと 30% 分を消し、残りの 60% を上書きしました。

"""TRIM の有無で WAF が変わる様子を、waf.py と同じ模型で試す
90% まで書いたあと 30% 分のファイルを消し、残り 60% をランダムに上書きする。
TRIM あり:消した分を SSD に伝える(そのページは無効になり、GC で運ばれない)
TRIM なし:SSD は消されたことを知らない(有効のまま、GC のたびに運ばれる)
"""
import random
BLOCKS, PAGES = 256, 64
def run(trim, seed=1, host_writes=400_000):
    rnd = random.Random(seed)
    total = int(BLOCKS * PAGES * 0.90); live = int(BLOCKS * PAGES * 0.60)
    valid = [set() for _ in range(BLOCKS)]; where = {}
    free = list(range(BLOCKS)); cur = free.pop(); used = 0; nand = 0
    def put(lp):
        nonlocal cur, used, nand
        if used == PAGES:
            cur = free.pop(); used = 0
        valid[cur].add(lp); where[lp] = cur; used += 1; nand += 1
    def gc():
        cands = [b for b in range(BLOCKS) if b != cur and b not in free]
        v = min(cands, key=lambda b: len(valid[b]))
        moving = list(valid[v]); valid[v].clear(); free.insert(0, v)
        for lp in moving: put(lp)
    for lp in range(total):
        put(lp)
        while len(free) < 2: gc()
    if trim:                                     # ファイルを消して TRIM を送る
        for lp in range(live, total):
            valid[where[lp]].discard(lp)
    nand0 = nand
    for _ in range(host_writes):
        lp = rnd.randrange(live)
        valid[where[lp]].discard(lp); put(lp)
        while len(free) < 2: gc()
    return (nand - nand0) / host_writes
print(f"TRIM あり: WAF {run(True):.2f}")
print(f"TRIM なし: WAF {run(False):.2f}")
TRIM あり: WAF 1.47
TRIM なし: WAF 3.76

ファイルを消したあと(使っているのは 60%)

TRIM なしSSD には 90% 使っているように見え、消したデータも運ぶ。WAF 3.76
↔
TRIM あり消した 30% は運ばれず、60% 使っているのと同じ動き。WAF 1.47

TRIM は有効のままにしておく

同じ 60% のデータでも、TRIM が無いと WAF は 1.47 から 3.76 へ、約 2.6 倍になりました。 空き容量を残すことと、TRIM を有効にしておくことは、どちらも「運ぶデータを減らす」ことで寿命を延ばします。

Windows:TRIM と「ドライブの最適化」を確かめる

Windows では、NTFS の TRIM(削除通知)は管理者が止めない限り既定で有効で、「ドライブの最適化」が SSD に対して TRIM を週1回行います。 Microsoft Learn の fsutil のリファレンスでは、DisableDeleteNotify が 0 なら削除通知(トリム)が有効です。

rem 0 なら TRIM が有効(管理者のコマンド プロンプトで)
fsutil behavior query DisableDeleteNotify

PowerShell の Optimize-Volume は、パラメーターを付けないと、ドライブの種類に合わせた既定の処理をします。Microsoft Learn によると、HDD は分析とデフラグ、TRIM に対応した SSD は再トリム(-ReTrim)で、SSD にデフラグはしません。

# C ドライブに TRIM を送り直す(SSD 向けの最適化)
Optimize-Volume -DriveLetter C -ReTrim -Verbose

画面から行うときは、Microsoft サポートの手順で、タスクバーの検索に「デフラグ」と入力して「デフラグとドライブの最適化」を開き、ドライブを選んで「最適化」を押します。既定では Windows は週1回ドライブを最適化し、頻度は「スケジュールされた最適化」の「設定の変更」で変えられます。Microsoft サポートは、SSD ではこの最適化が「トリミング」として働く、と説明しています。

Linux:discard と fstrim.timer を確かめる

$ findmnt -no FSTYPE,OPTIONS /
ext4   rw,relatime,discard,no_prefetch_block_bitmaps,resv_strict,resuid=65534,resgid=65534

$ lsblk --discard /dev/vda
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
vda         0        4K       1G         0

$ cat /usr/lib/systemd/system/fstrim.timer
[Unit]
Description=Discard unused filesystem blocks once a week
Documentation=man:fstrim
ConditionVirtualization=!container
ConditionPathExists=!/etc/initrd-release

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true
RandomizedDelaySec=100min

この環境のルートは discard 付きでマウントされていて、ファイルを消すたびに TRIM を送ります(前の節の実測で、起動から 4.487GB を TRIM していました)。lsblk --discard の DISC-GRAN・DISC-MAX が 0 でなければ、そのデバイスは TRIM を受け付けます。Ubuntu 24.04 の util-linux 2.39.3 には、週1回 fstrim を実行する fstrim.timer が入っています。discard を付けていないファイルシステムは、このタイマーで定期的に TRIM されます。

そのほか、寿命のために気をつけること

  • 1空き容量を残す模型では使用率 90% を超えると WAF が大きく増えた。SanDisk は 10〜20% の確保を挙げている
  • 2TRIM を止めないWindows は DisableDeleteNotify = 0、Linux は discard か fstrim.timer
  • 3SSD にデフラグをしないWindows の最適化は SSD には TRIM を行う。手動のデフラグは書き込みを増やすだけ
  • 4熱をこもらせないNVMe には温度のしきい値があり、超えると Critical Warning のビット1が立つ
  • 5ファームウェアを最新にするSanDisk は手入れの1つにファームウェアの更新を挙げている。更新の前にバックアップを取る
  • 6書き込みの多い用途は分ける録画やキャッシュなど毎日大量に書く用途は、TBW の大きい SSD か別のドライブに置く

ディスクの使用量や書き込みの量を Linux のコマンドで見る方法は、関連記事「Linuxメモリ・ディスク確認|free・df・du・vmstat・iostat見方」で扱っています。Windows でディスクの使用率が 100% に張り付くときの探し方は、関連記事「タスクマネージャーの開き方|ショートカット7つと使い方・開かない時の対処」で扱っています。

SSDとHDDの寿命の違い

この節では、SSD と HDD で、寿命の決まり方と、確かめ方・前ぶれがどう違うのかが分かります。

SSD は書き換えの回数で消耗し、HDD は回転する円盤と動くヘッドという機械の部品が摩耗します。 そのため、見る項目も、長持ちさせる方法も違います。

比べる点 SSD HDD
記録する部品 NAND フラッシュ(動く部品なし) 磁気の円盤とヘッド(動く部品あり)
寿命を決める主なもの 書き換え回数(TBW) 機械の部品の摩耗
寿命を見る SMART Percentage Used・予備・寿命の項目 代替処理済み・保留中のセクタ数
Windows の正常性の画面 NVMe は対象・SATA は対象外 対象外
Windows の最適化 TRIM(再トリム) 分析とデフラグ

CrystalDiskInfo のマニュアルでは、HDD の「注意」は 05(代替処理済みのセクタ数)・C5(代替処理保留中のセクタ数)・C6(回復不可能セクタ数)の生の値が基準を超えたときに出ます。SSD では、メーカーごとの寿命の項目で残り寿命を見ます。どちらも「正常」でも突然壊れることはあるので、どちらを使うときもバックアップは欠かせません。

よくある質問

Q. SSDの寿命は何年ですか? A. 書き込む量で決まり、TBW ÷(1日の書き込み量 × 365)で計算します。TBW 600TB の SSD に1日 20GB 書くなら約 82年、1日 200GB なら約 8年です。書き込み以外の故障もあるので、メーカーの保証の年数(例:Samsung 990 PRO は5年)も目安にします。

Q. Windows 11 でSSDの寿命を確認する方法は? A. 設定 > システム > ストレージ > 詳細記憶域設定 > ディスク & ボリュームで、ディスクの「プロパティ」を開きます。推定残存期間・利用可能な予備・温度が出ます。対象は NVMe の SSD だけなので、SATA の SSD は CrystalDiskInfo などで確かめます。

Q. CrystalDiskInfo で「注意」と出たらどうすればよいですか? A. 原因を調べる前に、データを別のドライブへ退避します。SSD では残り寿命が 10% 以下で「注意」になることが多いですが、すぐ壊れるという意味ではありません。重要な用途なら、開発元は警告が一度出た時点での交換を最も確実としています。

Q. SSDの寿命が近い前兆はありますか? A. いちばん確かなのは、Windows の重大な警告(予備容量が少ない・信頼性が低下・読み取り専用)や SMART の値の悪化です。保存できない、ファイルが壊れる、急に遅くなる、認識されないといった症状が出たら、すぐにバックアップを取ります。

Q. SSDとHDDはどちらが寿命が長いですか? A. 寿命の決まり方が違うので、一概には比べられません。SSD は書き換えの回数、HDD は機械の部品の摩耗で寿命が決まります。SSD は TBW と SMART の値で残りを計算できるのが違いです。

Q. SSDを電源につながずに放置するとデータは消えますか? A. JEDEC の条件では、PC 向けの SSD は TBW まで書き込んだあとでも、電源を切って 30℃で1年はデータを保つことになっています。長く保管するデータは、SSD だけに置かず、別の媒体にもバックアップします。

Q. Percentage Used が 100% になったら壊れますか? A. 100% は、メーカーが見積もった耐久を使い切ったという意味で、壊れたという意味ではありません。100 を超えて増えることもあります。ただ、見積もりの範囲を超えて使っている状態なので、交換を計画します。

Q. TBW を超えたらすぐに使えなくなりますか? A. TBW は、データを保つ力などの条件を満たしたまま書ける量として決められた値で、超えた瞬間に止まるわけではありません。ただし保証は「年数か TBW のどちらか早い方」で終わることが多く、超えた後は保証の外になります。

Q. SSDにデフラグをしてもよいですか? A. Windows の「ドライブの最適化」は、SSD にはデフラグではなく TRIM を行います(Optimize-Volume の既定の動き)。手動でデフラグをすると、書き込みが増えて寿命を使うだけです。

Q. 空き容量はどのくらい残せばよいですか? A. SanDisk は 10〜20% の確保を挙げています。この記事の模型では、使用率 80% で書き込み増幅が 2.67、90% で 5.15 と、90% を超えるあたりから急に増えました。

Q. 外付けSSDも同じ考え方ですか? A. 中は同じ SSD なので、TBW と書き込み量の考え方は同じです。USB でつなぐと SMART が読めないことがあり、smartctl の man ページには、USB と NVMe の変換チップ(ASMedia・JMicron・Realtek)ごとの -d の指定があります。

Q. 中古のSSDはどこを見ればよいですか? A. Data Units Written(書き込んだ量)、Power On Hours(電源が入っていた時間)、Percentage Used(使った割合)、Media and Data Integrity Errors を見ます。書き込んだ量を TBW と比べると、どれだけ使われたかが分かります。

まとめ

  • SSD の寿命は、NAND の書き換え回数で決まる。SLC 100,000回・MLC 10,000回・TLC 3,000〜5,000回・QLC 約1,000回。
  • 何年もつか = TBW ÷(1日の書き込み量 × 365)。600TBW なら1日 20GB で 82.2年、200GB で 8.2年。
  • DWPD = TBW × 1000 ÷(365 × 保証年数 × 容量 GB)。990 PRO の 1TB(600TBW・5年)は 0.33 DWPD。
  • Windows 11 は設定の「ディスク & ボリューム」で NVMe SSD の正常性を見る。SATA は CrystalDiskInfo か smartctl。
  • 見る値は Percentage Used・Available Spare・Media and Data Integrity Errors・Critical Warning。仮想ディスクでは SMART は読めず、smartctl は終了コード 1 や 2 を返した。
  • 警告が出たら、まずデータを別のドライブへ退避。「正常」でも突然壊れることがあるので、バックアップは常に取る。
  • 模型の実測では、使用率 50% の WAF 1.24 に対し 95% で 10.18、TRIM なしでは 1.47 が 3.76 に増えた。空き容量を残し、TRIM を有効のままにする。

参考・出典

確認日はいずれも 2026年10月23日です。

  • Kingston「DWPD・TBW・SSD の耐久性」:https://www.kingston.com/jp/ssd/dwpd
  • Kingston「2D vs 3D NAND: Differences Between SLC, MLC, TLC and QLC Flash Storage」:https://www.kingston.com/en/blog/pc-performance/difference-between-slc-mlc-tlc-3d-nand
  • Samsung Semiconductor「Warranty」(コンシューマー向けストレージの保証規定):https://semiconductor.samsung.com/consumer-storage/support/warranty/
  • Flash Memory Summit 2012「Verification and Management of Endurance in NAND SSDs」(Intel):https://old.flashmemorysummit.com/English/Collaterals/Proceedings/2012/20120821_TC12_Vasudevan.pdf
  • SanDisk「SSDはどのくらい長持ちしますか?」:https://www.sandisk.com/ja-jp/topics/ssd/how-long-do-ssds-last
  • libnvme「struct nvme_smart_log」(Ubuntu manpages):https://manpages.ubuntu.com/manpages/jammy/man2/nvme_smart_log.2.html
  • smartmontools 7.4 のソース(smartctl.8.in・nvmeprint.cpp・drivedb.h):https://github.com/smartmontools/smartmontools/tree/RELEASE_7_4/smartmontools
  • nvme-cli 2.8「nvme-smart-log」:https://github.com/linux-nvme/nvme-cli/blob/v2.8/Documentation/nvme-smart-log.txt
  • nvme-cli リリース:https://github.com/linux-nvme/nvme-cli/releases
  • Microsoft サポート「ストレージ デバイスの重大な警告についての対処方法」:https://support.microsoft.com/ja-jp/topic/258e0042-e091-277d-5fa6-3c710fba70d7
  • Microsoft サポート「Windows でデータ ドライブを最適化/最適化する」:https://support.microsoft.com/ja-jp/windows/windows-10-pc-を最適化する-048aefac-7f1f-4632-d48a-9700c4ec702a
  • Microsoft サポート「ファイル履歴を使用したバックアップと復元」:https://support.microsoft.com/ja-jp/windows/experience/backup-recovery/backup-and-restore-with-file-history
  • Microsoft Learn「fsutil behavior」:https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/fsutil-behavior
  • Microsoft Learn「Optimize-Volume」:https://learn.microsoft.com/ja-jp/powershell/module/storage/optimize-volume
  • Microsoft Learn「Get-StorageReliabilityCounter」:https://learn.microsoft.com/en-us/powershell/module/storage/get-storagereliabilitycounter
  • Microsoft Learn「MSFT_StorageReliabilityCounter class」:https://learn.microsoft.com/en-us/windows-hardware/drivers/storage/msft-storagereliabilitycounter
  • Microsoft Learn「MSFT_PhysicalDisk class」:https://learn.microsoft.com/en-us/windows-hardware/drivers/storage/msft-physicaldisk
  • Crystal Dew World「CrystalDiskInfo」:https://crystalmark.info/ja/software/crystaldiskinfo/
  • Crystal Dew World「CrystalDiskInfo 健康状態」:https://crystalmark.info/ja/software/crystaldiskinfo/crystaldiskinfo-health-status/
  • Crystal Dew World「CrystalDiskInfo S.M.A.R.T. 情報」:https://crystalmark.info/ja/software/crystaldiskinfo/crystaldiskinfo-smart-information/
  • Crystal Dew World「CrystalDiskInfoで「注意」「異常」と表示されたときに行うこと」:https://crystalmark.info/ja/2026/07/18/crystaldiskinfo-caution-bad/
  • Crystal Dew World「ダウンロード」:https://crystalmark.info/ja/download/
  • Apple サポート「Macのディスクユーティリティでストレージデバイスを修復する」:https://support.apple.com/ja-jp/guide/disk-utility/dskutl1040/mac
  • Apple サポート「Time MachineでMacをバックアップする」:https://support.apple.com/ja-jp/104984
  • The Linux Kernel documentation「I/O statistics fields」:https://docs.kernel.org/admin-guide/iostats.html
  • The Linux Kernel documentation「Block layer statistics in /sys/block//stat」:https://docs.kernel.org/block/stat.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SSDの寿命は何年?TBWの計算式と確認方法・前兆と長持ちのコツ」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?