このご時世にSSDを買い増しした話(CSSD-M2O2TP4R72600A00/CFD販売)

SSDが高すぎる!というかメモリも含めてPCパーツ高いお!!

昨今のSSD価格

2TBは1万~1.5万くらいが相場!未だにそんな価値観でいる人はよほどの希少種と見るか、PC界隈から距離を置いて久しいと思うはず。
昨今の半導体事情を見れば、エンタープライズだけでなくコンシューマ向けのエグい価格設定すら、さも当然になりつつある。例えば価格ドットコムで適当に眺めてみると1TBで3万台、2TBは6万円弱なんて数字が平然と飛び込んでくる。
もしかしたら20xx年は今以上に高くなってるかもしれないけど、これが2026年11月の状況…。

キン◯ストンですら2TBで5万強…

幸か不幸か

FractalDesignのケース特価品をうっかり拾ってしまったがために、中身を詰めざるを得ない状況に陥っていた。
CPU、メモリは余り物の手持ちでしのぐとして、問題はストレージ…SSDだ。SSDは消耗品!と思い込んでいるだけにどうせ組むなら新品か、せめて状態のいい中古を使いたい。

しかし、かつての”半導体メーカ赤字垂れ流し投げ売り価格”の金銭感覚が染み付いた脳には今の相場はあまりにも厳しすぎるっ…。とてもじゃないが新品には手が伸びず、「どこかに状態の良い出物はないか」とヤ◯オクとメルカリを巡回する日々が続いていた。

そんな折、X(旧Twitter)でSSDの特売情報が流れてきた。

””M.2の2TBSSDが32880円とかいうありえない安値で売られてる””

高い。客観的に見れば普通に高い。でも今の相場からすれば……安い(白目)。
気づけば購入ボタンを押していた。OCNオンラインショップで2TB/PCIe Gen4.0/TLC/Nvmeが3.3万円だ。高いが安い。つまり安いから安いんだと、雑に言いくるめて魔法のカードを切る。

今はなきNTT-Xストア…

必要なものなので、趣味なので、これがないと…と言い訳し

SSD着弾ス

購入したのはCFDのCSSD-M2O2TP4R7260A00。パソコン工房やツクモでは2026年6月~8月くらいに特価品として、このくらいの価格で売っている。

最後のチャンスになるのか、ここから大幅下落が起きるのかと戦々恐々としつつ、間1日で着弾。
本体包装は白箱とエアパッキンだった。表には1年保証の文字と保証規定のQRコードが記載されていた。

CFD販売 白箱SSD サポート案内
https://www.cfd.co.jp/consumer/other/support-wboxssd.html

バルク品ばりの簡易包装。箱がついているだけえらい

本体表には熱伝導シート。横から見ると銅箔が見える。
いつもだったらワランティ外上等!といってヒートシンクとのダブル熱伝導シートを嫌って剥がすところ。
しかし今回の保証期間は1年。そして何より壊れた時の買い替えは今の相場ではとても気が落ち着かない…。

ピントぼけぼけ…。表面はグラフェン銅箔の熱伝導シートが貼ってあるらしい
裏はシリアルのシールと基板の情報

基板はTeamsのMP44Lと同じみたい。CFDはファブレスなので自社設計の基板をもつわけではなく、リファレンス基板の採用自体は普通のこと。もちろん基板は同じでも乗ってるコントローラやNANDは別物(後述)。

電腦零組件交易買賣一元起標 CPU 主機板 顯示卡 硬碟 SSD 記憶體 RAM | [售]MP44L 2TB 少用 近全新 | Facebook

https://www.facebook.com/groups/507315352749401/posts/3709337309213840/


SSDの中身

熱伝導シートをひっぺがす勇気はないので、おとなしくソフトの力で中身を見ていく。
まずは定番のCrystalDiskInfoにて、結果は下図となった(USB接続にて確認)。さすが新品!健康状態はまだ100%!

いつもお世話になってます。CrystalDiskInfoの図

また、CFD販売の2TB M.2 SSD「CSSD-M2O2TP4R7260A00」が店頭入荷、実売約3.5万円 – AKIBA PC Hotline!によれば、内部のコントローラはRealtekとのこと。
vlo氏が公開している判別ツールの中から、Realtek製コントローラー対応版(rtl_nvme_id)を使わせてもらい詳細な構成を吸い出してみる。

  • コントローラー:Realtek RTS5772(RTS5772DL)
  • NAND:Micron 176層 TLC (B47R)

