Debian化して使っていたnasne(CECH-ZNR2J)の内蔵HDDが突然壊れました😢まあ、nasneはずっと使ってなかったので、急にしばいたことで心筋梗塞を起こしたのかと。

新しいHDDに交換し、「純正の構造を持つHDD+その中にDebianのイメージ」という元の構成に戻すまでの手順をまとめます。
Debian化には SonyNasne-debian を使っています。nasneはチューナー専用にして、Synology NAS上のMirakurun/EPGStationから使う構成です。作業はWindows 11のWSL2(Ubuntu)で行いました。
注意:自己責任でお願いします。新しいHDDの中身はすべて消え、元のHDDの録画データも戻りません。また、事前にdevian化した際の成果物などを使ってます。何もない状態からの復旧手順ではないので、その点は承知おきくだしあ。
症状
- テレビが見られなくなり、Mirakurunが「チューナー起動」のまま進まない
- nasneにpingが通らない(
Destination Host Unreachable)。ルーターのDHCPの予約は正しい - 前面のランプが全部点滅し、電源を入れ直しても変わらない
リポジトリの資料によると、Debian直起動のカーネルは「録画領域(p3)のDebianを起動 → 失敗したらSonyの起動処理に戻る」という流れで、そこも失敗するとランプが点滅したまま止まります。両方とも失敗しているので、HDDそのものが読めないと判断しました。
原因の切り分け
HDDを取り出してUSB-SATA変換アダプタでPCにつなぐと、接続音は鳴るものの、ディスクの管理にもデバイスマネージャーにも出てきません。HDDは「ウーン」と回転しているので、回転はするがデータに応答しない故障(基板やファームウェア)と判断。以前同じアダプタで読めていたので、アダプタは正常なハズ。
方針
リポジトリには、空のHDDから純正の状態に戻す手順(docs/04_hdd_recovery_guide.md)があります。ただし、録画領域は古い形式のXFS(V4、CRCなし)で、最近のカーネルではマウントできません。WSL2でも Deprecated V4 format (crc=0) not supported by kernel と言われて弾かれます。
そこで、次のように分担しました。
- XFSの作成はWSLで行う(作るだけならマウント不要)
- XFSへの書き込みが必要な処理(純正の初期構造を作る
p3init)は、WSLでは空のフォルダに作っておき、Debianが起動した後にnasne自身に録画領域へコピーさせる(nasneのカーネルは古い形式のXFSを扱える) - 純正アプリが照合するHDDのシリアルは、nasne本体から読む(理由は後述)
準備するもの
- 2.5インチのSATA HDD(厚さ9.5mm以下)。今回は WD5000LPCX(500GB)を使用
- USB-SATA変換アダプタ
- 最初にDebian化したときのバックアップとビルド成果物(
build_nasne/など) - WSLに
parted(partprobeに必要)。シリアル確認用にsmartmontoolsも入れましたが、WSLでは使えませんでした
1. HDDをWSLに渡す
PowerShell(管理者)でディスクの番号を確認します。
Get-CimInstance -Query "SELECT * from Win32_DiskDrive" | Select-Object DeviceID, Model, Size
新しいHDDにWindowsの区画が作られていたため、wsl --mount が「ディスクは使用中」(0x8007006c)で失敗。Windows側でオフラインにしてから渡す必要があります。
Get-Disk -Number 5 | Format-List Number, FriendlyName, Size, IsOffline
Set-Disk -Number 5 -IsOffline $true
wsl --mount \\.\PHYSICALDRIVE5 --bare
2. 区画を作る
cd ~/SonyNasne-debian
git pull
lsblk -o NAME,SIZE,MODEL,SERIAL
sudo python3 scripts/nasne_hdd_rebuild.py mkdisk /dev/sdX --serial <lsblkで見えたシリアル>
sys1(256MB、ext3)・sys2(1GB、ext3)・user(残り、XFS)の3区画ができます。partprobe が無いとファイルシステムを作る前に止まるので、先に sudo apt install parted しておきます。
XFSが古い形式で作られたかは、マウントせずに確認できます。
sudo blkid /dev/sdX3
sudo xfs_db -r -c version /dev/sdX3 # V4 で、CRC が含まれていなければOK
3. 本体の個体IDを書かせる
sudo mount /dev/sdX1 /mnt/nasne_sys1 && findmnt /mnt/nasne_sys1
sudo python3 scripts/nasne_hdd_rebuild.py phase1 build_nasne/KRST3101_0260_SECURE.dlm /mnt/nasne_sys1
sync && sudo umount /mnt/nasne_sys1
HDDをnasneに入れて電源を入れ、2〜3分待ってから切ります。SPIにDebian用のカーネルが入っていても、録画領域にDebianが無いとSonyの起動処理に切り替わるので、そこで個体IDが書き込まれます。PCに戻して読み出します。
sudo mount /dev/sdX1 /mnt/nasne_sys1
sudo python3 scripts/nasne_hdd_rebuild.py read-id /mnt/nasne_sys1
# 個体ID: xxxxxxxxxxxxxxxx
4. 純正の構造を作る
ID=xxxxxxxxxxxxxxxx
sudo python3 scripts/nasne_hdd_rebuild.py final build_nasne/KRST3101_0260_SECURE.dlm /mnt/nasne_sys1 --chipid $ID
sudo python3 scripts/nasne_hdd_rebuild.py verify /mnt/nasne_sys1 # 結果: OK
cp /mnt/nasne_sys1/00550066.dlm backup/00550066.dlm.new-hdd
録画領域の初期構造は、空のフォルダに作ってtarにまとめておきます(マウントされていない場所への書き込みなので --allow-unmounted を付けます)。
mkdir ~/p3stage
sudo python3 scripts/nasne_hdd_rebuild.py --allow-unmounted p3init ~/p3stage --chipid $ID --device /dev/sdX
sudo tar --numeric-owner -cpf ~/p3init.tar -C ~/p3stage .
5. Debian入りの .dlm を作って入れる
最初の導入と同じです。--hdd-dlm には、新しいHDD用に作った純正の 00550066.dlm を渡します。
python3 scripts/nasne_setup.py build --download-official \
--hdd-dlm backup/00550066.dlm.new-hdd --ssh-pubkey ~/.ssh/nasne_rsa.pub \
--work build_nasne --telnet fail < /dev/null 2>&1 | tee build.log
sudo bash scripts/stage1/install_dlm.sh /mnt/nasne_sys1 build_nasne/custom_00550066.dlm --backup-dir ./backup_sys1_newhdd
sync && sudo umount /mnt/nasne_sys1
HDDをnasneに入れて電源を入れ、5分ほど待ちます。SPIのカーネルはすでに書き込み済みなので、ログには「SPIのKNLはすでに目的のカーネル。何もしない」と出て、書き換えは行われません。
6. HDDのシリアルを本体で読み、初期構造を入れる
純正アプリは、録画領域の登録情報(.hai)に書かれたシリアルと、本体から見たHDDのシリアルを照合します。ところが、USB変換アダプタ越しにWSLで見えたシリアルは、本体から見たものとまったく別の文字列でした。WSLでは smartctl もHDDに届きません。そこで、Debianが起動した後にnasne本体で読みます。
ssh root@<nasneのIP> 'hdparm -I /dev/sda | grep -E "Model Number|Serial Number"'
# Model Number: WDC WD5000LPCX-16VHAT2
# Serial Number: WD-WXxxxxxxxxxx
このシリアルで .hai を作り直し、nasneの録画領域(Debianからは /data)に展開します。
sudo python3 scripts/nasne_hai.py gen ~/p3stage --chipid $ID --vendor ATA --model "WDC WD5000LPCX-1" --serial "WD-WXxxxxxxxxxx"
sudo python3 scripts/nasne_hai.py show ~/p3stage/00000000.hai ~/p3stage/00000001.hai # 検査和 OK を確認
sudo tar --numeric-owner -cpf ~/p3init.tar -C ~/p3stage .
cat ~/p3init.tar | ssh root@<nasneのIP> 'tar --no-overwrite-dir -xpf - -C /data && sync && ls -la /data'
/data に 00000000.hai・00000001.hai・00000015・00000021・opt・setup・share と、Debianのイメージが入った .nasne-debian が並べば完成です。
(sshはnasneの古いsshdに合わせて、実際には -i ~/.ssh/nasne_rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa を付けています。)
7. 仕上げ
curl -s http://<nasneのIP>:8301/status で idle(Mirakurunが動いていれば busy)が返れば、Mirakurunからそのまま使えます。テレビ局の登録情報はNAS側に残っているので、チャンネル検出のやり直しはありません。
ハマりどころ
| 症状 | 原因 | 対処 |
|---|---|---|
wsl --mount が「ディスクは使用中」(0x8007006c) | WindowsがHDDの区画をドライブとして開いている | Set-Disk -Number N -IsOffline $true してから渡す |
mkdisk が partprobe で止まる | parted が入っていない | sudo apt install parted して再実行 |
| WSLでXFSがマウントできない | 最近のカーネルはXFS V4に非対応 | 書き込みはnasne自身に任せる |
mount が固まり、Ctrl+Cも効かない。dmesgに hv_storvsc ... host 0xc0000001 が大量に出る | USBを抜き差しした後、WSLが古い接続を使い続けている | wsl --shutdown → USBを挿し直す → wsl --mount し直す |
WSLを再起動したら /dev/sde1 does not exist | ディスクの名前が sdd に変わり、sde はWSL自身のディスクになっていた | 毎回 lsblk で名前を確認する(書き込み先を間違えると致命的) |
| WSLで見えるシリアルと、本体から見たシリアルが違う | USB変換アダプタがシリアルを崩して伝えている | 本体の hdparm -I で読んだ値で .hai を作る |
| 起動後5分たってもpingが通らない | LANケーブルの挿し忘れ | 挿してから、電源を入れ直す。待ってても再接続はされないので、起動時にLANが挿されている状態である必要がある。 |
まとめ
HDDが壊れても、SPIのバックアップと最初のビルド成果物が残っていれば、純正の構造ごと元に戻せました。ポイントは、「XFSへの書き込みはnasneにやらせる」「HDDのシリアルはnasne本体で読む」の2つです。次に壊れたときのために、新しい個体IDと、新しいHDD用の 00550066.dlm も控えておくといいかと。
参考
- SonyNasne-debian(GitHub)
- 同リポジトリの
docs/04_hdd_recovery_guide.md(HDDの復旧)、docs/13_full_setup_from_official_hdd.md(Debianの導入)、docs/15_p3_structure_and_hai.md(録画領域と.hai)
コメント