【安物買いの銭失い】そのストレージ、本当に大丈夫?/技術ブログ
2026.02.25
みなさんはじめましておひさしぶりですこんばんわ。
リベロエンジニアで社員として働きながら、藤波製作所で個人事業主(代表)という活躍の機会をいただいているドラゴン藤波です。
PCパーツ、どこで買ってますか?
皆様はどこでPCパーツを買ってますか?
ワイは、昔はAmazonでしたが、昨今の風潮もあり、個人的にはカカクコムで調べて、可能なら家電量販店、パソコン工房のような自作erにやさしいBTOショップで買うことが多いです。
そんなワイが「うおーやっちまったー」という思い出をつづる記事です。
円安とAIバブルで発狂しそう
見出しが前回と同じじゃねーか!!!
いや違うんですよ。本当に重要な話でして。
メモリ、SSD、HDD、CPUに何なら光学ドライブまで値上がりしてるんです。あとたぶん電源もシレッと上がってる。
今まで半導体メーカーに卸していただろうメーカー様が自分たちでメモリ作って販売していて、それでも想定の1.5倍から3倍ぐらい高い。
自分が経営者と仮定したら「円高になって原価下がったところで絶対値下げしないだろうなぁ」と思いつつも、いち消費者としては大打撃なのです。
あと本当に変えてないのに「AWS代が増えた」「ChatGPT代が増えた」になるのが本当につらい。
半導体は戦略物資
ニュース見てないんですか?と言われそうですが、今や鉄や石油と同じぐらいの重要度なんですね。
しかしそうなってしまうと、PCやスマホ、はては車やガス給湯器まで庶民には手が届かない高級品になってしまう。
政治家の皆様にはがんばっていただきたいところです。
中古の購入は行儀の良いお店で
今回はさすがに調子に乗りすぎました。なんぼなんでもSDカード買ったほうがマシでした。
面白い結果とはなりましたが、、、これ経費で落ちないかなぁ、、、ダメですか、、、
ストレージ増設の検討を検討に検討を重ね加速した結果
前回購入したPC、CドライブがM.2 NVME SSDの512GBでして(※1)。
普通に事務用、開発用PCなら余るのですが
いかんせんBlenderやLive2D、VRchatはストレージも食います。
あとランダムアクセスがエグいのでTBWが気になってしまう(※2)。
気にしすぎといわれても、タスクマネージャで結構なR/Wを見てしまうと気になってしまうし、単純に容量が狭い。
リカバリメディア作ったとはいえ、高い買い物をしているので安全に運用したい。
脳内稟議を重ねた結果、ストレージ増設を決定しました。
- Dドライブ
SteamやBlender、Live2D、GoogleDrive、ESETやその他もろもろがR/Wしまくる領域です。Cの負荷を下げたい。 - Eドライブ
画面録画用。シーケンシャルライトが連打される録画用領域です。
今回の記事を書く経緯となってくれた悪夢の15分です。
※1 NVMEの詳しいことはBuffalo様の公式HPが一番わかりやすいです
※2 SSDの寿命。総書き込み容量。
空きスロット数を再確認する
元は型落ち中古品のサポート切れノート。
そもそも増設可能なスロットがどれぐらいなのか、改めて確認しました。
ハードウェア仕様上は2.5インチ1基、NVME4基、SDカード1枚搭載できるそうです。モデルやカスタムによっては。
実際に筐体を開けてみたところ、NVME1基と2.5インチ1基はスンナリマウントできそうでした。
そのかわり、たぶん2.5インチをマウントする場合は拡張キットが必要になる予感。。。
そしてNVMEの3と4がマウントできないモデルのようです。
というたぶん、こいつ、NVME2基+2.5インチ1基+SDカードリーダーの模様。
安パイなNVME(Dドライブ用)を購入しました。
クイックシートにM.2 NVME SSDとしか書いてないあたり時代を感じます。定規で長さを調べたり
ディスコードで知人に教えてもらったりしました。
そして購入したのがこちら↓

