SSDを別のPCにつないだらLinuxが起動しなくなって弱った

iMac Late 2009でパーディション切りまくって,クワトロ?ブートくらいlinuxをインストールして使っておりました。先日,作業中に画面が突然変な感じになりまして。言葉では説明しづらいのですが,変な縞模様が走って,まったく作業できないわけではないのですが,もう普通には使えない状態におなりあそばしました。2009年の年末に購入したので,ちょうど10歳。CPUもハードディスクも壊れていないのに,一体型の悲哀,すべてゴミですね。

で,いろいろPCの更新をやってて,とあるマシンで使ってたSSDを新しく組み立てたPCに繋ぎ変えたら,Linuxが起動しなくて困ったというお話です。

(長いけど・・・)経緯

仕事にならないので,とりあえず,会議室にあったボロPCをデスクに移動。数年前にジャンパラでOSなし3000円で売られていた逸品!PC-MK32LBZCBなる型番号が記載されております。Core i3-550搭載で3000円。当時はなんとも思わなかったけど,先日ハードオフで中古PCみていたらCeleronで6~7000円で売られており,とても買う気にはなれなかった。けど,古いCore iシリーズより,新しいCeleronの方が早かったりするのかな?

iMacが27"だったので,ディスプレイサイズが19"に小さくなるし,2560x1440が1366x768と解像度も下がるし,複数ウィンドウを開いて作業するのが面倒なので,まず27" 2560x1440ディスプレイを24500程度で購入。価格.comで最安品を探したものですw

そのうち新しいPCを組み立てようと思いつつ,まずはボロPCのHDDをSSDに交換しようと思って,256GBのSSDを3180円でゲット。ものすごく値下がりしているのね。びっくりした。3.5インチベイへのマウンターが580円ってのが,SSDの価格に比べて気になる気になる。

ddコマンドでHDDのクローンSSDを作成。USBへの変換アダプタ接続で,2時間半ほどかかりました。こんなもんなのでしょうか。512Gのクローン作成に1時間半という記事も読みましたが,ddコマンドのオプション指定がよろしくなかったか?

そのままつないでも,パーティションのUUIDが違って起動しないのではないかと思ったので,UUIDをしらべてfstabを書き換え(たような気がする・・・。よく覚えていない。)て,grubを再インストールした。

HDDをSSDに繋ぎ変えて起動させたら,何事もなかったかのように爆速起動した。ディスプレイマネージャの起動まで15秒くらい,ログインからデスクトップの起動まで15秒くらい?半分くらいに短縮したような。Firefoxの立ち上げも初回立ち上げは20秒くらいかかっていたのが5秒くらいになった。いやぁ,すばらいい。

んで,新しいPCを組み立てることとして,ベンチマークあたりの価格が安い&グラフィックボード不要なRyzen5 2400Gをチョイス。それに合わせて価格.comで最安ショップでパーツをオーダー。メモリ16GB,SSD512GBで,ケース,電源と合わせて4万8000円くらい。

初PC組み立てで,苦労はしましたが,無事BIOSセットアップ画面が表示され,USBスティックにインストールしたArch Linuxも無事起動。

ただ,SSD512GBが注文品のため,いまだ到着せず。最悪2月28日の配送(あと24日・・・)。

で,じゃぁ,SSD届くまで,あのSSDつかってたらいいんじゃ?ということになり,SSDを組み立てたPCに載せました。(前置きながすぎw)

OSが起動しない!!&その理由

だいたい,もとのボロPCがレガシーBIOSだったので,SSDパーティションテーブルはMBRにしてあって,UEFIでは使えないと思っていたのですが,いまのところUEFIマザーボードでも広報互換性を考慮して,レガシーBIOSでもブートできるようになっているそうで。Compatibility Supported Module (CMS) という機能だそうで。マザーボードのマニュアルを読むとデフォルトで有効に設定してあるとのこと。じゃ,繋ぎ変えるだけでいいんじゃん!と思ったのがハマりポイントのもと。

電源を入れると,早速GRUBが起動しますが,OSを起動させようとすると,

ERROR: device 'UUID=f46a03aa-b1db-4ee2-9c74-d71150abc71a' not found. Skipping fsck.
mount: /new_root: can't find UUID=f46a03aa-b1db-4ee2-9c74-d71150abc71a
You are now being dropped into an emergency shell
(UUIDは実際のものとは違います)

うわー。UUIDはいじってないけど,書き換わっちゃった?と思って,GRUBコマンドラインからブートさせようとスマホGRUBから手動でOSを起動する方法を見ながらいろいろ試すのだけど,ぜんぜんだめ。起動ディスクを/dev/sda1で指定してもだめ,(hd0,msdos1)で指定してもだめ,なんでー?

USBスティックのArch Linuxを立ち上げて,ディスクのUUIDを調べるけども,UUIDは合っています。なんで not found なんだよー?

で,結局行き着いたのが,このArch BBS。

https://bbs.archlinux.org/viewtopic.php?id=250869

結論的には,

It's solved. Thanks to another post on this forum which I had not found at first (sorry for that).

I booted on my Arch USB
mounted every device like it should be in fstab with mount
arch-chroot to my mount point
then run

mkinitcpio -p linux

でうまく行ったと。USBスティックのArchを起動して,問題のディスクをマウントして,arch-chrootして,mkinitcpio -p linuxを実行したらうまく行ったと。

早速真似をしたら,ずばり起動しました。

Linuxというか,Arch Linuxのブートプロセスのことがよくわかっていないのだけど,mkinitcpioというのは,

mkinitcpioinitial ramdisk 環境を作成するために使われる Bash スクリプトです。mkinitcpio(8) より:

いや,ぜんぜんわからん。これを実行すると,カーネルがアップデートしたときの最後にpacmanが表示する表示がずらずら出てきますね。大事な工程らしい。

ともかくディスクを別なマシンに繋ぎ変えたときは,mkinitcpio -p linuxのおまじないを忘れないようにしないと。