初めまして、下っ端エンジニア6年生のえとです。
今まで見る専だった私ですが、流石にめちゃくちゃ困ったので備忘録兼ねて書き残します。。
初なので読みづらかったらゴメンネ
結論
こまめにバックアップしよう(ガチ)
背景
長男の勉強のため購入したraspberry pi 5を、結局私のものにして遊び倒していました。
電気工作方面は学がないので、Linuxサーバーとして運用し、ついでにk8sなんか入れてコンテナでマイクラサーバー建てちゃお!みたいな遊び方をしていました。
pi5からはpcieが生えているので、nvme SSDが使えるわけですが、そんな高価なものは用意できるわけがなく、、
学生時代に使っていたUSB接続のSSD1TBを刺して使っていた、そんなある日のこと。
sshログインができない・・・
何事か!と焦った私は一旦電源ボタン長押しで再起動
なんだ、繋がるじゃないか。
マイクラサーバーのcpu/mem割り当て下げておけば大丈夫かな?
vimでマニフェスト書き換えて、次はapplyだな!
あれ?うんともすんとも言わない。CPU使用率が100%に張り付いてる。なんでだ?
もっかい再起動してみよう。
やっぱり繋がるじゃないか。
マイクラサーバーの監視ツール(お手製)が悪さしてるのかな、cronを止めてみよう。
...まただ、また100%だ。何が原因なんだ?
再起動して、CPUが何で100%になってるのか確認しよう。
iowaitが100%?iowait....iowait?
ここで私気がつきました。
SSDが壊れてる〜!?
ここで困った私は友人のA君に相談
ddrescueがあるよと教えてもらう
でもrescue先のディスクが無くね?1TBまるっとクローンできるディスクなんて、、、
あった(笑)
これまた押し入れで埃をかぶっていたnvme SSD 1TBを救出
nvmeを接続するための外付けの板を購入して、いざddrescueへ!
やったこと
- 救出に使うブート用USB作成
- 壊れたSSDとnvme SSD接続
- gdiskでnvmeのパーティション掃除
- ddrescue -c 2048 -d -D -f -n -R /dev/sdb /dev/nvme0n1p1 /root/rescue.log
- nvme内でパーティション分割
ざっくりこんな感じ。
この中で特に困ったことを書いていきます。
まず4のddrescue
ソースが壊れかけなSSDのせいか読み出しがマ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜ジで遅かった。
300KB/sの文字をよく見かけた。残り16日です!とかもよく見た。ふざけるなよと思いました。
結果、なぜか後半ありえない追い上げを見せて、2日で終わったけど、普通に気が気でなかった。
あとこれはコンソールからやればええやん、という話ではあるんだけど
SSH越しで作業してたから、nohupで途切れないように、と思ったら勝手に終わったりしてて普通にムカついた。
そして5のパーティション分割
これが本当にカス。chatgptは本当にありがとう。
ソースのsdb1がブート用part、sdb2がデータいろいろ入ってるext4partで、それがまとめてnvme0n1p1にクローンされてしまったため、マウントもできなけりゃ当然ブートもできない。
これをパーティション分けて扱うために、sdb1とsdb2の開始位置そのままでパーティション切り直した。
だけで終わればよかったんだけど、詳しくは分からんがnvme側で2048だけズレる事象が発生。マウントできない。
これに気づくのに結構かかった。
ここまでやって、grubのインストールがどうとかあーとかこーとかやって、無事起動までこぎつけた。
締め
自作ツールのソースとk8sマニフェストだけは救ってください、、神様、、、!
とバックアップを取らなかった自分を恨みながら情けない神頼みをしていた自分を振り返り、全てgithubのプライベートリポに預けた。真っ先にやった。
マジでバックアップはちゃんと取ろう。
iCloud2TB契約してるから今後はそこに丸っと置きたいな〜。でもcliアクセスめんどくさいっぽいんだよな〜。
関係ない
今回私がmd素人のため、本文は私が書き、mdのなんやかんやはchatgpt君にやってもらいました。いつもありがとう。