P3102TB。値下げって画像は書いてあるけど買った時より値上がりしてる。世の中どうなってるの。。
今回のワークステーションに突っ込むにあたりヒートシンクは備え付けがあるので、残念ながら使いませんでした。
DドライブのNVMEを冒険する気は起らなかったです。
Dドライブにいろいろ入れなおす
はい。Dドライブ出来上がり。簡単ですね。
各種アプリや、GoogleDriveのストリーム先を入れなおしたところ、100GBぐらいCが空きました。
いいことです。Cがスカスカなのは見てて気持ちがいいですね。
ここまでは迷いなく買いました。利用明細を見た家族の視線がとても痛かったです。いやゲーム用やないねんて
BlenderとLive2Dの画面見てたら遊んでるようにしか見えないかもしれないけど!
ほら!AIもできるよ!いや遊んでるのはVRchatか
Eドライブに録画したい
実をいうと、いままでVRchatはiPadでやってたのですが、画質がガビガビ、入れないワールド多数で、
参加を断念したイベントがそこそこありました。
ライバーさんが「モバイル用のVRchatで来てくれたの?!?ちゃんと見えてる!?」なんて言ってくれたのが遠い過去の記憶です。
ガビガビ画質とはいえ、ipadは脳死で画面録画ができます。ただアチアチipadになってiCloudを無限に圧迫するモンスターとなるため、スクショで我慢してました。
しかし今は違います。
無敵のワークステーションがいます。
画面録画もOBS通せばほーら簡単キレイに取れます。もちろん個人用途ですよ念のため
使用メディアを決めよう
SSD
性能面で選びたくなりますが容量単価悪い。、シーケンシャルライトの連続ってことを考えると
SSDを選ぶのはイマイチ。もったいない。容量単価悪いし。
SDカード
過去、映像録画系の仕事で「SDカードでも割といける」ことがわかってましたし、
ハンディカムもSDですからね。わりとSDいけます。頑張れる。
ただ遅い。転送速度が10MB/毎秒ぐらい。
あと劣化SSDと言ったらいいのかな、メチャクチャ熱に弱い。だから寿命も早い。
あと容量単価悪い。防犯カメラに装着するから意義がある感じですね。
HDD
大正義。最初からコレを買っておけばコストはHDD代だけで済みました。
確かにSSDほどの性能は出ませんが、録画中は触らないドライブと割り切ればHDDでも事足ります。
ただし、それは録画中は触らないって前提です。
動画ファイルの書き込み中に別動画の読出しを始めたら、構造上、プラッタが暴れて寿命が縮まります。まるで作業中に会議に呼ばれたエンジニアみたいですね。あれなんか眼から汗が出てくるわ
何より容量単価がすごくいい。録画完了→wasabi/S3に退避でバックアップの懸念もゼロです。一生消せない金のかかるデータのゴミ箱になりそうでwasabi/s3の契約は二の足を踏んでいます。
出会ってしまった4TB SSD
インターネットの海をさまよっていたところ、画像の4TB SSDに出会いました。狂気の1万円です。


もう一目見て「容量詐欺」を疑いました。でもワンチャン4TBあるなら儲けモン。2.5インチHDDは構造上2TBが限界なので、この4TBSSDを試してみます。
ちなみに○○オクで買いました。ヤバいニオイがプンプンする。
クリスタルディスクインフォ~!

ちなみに超嘘です。これ3.62TB書き込んで1回文鎮にしたあと、別PCで奇跡的にマウントできたあとの姿です。
壊す前も撮るべきでしたね~
まともなSSDのクリスタルディスクインフォ~