価格が価格だけに、QLCか出所不明の怪しいリマーク品の可能性をうたがっていたが…仮にもMicronのTLC NAND(176層…今となってはちょっと古いけど)が詰まってるじゃないか!
もちろん選別落ちNANDの可能性は濃厚。CFDからは同じNANDを使ったモデル(CSSD-M2M2TPG4NZ)があって、あちらはDRAM対応のコントローラが乗ったNVMe/PCIe Gen4/Read:7200MB/s/Write:6850MB/sの仕様になっている。
一方、今回のモデルはRealtekのDRAMレスコントローラーとの組み合わせ。速度はRead/Writeともに6,000MB/s止まり。保証もわずか1年の白箱扱いである。本来読み書き7000MB/sを出せるポテンシャルがありながら、あえて性能落としたウェハなのか、あるいはパッケージング段階で所定のグレードから外れたロットなのか…。

とはいえこの相場の中で、よくわからない低耐久なQLC-NANDを掴まされることはなくなったみたいなので満足行く買い物になった。細かい性能は他の人に見てもらうとして、しばらくこれでガリガリ読み書きしていくつもり。


カメラのキタムラでNIKON Z6IIを購入(3度目)

ここ5年くらいでニコンのミラーレスカメラZ6IIを買ったり手放したりを繰り返してる。すでにZ6IIIが登場して2年弱は経っておりZ6IIの新品供給は止まっている。
新型を使ってみたい欲はあるものの狙った画角で適当なぼかしが入ってくれれば自己満足できるので、使い慣れたZ6IIを中古で購入することにした。今回の購入は3台目にあたる。

購入先はカメラのキタムラのWebサイト。状態を表すランクはAA〜Dであり、使う際に支障ないのはランクBくらいまでかなという所感(適当)
使った後に売ることを考えるとそこそこ外観が綺麗でシャッター回数は1〜2万回弱くらい、がいいのでA〜AB品から選ぶことにした。ECサイトで見れる情報は状態コメントと外観(3枚)、付属品程度のため希望する個体とエンカウントするには取り寄せて確認する必要がある。ということで気になった2台、いずれもAB品を取り寄せた。

シャッター回数はユーザ自身で調べることができるのでパソコンをカウンターの上に置かせてもらって見比べることにした。

1台目
2台目

状態はどれも同じ感じ。掲載写真ではわからなかった部位の傷や塗装剥がれを考慮すると3万回弱の方がいいか…?と思っていたところ、店員さんが展示品を出してきてくれた。

3台目(展示品)

展示品は不特定多数のお客さんに揉まれた個体であるものの、お店から外に出たことはないだろうし普段はショーケース管理だろうし、何よりシャッター回数が他と比べると驚異的に少ない。
価格は今回取り寄せしたものと同等レベルだったため、まさかの展示品を購入することになった。
展示品といえど保証上は新品扱いになるため、現在開催中のキャッシュバックキャンペーンにも応募できてしまう。

