初めに
今まで240GBのSSDをだいたい半分に分けてWindows10とUbuntu18.04のデュアルブートをしていたのですが、いよいよ容量が足りなくなってきたので増設をすることにしました。 新しいSSDも半分に分けてそれぞれ拡張するというのはなんか微妙なので、新しいSSDにUbuntuを移動させてそれぞれのパーティションを広げることにしました。 既に1つのディスクにデュアルブートしている状態から2つのディスクにOSを分ける記事は探しても良いものが見つからなかったため、メモとして残しておきます。
[注意] あまり賢くないやり方になります、自分は最終的にBoot Repairを使用しているためBIOSの起動オプションやGRUBの選択肢が無駄に増えたりしました。これから作業する人は、一度最後まで目を通して目的にあった適切な方法を行って下さい。誰か間違えや修正点等発見したら教えてくれると嬉しいです。
新しいSSD
PCのM.2スロットが1つ空いていたので、1TBのP1 CT1000P1SSD8JPをTSUKUMO本店の29周年セールで税込み8778円だったのを購入しました。TSUKUMOのセールは初めてだったのですが、別に昼頃に行っても問題なく買えてよかったです。
2年前は1TBのSSD等SATAでも3万以上していてとても選択肢には入らないものだったのですが、最近はとても安くてHDD無しの構成ができるのも当然ですね。
環境&要求
before
after
要求
やり方
今回は新しいSSDにUbuntuを移動させ、GRUB2を新たにインストールします。UbuntuがUbuntu自身を操作すると何かしら問題があるらしいので、UbuntuのライブUSBを使います。(ブータブルUSBの方が適切かもしれない)
SSD接続
電源を切って、M.2スロットなりSATAなりでSSDを接続します。
LiveUSB作成と起動
UbuntuのLiveUSBを作ります。WindowsからであればUbuntuのLive USBをつくる、UbuntuからであればUbuntuのLive USBメモリスティックをつくる。等適当に参考にして作って下さい。
私はUbuntu18.04の日本語Remixから作成しました。
作成できたら、BIOSからUEFIでUSBを選択してインストールしないで起動します。BIOS起動ではこの後の操作が出来ないので注意して下さい。セキュアブート等に関する設定は、既にデュアルブート出来ているならば終わっているはずなので割愛します。(デュアルモニターにしていたせいで起動後暗闇が表示され続けていて、何度も作り直したりしました。理由はわかりませんがモニターは一枚だけつなぎましょう。)
Gpartedでパーティション操作
UbuntuのGParted (パーティショニングツール)を使って、新しいSSDの初め100MB程のEFIパーティションを作ります。ファイルシステムはFAT32
、フラグはboot, esp
です。
次に、EFIパーティションの後ろに古いSSDからUbuntuのパーティションをコピーします。
ubuntu領域へchroot
Gpartedで新しいSSDへコピーされたUbuntuのパーティションにchrootします。ここでは/dev/nvme0n1p2
です。
$ sudo -s # mkdir /chroot # mount /dev/nvme0n1p2 /chroot # mount --bind /dev /chroot/dev # mount --bind /dev/pts /chroot/dev/pts # mount --bind /proc /chroot/proc # mount --bind /sys /chroot/sys # mount --bind /run /chroot/run # chroot /chroot
新しく確保したEFIパーティションもマウントします。ここでは/dev/nvme0n1p1
です。
# mount /dev/nvme0n1p1 /boot/efi
GRUB2のインストール
EFIパーティションにブートプログラムのGRUB2をインストールします。
# grub-install --target=x86_64-efi --efi-directory=/boot/efi/ --bootloader-id=grub
UEFIで起動していないと、ここでインストールができません。操作が前後していて必要か分からないですが、grubが入っていない等と表示された場合はsudo apt install grub-efi
をして下さい。
UUIDの確認とfstab更新
パーティション等には、個別のUUIDという識別子が存在しますが、Gpartedでコピーしたパーティションは全く同じUUIDを持ちます。そこで、新しいGNOME端末を開いて
$ sudo tune2fs -U time /dev/nvme0n1p2
で、新しいSSDのUbuntuのパーティションのUUIDを更新します。次の操作で必要なので、古いEFI, Ubuntuのパーティションである/dev/nvme1n1p2
, /dev/nvme1n1p6
と新しいEFI, Ubuntuのパーティションである/dev/nvme0n1p1
, /dev/nvme0n1p2
のUUIDをそれぞれ確認します。(sudoをつけないとtune2fsで更新したUUIDが反映サれなかったりするのでつけましょう)
$ sudo blkid /dev/nvme1n1p2 $ sudo blkid /dev/nvme1n1p6 $ sudo blkid /dev/nvme0n1p1 $ sudo blkid /dev/nvme0n1p2
chrootしていた端末に戻って/etc/fstab
を編集します。
# vim /etc/fstab
古いEFI, UbuntuのパーティションのUUIDがあるはずなので、それぞれ新しい方に書き換えます。
# ubdate-grub # grep -w menuentry /boot/grub/grub.cfg
で、新しくインストールしたGRUBが起動した時に表示される選択肢一覧が表示されます。新しいUUIDのUbuntuが含まれていることを確認して下さい。(この時点では、Windowsと新旧両方のUUIDが異なるUbuntuが表示されるはずです。)
起動
再起動してBIOSから新しいSSD上のUbuntuをUEFIで起動する選択肢かgrubと書かれた選択肢が出ているはずなので、どちらかを選択して起動します。ここで、先程確認したWindowsと新旧両方のUbuntuの選択肢が表示されているはずです。されていた場合は、そのままGpartedなりで古いUbuntuを消して、WindowsとUbuntuの領域を広げれば作業終了です。
私は、この時点で何故か古いGRUBが起動し選択肢に新しいUbuntuは存在しませんでした。
問題
USBのUbuntuや古いUbuntuから色々と確認した所、新しいSSDを選択しても何故か古いSSD上のGRUBが起動してしまっている状態になりました。
古いSSDを物理的に外してから新しいSSDを選択した所、黒い画面に
GNU GRUB version 2.02 Minimal BASH-like line editing is supported. For the first word,TAB lists possible command completions. Anywhere else TAB lists possible device or file completions grub>
と表示されてしまったため、GRUBが正しくインストールされていない?ようです。
対処
色々と試してみましたが、最終的には古いSSDを抜いた状態でLiveUSBのUbuntuからboot-repairを用いて修復しました。
$ sudo add-apt-repository ppa:yannubuntu/boot-repair $ sudo apt update $ sudo apt install -y boot-repair $ sudo boot-repair
この結果、BIOSから起動する選択肢やらGRUBの選択肢に余計なものが増えましたが、普段は別に気にならないハズなのでそこまで問題はないでしょう...
削除と拡張
無事起動できるようになったら、旧Ubuntuを削除してWindowsと新Ubuntuのパーティションを適当に広げます。このままでは、起動しない旧Ubuntuの選択肢が残るので
$ grub-update
をしておきましょう。grep -w menuentry /boot/grub/grub.cfg
でも確認できますが、旧Ubuntuの選択肢が無くなるはずです。
考察のようなもの
今回の現象の原因
EFIパーティションが複数あると言うのは通常の状態ではないため、恐らく古いSSDのEFIパーティションが存在する状態で、新しいGRUBをインストールしたため正しく新しいSSDのEFIパーティションにインストールされなかったと思われる。これは、新しいSSDの方が起動優先順位が高ければ問題は生じないと思われるが、2つのM.2スロットの起動順位はなぜか頻繁に入れ替わるため、偶然古いSSDの方が先に見られてしまったと考えられる。
物理的に抜き差しするのは最小限に抑えたいが、やはりUbuntuをコピーして古いSSDを抜いた後にGRUBをインストールするべきなのかもしれない。
別の対処法
今回は、新しいSSDにEFIパーティションを用意してそこに入れたGRUBから起動をしようとしていたが、既にある古いSSDのEFIパーティションのGRUBから起動する方法もあると思う。
新しいSSDにUbuntuをコピーしてUUIDを変更した後、古いSSDのubuntuとEFIパーティションにマウントしてgrub-updateをかければ新しいUbuntuも選択肢に入るので、その後古いUbuntuを消せば良い。
ただし、この方法はGRUBを完全にEFIパーティションにインストールしていない方法(通常はUbuntuにも何かファイルが置かれていたはず)では、古いUbuntuを消した時に動作しなくなる可能性があるため、実行しなかった。実際どうなのかは良く分からない。
Windowsを移す場合
今回は、Ubuntuを新しいSSDへ移行したがWindowsの場合は良く分からないパーティションが存在するため、一度全て新しいSSDにコピーした上で新しいSSDから古いSSDへUbuntuを移すという形にしたほうが安全な気がする。Windows、分からない。
感想
スプラのプレイ動画を保存するようになってから、急に容量が足りなくなったため、SSDを増設したついでにOSも分けようと思って実行したが思ったよりも大変だった。Ubuntuの起動やGRUBの仕組みについてある程度理解していると困ったときにも対処しやすいはずですが、私はよく分かっていなかったのでかなり苦労しました。
デュアルブートをしていて、更に分けようとする人は余りいないと思いますが、参考になれば嬉しいです。もっと賢い方法があると思うので誰か教えて下さい。