もう見ためがマトモだなってわかりますかね。
ただクリスタルディスクインフォはSMART情報しか取れないので、コントローラやファームの暴走で文鎮化したときの結果はわかりにくいんです。
裁くのは!俺のスタンドだ!!
容量詐欺をまず疑っていたので、H2testwを使ってもよかったのですが、
コントローラも怪しい可能性があるため、スタンドパワーを全開でオラオラするスクリプトを用意しました。
※実行する際は絶対に自己責任で、ブッ壊してもいいストレージにやってね!HDDにやると本当に寿命縮めるよ!
param(
[Parameter(Mandatory=$true)][string]$DriveLetter, # 例: E
[double]$SizeTB = 4, # 目標サイズ(TB表記)
[int]$BlockMiB = 16, # ブロックサイズ(MiB)
[int]$Seed = 12345, # シャッフル用シード
[switch]$VerifyOnly # 書かずに検証だけ
)
$ErrorActionPreference = "Stop"
$root = "$DriveLetter`:\"
if (-not (Test-Path $root)) { throw "Drive $DriveLetter not found." }
$targetPath = Join-Path $root "filltest.bin"
Write-Host "Target file: $targetPath"
$blockBytes = [int64]$BlockMiB * 1024 * 1024
# TiB換算(Windowsの実表示と整合)
$targetBytes = [int64]([math]::Floor($SizeTB * 1024 * 1024 * 1024 * 1024))
$blockCount = [int64]([math]::Floor($targetBytes / $blockBytes))
if ($blockCount -le 0) { throw "blockCount <= 0. Check SizeTB/BlockMiB." }
Write-Host "Block size : $BlockMiB MiB ($blockBytes bytes)"
Write-Host "Target size: $SizeTB TiB-ish ($targetBytes bytes)"
Write-Host "Blocks : $blockCount"
# ---- ブロック順シャッフル ----
$indices = New-Object int[] $blockCount
for ($i=0; $i -lt $blockCount; $i++) { $indices[$i] = $i }
$rng = New-Object System.Random($Seed)
for ($i=$blockCount-1; $i -gt 0; $i--) {
$j = $rng.Next(0, [int]($i+1))
$tmp = $indices[$i]
$indices[$i] = $indices[$j]
$indices[$j] = $tmp
}
# ---- ブロック書き込み ----
function Write-Block([System.IO.FileStream]$fs, [int]$idx, [byte[]]$buf) {
# ヘッダ(16バイト)
[BitConverter]::GetBytes([int64]$idx).CopyTo($buf, 0)
[BitConverter]::GetBytes([int64]$Seed).CopyTo($buf, 8)
# 再現可能な乱数
$rngBlock = New-Object System.Random($Seed -bxor $idx)
$rngBlock.NextBytes($buf) | Out-Null
# ヘッダ上書き(乱数で潰されるため再書込)
[BitConverter]::GetBytes([int64]$idx).CopyTo($buf, 0)
[BitConverter]::GetBytes([int64]$Seed).CopyTo($buf, 8)
$offset = [int64]$idx * $blockBytes
$fs.Position = $offset
$fs.Write($buf, 0, $buf.Length)
}
# ---- ブロック検証 ----
function Verify-Block([System.IO.FileStream]$fs, [int]$idx, [byte[]]$buf) {
$offset = [int64]$idx * $blockBytes
$fs.Position = $offset
$read = 0
while ($read -lt $buf.Length) {
$n = $fs.Read($buf, $read, $buf.Length - $read)
if ($n -le 0) { throw "Read failed at block $idx" }
$read += $n
}
$gotIdx = [BitConverter]::ToInt64($buf, 0)
$gotSeed = [BitConverter]::ToInt64($buf, 8)
if ($gotIdx -ne $idx -or $gotSeed -ne [int64]$Seed) {
return $false
}
# 先頭4KBだけ再生成して比較(高速化のため全体比較しない)
$checkLen = [math]::Min(4096, $buf.Length)
$expected = New-Object byte[] $checkLen
[BitConverter]::GetBytes([int64]$idx).CopyTo($expected, 0)
[BitConverter]::GetBytes([int64]$Seed).CopyTo($expected, 8)
$rngBlock = New-Object System.Random($Seed -bxor $idx)
$rngBlock.NextBytes($expected) | Out-Null
[BitConverter]::GetBytes([int64]$idx).CopyTo($expected, 0)
[BitConverter]::GetBytes([int64]$Seed).CopyTo($expected, 8)
for ($k=0; $k -lt $checkLen; $k++) {
if ($buf[$k] -ne $expected[$k]) { return $false }
}
return $true
}
# ---- 実行 ----
$buffer = New-Object byte[] $blockBytes
if (-not $VerifyOnly) {
Write-Host "Writing blocks..." -ForegroundColor Cyan
$fs = New-Object System.IO.FileStream(
$targetPath,
[System.IO.FileMode]::OpenOrCreate,
[System.IO.FileAccess]::ReadWrite,
[System.IO.FileShare]::None
)
try {
$fs.SetLength($blockCount * $blockBytes)
$sw = [System.Diagnostics.Stopwatch]::StartNew()
for ($n=0; $n -lt $blockCount; $n++) {
$idx = $indices[$n]
Write-Block $fs $idx $buffer
if (($n % 1024) -eq 0 -and $n -gt 0) {
$doneGiB = ($n * $blockBytes) / 1GB
$rate = $doneGiB / $sw.Elapsed.TotalSeconds
Write-Host ("Wrote {0:N0}/{1:N0} blocks ({2:N1} GiB), {3:N2} GiB/s" -f $n, $blockCount, $doneGiB, $rate)
$fs.Flush($true)
}
}
$fs.Flush($true)
$sw.Stop()
Write-Host "Write completed in $($sw.Elapsed)." -ForegroundColor Green
}
finally {
$fs.Dispose()
}
}
Write-Host "Verifying blocks..." -ForegroundColor Cyan
$fs2 = New-Object System.IO.FileStream(
$targetPath,
[System.IO.FileMode]::Open,
[System.IO.FileAccess]::Read,
[System.IO.FileShare]::Read
)
try {
$bad = 0
$sw2 = [System.Diagnostics.Stopwatch]::StartNew()
for ($n=0; $n -lt $blockCount; $n++) {
$idx = $indices[$n]
$ok = Verify-Block $fs2 $idx $buffer
if (-not $ok) {
$bad++
Write-Host "Mismatch at block $idx (order-pos $n)" -ForegroundColor Red
if ($bad -ge 20) {
throw "Too many mismatches. Likely fake capacity or corruption."
}
}
if (($n % 2048) -eq 0 -and $n -gt 0) {
$doneGiB = ($n * $blockBytes) / 1GB
$rate = $doneGiB / $sw2.Elapsed.TotalSeconds
Write-Host ("Verified {0:N0}/{1:N0} blocks ({2:N1} GiB), {3:N2} GiB/s, bad={4}" -f $n, $blockCount, $doneGiB, $rate, $bad)
}
}
$sw2.Stop()
if ($bad -eq 0) {
Write-Host "VERIFY OK. No mismatches detected." -ForegroundColor Green
}
else {
Write-Host "VERIFY FAILED. bad blocks: $bad" -ForegroundColor Red
}
}
finally {
$fs2.Dispose()
}実行ばこんな感じで
.\ssd_fill_verify.ps1 -DriveLetter E -SizeTB 3.63 -BlockMiB 16 -Seed 12345割と粉砕するつもりですが、この程度で粉砕されるSSDなら最初から使い物にならないです。
やってること
- 容量偽装の暴き出し
3.62TBめいっぱいの巨大なファイルを作成し、ほぼ全領域を埋め尽くします。
実用量が足りない場合、この時点でSSDが書き込みor検証中にエラーが出るためリタイア(再起不能)になります。 - シャッフル書き込みでコントーラの裏をかく
シーケンシャル書き込みの最適化、キャッシュごまかしを無効化してランダムアクセスをやろうとしてます。 - 整合性チェック
Verifyフェーズで1bitの狂いもなくファイルが正しく保存されているかチェックしようとしています。
ただまぁ全データ比較すると超時間かかるため、先頭4KBだけ厳密チェックしようとしています。
実際にやってみた
PS C:\~~~\Desktop> .\ssd_fill_verify.ps1 -DriveLetter E -SizeTB 3.63 -BlockMiB 16 -Seed 12345
Target file: E:\filltest.bin
Block size : 16 MiB (16777216 bytes)
Target size: 3.63 TiB-ish (3991227208826 bytes)
Blocks : 237895
Writing blocks...
うおおおおおお!!!オラオラオラオラオラオラ!!!

