🐧

USBストレージに Ubuntu環境を作ってWindowsとデュアルブートする

2023/01/14に公開

なぜUSBストレージにインストールするのか

ハードウェア(主にGPU)のネイティブ性能を使い切りたい
ストレージを独立させてブートローダーを内蔵SSDに入れたくない

解説動画

https://youtu.be/ShTqmnF4V2U

やりたいこと

  • 1台のPCでWindows/Linux環境を切り替えて使いたい
  • 内臓SSDにWindows、USBストレージにLinuxを入れる
  • Linuxを使わないときにはUSBストレージを抜いておきたい

準備するもの

  • USBメモリ(16GB~)
  • USBストレージ(SSDがおすすめ/256GBで数千円くらい)
  • インターネット接続

(普通の)インストール手順

  1. インストール用USBメモリを作成する
  2. USBメモリからインストーラを起動
  3. USBストレージにインストール
  4. 起動チェック

(うまくいけば)これでOK!
今回はこの後に待ち受ける、うまくいかなかったときの話をします

インストール用Live USBをつくる

Ubuntu ISOファイルをダウンロード

https://releases.ubuntu.com/focal/

  • 基本的に「LTS」を選ぶ
  • 同じ年に出たばかりのものは避ける(2022.12.25時点だと22.04は避け20.04を使う)
  • 動作させたいプロダクトで検証済みのバージョンを選ぶ(一番大事)

Banana etcherをダウンロード

https://www.balena.io/etcher/

  • ISOファイルをインストール用USBメモリに書き込む
  • まちがってUSBストレージの方にインストールしないように気をつける

USBメモリからインストーラを起動

  • PCの起動順をUSBメモリから起動するように変更
  • BIOS設定画面でSecure Bootをオフにする
    →それぞれのPCの説明書を参照

「日本語」を選択して「Ubuntuをインストール」

キーボード選択

WiFi設定

「最小インストール」を選択し、2つチェックを入れる

「それ以外」を選択する

次のウィンドウ下部のブートローダをインストールするデバイスのプルダウンを開くと、ストレージの型番やメーカー、容量が出てくるので、インストールするストレージを確認する。
今回インストールするのは/dev/sda

/dev/sdaの中にある/dev/sda1などを【-】をクリックして削除

先頭にEFIパーティションを確保

残りはext4でフォーマットして/にマウント

最終的にこうなるとよい。
/dev/sda1がEFI
/dev/sda2がその他

'/dev/sda'にブートローダがインストールされる……ように表示している

これは再起動後のブートデバイス選択画面だが、以下の様に表示されて、別デバイス(USB1とHDD1)にインストールされていればここで終了。

ブートローダの再設定

まずはブートデバイス選択画面で、'ubuntu'を選択する

Ubuntu起動後、ログインして左下の●が9個並んだアイコンをクリック

上部の検索窓に'terminal'と入力して端末アプリを開く

そして、以下のコマンドを1行ずつ入力し、それぞれ末尾でEnterキーを押します。

sudo -s
mkdir /chroot
mount /dev/sda2 /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

mount /dev/sda1 /boot/efi
grub-install --efi-directory=/boot/efi
update-grub

fstabの編集

blkid /dev/sda1

ここでUUID="0xxxxxxxxxxxxx"ダブルクオーテーションの中だけを選択してコピー

nano /etc/fstab

で、/dev/sda1の横にあるUUID=の後ろにペースト

ctrl押しながらxYで保存して終了

sudo reboot

再起動して、次はWindowsで設定します

Windowsで起動エントリの削除

Windows起動後、キーボードのWindowsキーを押してスタートメニューを開く

cmdと入力し、管理者として実行をクリック

確認ウィンドウが出るのでOKをクリック

以下を入力してEnter

bcdedit /enum firmware

リストの中からubuntuの項目を探し、identifierの右にある{~}の部分を括弧まで全部コピー、メモ帳などにいったんメモる

次のコマンドの{~}のところに貼り付けてEnter

bcdedit /delete {}

これでubuntuの起動エントリが消えました。

EFIパーティションの中のUbuntuディレクトリを削除

引き続きコマンドプロンプトで、

diskpart

と打つと、diskpart >と表示されるので、続けて

list disk

出てきた中から「Windowsがインストールされているディスク」の番号を見る

次のコマンドの最後の番号の部分に上記の番号を入れる

sel disk 番号

次に、ボリュームを選びます

list vol

Fs(ファイルシステム)が「FAT32」、Infoが「システム」になっているパーティションの番号を見る。

次のコマンドの番号のところにその番号を入れる

sel vol 番号
assign letter = Z
exit

ここで、DiskPartを終了しています...と表示されて普通のコマンドプロンプトに戻ります

EFIパーティションにZドライブを割り当てたので、

Z:
cd EFI
dir

Z:\EFIの内部が表示される。ubuntuがあることを確認し、

rmdir /s ubuntu

で削除。ubuntu、よろしいですか(Y/N)?と聞かれるのでYを入力

これでGrubブートローダーを削除できました。

次に、スタートメニューから再起動を選んでリセットしてみると、

このようになり、別デバイス(USB1とHDD1)にUbuntuとWindowsがインストールされていればOK。おつかれさまでした!

Windowsの時間が9時間ずれる

以下のコマンドをUbuntuのターミナルで実行してください。

sudo timedatectl set-local-rtc true

参考にした記事

https://zenn.dev/karaage0703/articles/0ca67e19aa772e

https://guminote.sakura.ne.jp/archives/316

https://itlogs.net/ubuntu-grub-delete-uefi-bios/

Discussion