取り寄せ品の返品手数料を差し引いてもだいぶ安くお買い物することができた( ´∀`)

MacBook起動時にVPNを自動接続できるようにした(二番煎じ)

起動したら自動的に自宅のネットワークへ接続できるようにしたくて、下記ブログの記事を参考に少しだけ改良してみた。とても助かった。

Mac起動時に自動でVPN接続する
https://qiita.com/ixxxng/items/c80d744f5698dadb6bb6

-- インターネットに繋がるまで最大30秒待機
repeat 10 times
	try
		do shell script "ping -c 1 8.8.8.8" -- GoogleのDNSをぐるぐるする
		exit repeat -- 繋がったらループを抜ける
	on error
		delay 3 -- 繋がらなければ3秒待って再試行
	end try
end repeat

-- 接続確認後にVPN接続処理を実行する
tell application "System Events"
	tell current location of network preferences
		set myVpnService to the service "VPNの表示名"
		if current configuration of myVpnService is not connected then
			connect myVpnService
		end if
	end tell
end tell

すぐにネットワークに繋がらない環境にいることが多いので、インターバルを設けてあげることにした。30秒くらいあれば十分かと思ってて、使いながらちょうど良い数字にしようと思う。

MacではWindowsのようにファイラー>右クリックから直接、空のテキストファイルができないので標準搭載されているスクリプトエディタ.appというアプリを使った。上記のスクリプトを保存する際、フォーマットはアプリケーションにしておく。

スクリプトはドキュメントフォルダに保存しておく。起動したら自動的にスクリプトが実行されるようにスタートアップ(Macもそういう?)に登録する。システム設定>一般>ログイン項目と拡張機能それっぽい項目があるので、プラスボタンを押してスクリプトを選択しておく。

スタンバイ状態にも対応させたいけど、Apple Scriptで書けるのかな…?

Tang Nano 20KでLチカをやってみる

とりあえず始めてみる

 FPGAってなにができるの?そもそも何から始めればいいの??と矢継ぎ早に生まれる疑問はそのままに、とりあえずLEDを点滅させるところから始めてみる。
Tang Nano20kは元々書き込まれた命令に従ってか、MacBookと接続するとシーケンシャルウィンカーのようにLEDを光らせている。

[tang nano 9k その1] 公式チュートリアルにLチカさせてもらった
https://qiita.com/haihuiliyuyuan/items/b6c89b5295411b5ed70d

Tang nano 9Kを使いたい(1)
https://zenn.dev/nihinihikun/articles/87066301959b48

Tang Nano 20K Blink led
https://wiki.sipeed.com/hardware/en/tang/tang-nano-20k/example/led.html

習うより慣れろの精神で、とりあえず参考ページの内容をそのままコピペしてみる。(haihuiliyuyuanさん、ありがとうございます!!)

module led(
    input sys_clk,          // clk input
    input sys_rst_n,        // reset input
    output reg [5:0] led    //6 LEDs Pin
);

reg [23:0] counter;

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1349_9999)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end
always @(posedge sys_clk or negedge sys_rst_n) begin // Toggle LED
    if (!sys_rst_n)
        led <= 6'b111110;
    else if (counter == 24'd1349_9999)       // 0.5s delay
        led[5:0] <= {led[4:0], led[5]};                         // ToggleLED
    else
        led <= led;
end

endmodule

Gowinの実行結果ウィンドウ(コンソール画面)には赤文字表記がずらずら現れる…。何これ??

ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_5_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_4_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_3_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_2_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_1_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 6 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'led_0_obuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 3 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'sys_rst_n_ibuf' : IO_TYPE = LVCMOS18 in the same bank
ERROR  (CT1136) : Bank 7 vccio(3.3) is locked by other constraint or embedded port, conflicting BANK_VCCIO set by 'sys_clk_ibuf' : IO_TYPE = LVCMOS18 in the same bank
Physical Constraint parsed completed with errors

元々基板上に乗ってるLEDの電圧は3.3Vのところ、自分で定義した電圧が1.8Vだったために生じたらしい。
要はデフォルトのままだったので修正が必要。

LEDのIO TypeをLVCMOS18からLVCMOS33へ変更してみる。今度はLED絡みのエラー表示が消えてくれた。
今度はうまくいきそう。
残すはsys_rst_nとsys_clkのみである。これらも同じように3.3Vへ変更してみる。
今度は今までと違うエラーメッセージが表示された。ピン間違えをしているみたいである。

ERROR  (PR2028) : The constrained location is useless in current package
ERROR  (PR2017) : 'sys_rst_n' cannot be placed according to constraint, for the location is a dedicated pin (SSPI)
Screenshot

なるほど。参照していたページではTang Nano 9Kをテーマとする記事だったので、そのまま踏襲したせいでエラーが生じていたみたい。
回路図中の割り当てピンを確認するとクロックの入力(sys_clk)は4番であった。
また基板上のタクトスイッチを使ってみようと思い、リセットの入力(sys_rst_n)は87番とした。
改めてPlace&Routeをダブルクリックすると、今度は赤いエラーが消えてくれた。

ボードに書き込んでみる

Double click Program Device to run the Programmer program、とあるので沿って進めてみる。

Screenshot

とりあえずPC側とTangNanoは繋がっているみたいだ。何も触らず、Saveボタンを押して先に進めてみる。
なお、Operationの項目については公式Wikiで下記のように書いてある。
よくわからないだけに、変に保存されて再起不能になるのだけは避けたいので、デフォルトのSRAM Program(電源切ったら書き込んだデータ消える)を選んでおく。

5.2. Burn to SRAM#
Normally this mode is used to verify biststream.

Because of its fast burning characteristics so the use of more, but of course the power will lose data, so if you want to power on the running program you can’t choose this mode.

Click the function box below Operation to open the device configuration interface, then select the SRAM Mode option in Access Mode to set to download to SRAM, and finally click the three dots box below to select our generated .fs bitstream file . Generally speaking, bitstream firmware file is in the impl -> pnr directory.
https://wiki.sipeed.com/hardware/en/tang/tang-nano-20k/example/led.html

書き込み実行すると、LEDの一つが点灯するようになった。
S2を長押ししてみると1つだけしか点灯していなかったLEDが続々と点灯するようになった。スイッチから指を離すと初期位置から点灯し始める。

おお…多分参考にしたプログラムは走ってぽいぞ?

Gowin EDA用のライセンスサーバ(サービス)を立てる

ことの始まり

FPGAを触りたくなったので開発環境のための準備(根っこの構築?)を行った。


勉強用のFPGA評価ボードはGowin社製Tang nano 20k。開発環境ソフトGowin EDAのライセンスはノードロック式かフローティング方式のいずれかで認証が都度必要になるという。自分の場合はどのOS環境および端末で読み書きするかはその時次第なので、認証はフローティングライセンス方式を選んでおくことにした。

我が家ではiKOOLCOREのR1Pro(の革を被ったR1)が常時起動していて、仮想基盤管理ソフトのproxmoxが走ってるので仮想マシンやLXCコンテナは自由に作成できる。そこでライセンス管理およびその発行は専用のLXCを一つ作ってその中で行うことにした。
OSはDebian 13、CPUコア1つ、メモリ50MB、ストレージは10GB程度の仕様とした。
ストレージは5GBもあれば十分かもしれない。シンプロビジョニングだから常時確保されるわけもないしでまあいいや。

ikoolcore R1

このページでは何かの拍子に環境をリセットしてしまったときのための備忘録として残すことにした。
ライセンスマネージャのインストールから始めて、システム起動後の自動化までを書き残す。


環境構築

ライセンスマネージャのダウンロード

ライセンスマネージャのダウンロードではcurlを使いたいところ。あいにくこのコンテナには最小限の機能しかない。そこでcurlの導入から始める。

# apt install curl -y

落としてきたライセンスマネージャは/opt配下に展開して使うことにする。なお、ダウンロードページはメンバー登録完了後でないとみれない。
curlでの-LO以下はプログラムの配布ページにあるURLを入力する。ダウンロードページからxxxx.gzのリンク先を得るはず。ちなみにフローティングライセンスの申請も同じタイミングで済ませておいた。発行依頼をかけてから2日程度で届いた。一悶着あったけど。

# cd /opt
# curl -LO "https://www.gowinsemi.com/~~~~.gz"

tar -xzfでもって、gzipで圧縮されたtarファイルの解凍。
-xはアーカイブの展開、-zはgzip圧縮の解凍、-fでファイル名指定。まとめた引数-xzfで解凍する。

# tar -xzf ~~~~~.gz
# ls
~~~~~.gz  Gowin_LicenseServer_V2.2_linux

解凍するとGowin_LicenseServer_V2.2_linuxが出てくる。長い。冗長なのでリネームしておく。

# mv Gowin_LicenseServer_V2.2_linux gowin-license

ディレクトリ構成はgowin-license配下にIDEとProgrammerがあって、ライセンスマネージャはbinの中にいる。license_serverがそれ。

/opt/gowin-license/bin# ls -l
total 58304
-rwxr-xr-x 1 626 1707      764 Oct 16  2025 gowin_E_xxxxx.lic
-rwxr-xr-x 1 626 1707  7070064 Oct 16  2025 libQt5Core.so.5
-rwxr-xr-x 1 626 1707  8775264 Oct 16  2025 libQt5Gui.so.5
-rwxr-xr-x 1 626 1707  2218784 Oct 16  2025 libQt5Network.so.5
-rwxr-xr-x 1 626 1707  8100680 Oct 16  2025 libQt5Widgets.so.5
-rwxr-xr-x 1 626 1707  2521224 Oct 16  2025 libcrypto.so.10
-rwxr-xr-x 1 626 1707   320720 Oct 16  2025 libgssapi_krb5.so.2
-rwxr-xr-x 1 626 1707 25048256 Oct 16  2025 libicudata.so.56
-rwxr-xr-x 1 626 1707  3368288 Oct 16  2025 libicui18n.so.56
-rwxr-xr-x 1 626 1707  2069136 Oct 16  2025 libicuuc.so.56
-rwxr-xr-x 1 626 1707   180496 Oct 16  2025 license_server

ライブラリ不足の解消

さっそくlicense_serverを起動してみるとエラーがでてきた。どうやら稼働に必要なライブラリが不足しているみたい。

/opt/gowin-license/bin# ./license_server --help
./license_server: error while loading shared libraries: libGL.so.1:cannot open shared object file:No such file ordirectory

不足するライブラリをlddで確認したところ、3つばかり足りない。パッケージ名指定で追加インストールする。

opt/gowin-license/bin# ldd ./license_server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        libGL.so.1 => not found
        libgthread-2.0.so.0 => not found
        libglib-2.0.so.0 => not found
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
opt/gowin-license/bin# apt install -y libgl1 libglib2.0-0

不足するライブラリはないか改めて確認しておく。
not foundと表示されなければ、とりあえずlicense_serverは起動できるようになる。

/opt/gowin-license/bin# ldd ./license_server | grep "not found"

ライセンスファイルをコンテナ内に移動する

申請していたライセンスファイルをRloginなどでホストからゲスト(LXC内)へ移動させる。
今回はホストroot直下へ転送したライセンスファイルをLXC(ホストID:104)へ移動するとともにgowin.licへリネームしておく。

# pct push 104 /root/gowin_xxxx_floating.lic /opt/gowin-license/bin/gowin.lic

ライセンスマネージャの起動可否を確認する

とりあえずLXC内のライセンスマネージャを起動してみる。うまくいけば下記の表示になる。

/opt/Gowin_LicenseServer_V2.2_linux/bin# ./license_server
yyyy-mm-dd hh:mm:ss.sss >
    Server started.
    Local Address: ipadress
    Local Host Name: hogehoge
    Listening Port: xxxx
    License Count: z

今回はここでトラブル発生。たとえば私の場合はERROR: License mode not match.なんてメッセージが出てきてしまった。
発行ライセンスにまさかの誤りがあったのである…っ!!
フローティングライセンスを申請したはずが、なぜかノードロックライセンスが届くという…。
あらためてライセンスを要求すると今度はきちんとしたものが届いた。なぜか数量が二桁に化けて(・∀・;)

ライセンスがうまく認識された後、ctrl+zキーで一時停止。プログラムは通信ポートを使いぱなしなのでプロセスをkillしておく。
無事に動作しているようなら次にコンテナ起動、ライセンスプログラムも起動するような設定を作る。

/opt/gowin-license/bin# jobs -l
[1]+  aaaa Stopped                 ./license_server
/opt/gowin-license/bin# kill -9 aaaa

systemdでライセンスマネージャをサービス化する

ライセンスマネージャはLXCの起動とともにも自動的に立ち上がるようにしておきたいので、systemdでサービス化する。サービス名はgowin-licenseとかにしておく

# vi /etc/systemd/system/gowin-license.service

作成したサービスの設定は下記のようにしてみた。

## gowin-license.serviceの中身
[Unit]
# サービスの説明
Description=Gowin License Server
# ネットワーク系のサービス初期化後、利用可能になったタイミングで起動させる
After=network.target

[Service]
# サービスが単一のプロセスを持つ単純なタスクなので
Type=simple
# ワーキングディレクトリの指定
WorkingDirectory=/opt/gowin-license/bin
# 起動する実行ファイル
ExecStart=/opt/gowin-license/license_server
# 異常終了したら、自動的に再起動かける
Restart=on-failure
# なお、異常終了してから5秒待って再起動します。
RestartSec=5

[Install]
# Linuxが通常のマルチユーザーモードで起動したらこのサービスも起動させる。
WantedBy=multi-user.target

ここまでの設定でLXC起動→systemd起動→multi-user.target到達→gowin-license.service起動となる。
あとはサービス実行のためデーモン設定のリロードとつくったばかりのサービスを有効化する。
ついでに状態も見ておく。

# systemctl daemon-reload
# systemctl enable gowin-license
# systemctl status gowin-license
* gowin-license.service
     Loaded: loaded (/etc/systemd/system/gowin-license.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-07-27 14:31:00 UTC; 273ms ago
 Invocation: xxxx
   Main PID: 1515 (license_server)
      Tasks: 1 (limit: 16707)
     Memory: 2M (peak: 2M)
        CPU: 16ms
     CGroup: /system.slice/gowin-license.service
             `-1515 /opt/gowin-license/bin/license_server
             

問題があるとすればタイムゾーンがUTCなのでJSTに変更しておくくらいか。

クライアント側でIDEの起動確認を行う。

動作チェックとしてwindowsとlinuxの入った端末それぞれで検証してみる。
IPアドレスと通信ポート番号(license_serverの起動時にListening Portの記述あり)

クライアントとサーバ間の通信は問題なさそう。