なんだこの“遅さ”は~~~~~!!!(白目
SSDなのにカタツムリになっちまったような
書き込み速度が20MB/秒なんて古いSDカードと変わらないじゃないか~~~~~!!!
意外!それはOSからの警告!!
15分!よく耐えた!
C:\~~~\ssd_fill_verify.ps1 : "3" 個の引数を指定して "Write" を呼び出し中に例外が発生しま
した: "存在しないデバイスを指定しました。
"
発生場所 行:1 文字:1
+ .\ssd_fill_verify.ps1 -DriveLetter E -SizeTB 3.63 -BlockMiB 16 -Seed ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ssd_fill_verify.ps1], MethodInvocationException
+ FullyQualifiedErrorId : IOException,ssd_fill_verify.ps1このあと
ページング操作中にデバイス \Device\Harddisk2\DR2 上でエラーが検出されました。{遅延書き込みデータの紛失} ファイル E:\filltest.bin のためのデータを一部保存できませんでした。データを損失しました。 このエラーは、コンピューターのハードウェアまたはネットワーク接続の障害によって発生した可能性があります。このファイルをどこか別の所に保存してください。が発生して、トドメの
トランザクション ログへのデータのフラッシュに失敗しました。VolumeId: E:、DeviceName: \Device\HarddiskVolume7 で破損が発生している可能性があります。
エラーの状態: 存在しないデバイスを指定しました。
デバイス GUID: {2b36ea7d-ac3f-008e-956a-4952a3d4f474}
デバイス製造元:
デバイス モデル: SSD 4TB
デバイスのリビジョン: VA001CBN
デバイスのシリアル番号: 001441
バスの種類: SATA
アダプターのシリアル番号: OS再起動して別PCでマウントしたところ、最初のクリスタルディスクインフォに戻ったわけです。

ワカりますか?3.62TBも書き込んだ“事実”が“無くなって”いる。どういう原理なんですか?誰か教えてください。
この直後、クイックフォーマットを命令しましたが受け付けません。キャンセル→効かない→抜線→再起動→再マウント→とりあえず見える→txtファイルの作成→不可能です。
このtxtファイルの作成命令を最後に、
どうやらSSDは“考えるのをやめた”ようで、2度と認識できなくなり不明なデバイスへとなりました。Linuxにマウントしたらまだ遊べそうだけどな
コントローラが再起不能(リタイア)になったか、容量偽装ドライブが限界突破して再起不能(リタイア)になったか
今となっては知るよしもありません。
そして2.5インチのHDDを買った
まぁ録画用ですからね。何も面白くない普通の2.5インチHDDですよ。
というか2.5インチ7mmでってなると、5400回転、キャッシュ128MB、容量2TBが限界っぽいですね。

あやしい商品ダメ絶対
買うなとはいいませんが、あくまで自己責任がどこまでも付きまといます。
例えばパソコン工房は相性が悪かったら保険までありますから、
やはりそういうところから購入するのがスジが良いと思います。
今回購入したSSDはホワイトラベルなんて可愛いモンじゃない粗悪品でしたが。。。
さて、今回ワイが身をもってお届けした迫真の記事はいかがでしたか?
安物買いの銭失いとはいいますが、1万掛かってますからね。
同じ1万でほぼHDD買えたし、skebとかスパチャやおいしいゴハンのほうが満足度高いですからね。
どなたかの酒の肴になれば幸いです。
では!またね~~~~~~~~~~~~!!!!!!!!!!!!!!!

