いろいろとやってみて、わかってきたので、「2018年12月版 USBメモリ起動のLinux(Ubuntu18.04)をWindows10マシンで作成する方法」ということでまとめました。
USBメモリから起動するLinuxを普段使いしようと考えている人はあまりいないようなので、この手の情報は少ないようです。まぁ、最近だとVirtualBoxがありますしね。Windows10も使いたい人はデュアルブートができればいいので、ブートローダーがGRUBになっても気にしないでしょうし。Linuxオンリーの人は気にせずインストールで良いわけですし。
とはいえ、個人的には「WindowsマシンのディスクはさわらずにLinuxを起動したかったらUSBメモリからできるようにしておく」という環境はそこそこ魅力的です。USB3とメモリ8Gの環境があれば、結構キビキビと動作しますし。CPUの性能が低いと厳しいかもしれませんから、その場合は軽量Linuxを使うのが良いはずです。
ということで、USBメモリ起動のLinux(Ubuntu18.04)をWindows10マシンで作成する方法について説明をします。
あと、最初に、もしWindows10マシンのSSD、HDDのケーブルをはずすのがそれほど難しくないということなら、はずしてインストールをするのが楽です。UEFIを使う場合、どこかにESP(EFI system partition)があると、Ubuntuインストーラは、そこへGRUBを追加してしまうようなので。
目次
準備
準備としては、マシンのブートセレクタを起動できるようにする手順を確認しておきます。たとえば手元のASUS X202Eだと、「Windows10の電源を切る(シャットダウン)のときに、シフトキーを押しっぱなしにしてから、電源を入れるときにESCキーを押しっぱなしにする」という手順になります。こうすると、BIOSが提供するブートセレクタの画面になります。マシンによって違うのでマニュアルを読んで確認しましょう。
ブートセレクタが提供されていないマシンでは、Secure Bootをオフにしたり、USB起動を優先にする設定をしないとUSBメモリからOSを起動できない場合があります。その場合も、BIOS画面の表示方法についてマニュアルを読んで設定をしてください。たとえば手元のASUS X202Eだと起動時にF2を押しっぱなしにするとかです。F12だったかもしれません。普段、ブートセレクタからSetupを選んで入っているので、このあたりはあいまいです。
USBメモリは3つ用意しておきます。
- A: USB起動のUbuntuインストーラ(8GBで十分なはず)
- B: USBメモリ起動Linuxとして使うもの(32GB欲しいところですが16GBでも使えます)
- C: ESPのファイルバックアップ用(WindowsマシンとLinuxで読めるフォーマットが良いのでFAT32、exFAT、vfatあたり)
USBポートは最低2つ必要で3つ以上あるPCだと作業が楽です。どのUSBメモリを作業対象としているかは注意しながらの作業が必要になります。
Ubuntuインストーラは、「Ubuntuの入手 | Ubuntu Japanese Team」などから、ubuntu-ja-18.04.1-desktop-amd64.iso を入手して、「balena Etcher」を使ってUSBメモリ(A)へ書き込みます。
SYSTEMバックアップ
USBメモリ(A)に書き込んだインストーラを使ってUbuntuをインストールします。最近はLiveモードのUbuntuをUSB起動して、そこからマシンのディスクへインストールするのが楽です。なお、起動時はUEFIで起動する点に注意します。CSMで起動するとEFIシステムパーティションを操作できないからです。
インストーラのGRUB画面が表示されたら「Try …」が選択された状態で「Enter」としてUbuntuを起動します。
UbuntuのGUI画面が表示されたら、Ctrl+Alt+tを入力して端末アプリを起動します。左下の四角マークが並んでいるところをマウスでクリックして、表示される画面でマウスをスクロールさせるとターミナルのアイコンが表示されるので、それをクリックして起動しても良いです。
次にディスクユーティリティを起動します。左下の四角マークが並んでいるところをマウスでクリックして、表示される画面でマウスをスクロールさせるとディスクのアイコンが表示されるので、それをクリックして起動します。
/dev/sdaのディスクを表示すると、Windows10マシンのディスクのパーティション情報が表示されます。SYSTEMと書いてあるパーティションをマウスでクリックして選択して、プレイマーク(右を差している三角形)をクリックしてマウントします。こうすると、Ubuntuインストーラからこのディスクが操作できるようになります。
USBメモリ(C)をマシンへ挿すと自動で認識されます。ここでは「/media/ubuntu/A899-B3CF」で使えるようになったとします。USBメモリのUUIDでマウント位置が決まるので、A899-B3CFは使っているUSBメモリによって変わります。自分が使っているものと置き換えて読んでください。
ターミナルで、dfコマンドをうつと、現在のディスクについて確認ができます。
$ df -k Filesystem 1K-blocks Used Available Use% Mounted on udev 1940252 0 1940252 0% /dev tmpfs 392292 1704 390588 1% /run /dev/sdb 1826048 1826048 0 100% /cdrom /dev/loop0 1738624 1738624 0 100% /rofs /cow 1961444 279548 1681896 15% / tmpfs 1961444 0 1961444 0% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 1961444 0 1961444 0% /sys/fs/cgroup tmpfs 1961444 0 1961444 0% /tmp tmpfs 392288 52 392236 1% /run/user/999 /dev/sdc1 30017184 11856 30005328 1% /media/ubuntu/A899-B3CF /dev/loop1 88704 88704 0 100% /snap/core/4486 /dev/sda1 303104 58928 244176 20% /media/ubuntu/SYSTEM
/media/ubuntu/SYSTEMは/dev/sda1(マシンのディスク)と対応、/media/ubuntu/A899-B3CFは/dev/sdc1(USBメモリ(C))と対応していることがわかります。
/media/ubuntu/SYSTEMをバックアップします。
$ sudo cp -r /media/ubuntu/SYSTEM /media/ubuntu/A899-B3CF $ ls /media/ubuntu/A899-B3CF/SYSTEM/ BOOT EFI
マウントを解除します。
$ sudo umount /media/ubuntu/A899-B3CF
ディスクユーティリティで、/dev/sdcのディスクを選択して、/dev/sdc1のパーティションを選択し、ストップマーク(黒い四角)のボタンをクリックすることでマウント解除することもできます。
マウントが解除できたら、USBメモリ(C)をマシンから抜きます。
インストール
SYSTEMバックアップができたので、インストールを始めます。USBメモリ(B)をマシンへ挿します。デバイス名を確認するためにターミナルでdfコマンドを実行します。
$ df -k | grep ubuntu /dev/sdc1 30017184 11856 30005328 1% /media/ubuntu/64BC-3CEA
USBメモリ(B)が/dev/sdc1に対応していて、/media/ubuntu/64BC-3CEAにマウントされていることがわかります。
マウントされているとUbuntuをインストールできないので解除します。
$ sudo umount /media/ubuntu/64BC-3CEA
次にUbuntuインストーラのデスクトップに表示されているインストーラのアイコンをクリックしてウィザードを起動します。
- 最初の画面では「日本語」を選択し「続ける」をクリック
- キーボードレイアウトでは左側も右側も「日本語」を選択し「続ける」をクリック(英語キーボードなどを使っている場合は、変わります)
- 無線についてはつなげても良いですし、「Wi-Fiネットワークに今すぐには接続しない」でも良いです。ここでは「Wi-Fiネットワークに今すぐには接続しない」として「続ける」をクリック
- アップデートとほかのソフトウェアでは、「通常のインストール」として「続ける」
- インストールの種類では、「それ以外」を選択して「続ける」(「UbuntuをWindows Boot Managerとは別にインストール」はWindows10マシンへWindows10とLinuxをデュアルブートでインストールしたいときに選択するもののようです)
ディスクを操作する画面になるので注意しましょう。/dev/sdaのパーティションをさわってしまうとWindows10に影響がでます。最初に/dev/sdcの空き領域を用意します。今回は/dev/sdc1があるので、これを選択して、下の「-」ボタンをクリックして削除しました。
次に、/dev/sdcの空き領域から、EFI SYSTEM用、Linuxルート用、スワップ用の領域を作成します。なお、スワップ領域は後でオフにできます。メモリが少なく非力なマシンで起動したときにあった方がいいかもしれないと考えて用意しています。USBメモリへの書き込みが頻繁だとUSBメモリが壊れやすくなるはずなので、必要なければ作らないという選択肢もあります。
- 「/dev/sdcの空き領域」を選択して「+」とし、サイズは512MB、新しいパーティションのタイプは「EFI(FAT-12/16/32)のSYSYTEM」として「OK」
- 「空き領域」を選択して「+」とし、新しいパーティションのタイプは「基本パーティション」、サイズはスワップ領域分を引いた分(32GBのUSBメモリを使っていて4GBのスワップ領域をとるなら26500MBとか)、利用方法は「ext4ジャーナリングファイルシステム」、マウントポイントは「/」として「OK」
- 「空き領域」を選択して「+」とし、新しいパーティションのタイプは「基本パーティション」、新しいパーティションの場所は「この領域の始点」、利用方法は「スワップ領域」として「OK」
「ブートローダーをインストールするデバイス」は「/dev/sdc1」として「インストール」します。画面がおさまらなくて、「ブートローダーをインストールするデバイス」が見えない場合は外付けディスプレイをつける必要があります。なお、デスクトップの右上にあるメニューから表示できる設定画面で「デバイス」-「ディスプレイ」を表示して、ディスプレイの向きを「縦向き」として表示することもできします。
「インストール」をクリックすると、パーティションテーブルを変更するメッセージが表示されます。/dev/sdc以外の変更がないことを確認して「OK」として進めます。あとは、指示にしたがいます。
インストール時の指定
インストール時の指定については、最初にタイムゾーンの指定が必要です。Asia/Tokyoとなるようにして続けます。
ユーザーの登録については、例えば次のようにします。
- あなたの名前:ubuntu
- コンピュータの名前:ubuntu-1804
- ユーザー名:ubuntu
- パスワード:推測されにくい文字列
- 「ログイン時にパスワードを要求する」を選択
入力したら「続ける」とします。あとは、ファイルコピーが完了して、再起動できる状態になるのを待ちます。
「インストールが完了しました」画面が表示されたら、「試用を続ける」をクリックします。
手元で確認したときは、UbuntuをインストールしたUSBメモリ(B)をマシンから抜くタイミングは、次に説明をする「ブートローダーの復旧」をしてパソコンの電源を切ってからにしましたが、おそらく、ここで抜いても大丈夫なはずです。
ブートローダーの復旧
ディスクユーティリティを起動して、/dev/sdaの/dev/sda1(SYSTEM)をマウントします。
下記コマンドを実行すると、EFI/Boot/bootx64.efi が更新されていることがわかります。また、EFI/ubuntuが追加されていることもわかります。
$ ls -l /media/ubuntu/SYSTEM/EFI/Boot $ ls -l /media/ubuntu/SYSTEM/EFI/ubuntu
バックアップのUSBメモリ(C)をマシンへ挿します。/media/ubuntu/A899-B3CF といったディレクトリーへマウントされたとします。念の為、下記のようにしてEFIのバックアップをします。(始める前にとったバックアップは/media/ubuntu/A899-B3CF/SYSTEMにある点に注意してください)
$ sudo mkdir /media/ubuntu/A899-B3CF/ubuntu1804_efi/ $ sudo cp -r /media/ubuntu/SYSTEM/EFI /media/ubuntu/A899-B3CF/ubuntu1804_efi/
次に、作業前にバックアップしてあった/media/ubuntu/A899-B3CF/SYSTEM/EFI/Boot/bootx64.efiを/media/ubuntu/SYSTEM/EFI/Bootへ戻します。また、/dev/sda1にある/media/ubuntu/SYSTEM/EFI/ubuntuは使わないので削除します。他にもバックアップから戻した方が良いファイルがあったら戻しておきましょう。
$ sudo cp /media/ubuntu/A899-B3CF/SYSTEM/EFI/Boot/bootx64.efi /media/ubuntu/SYSTEM/EFI/Boot/ $ sudo rm -fr /media/ubuntu/SYSTEM/EFI/ubuntu
作業が終わったら、インストーラを終了します。USBメモリ(C)をマシンから抜きます。UbuntuをインストールしたUSBメモリ(B)も抜いていないなら、抜きます。
USBメモリのUbuntu用ESPを修復
PCの電源を入れるとWindows10が起動することを確認します。このままではUSBメモリ(B)にインストールしたUbuntu用のEFIシステムパーティションに何も入っていないので、修復をします。
Windows10を終了して、インストーラのUSBメモリ(A)をPCから起動します。このときUEFIで起動して修復作業をする点に注意します。CSMで起動するとEFIシステムパーティションを操作できません。
インストーラーが起動したら、USBメモリ(B)をPCへ挿します。ここでは /dev/sdcと認識されたとします。ESP(EFIシステムパーティション)は/dev/sdc1、Linuxのルートパーティションは/dev/sdc2だとします。
次に、ターミナルを起動してUSBメモリ起動のUbuntu18.04の環境にchrootします。ブートローダーを再構築するためです。ディスク指定を間違えないように注意して作業をしてください。
$ sudo -s # mkdir /chroot # mount /dev/sdc2 /chroot # for t in dev dev/pts proc sys run; do mount --bind /${t} /chroot/${t}; done # chroot /chroot
chrootしたらUSBメモリ(B)のEFIシステムパーティションをマウントします。
# mount /dev/sdc1 /boot/efi
最初にfstabを更新しておきます。/etc/fstabに記述してある/boot/efiにマウントされるパーティションのUUIDについて確認するとわかりますが、/dev/sda1のようにWindows10マシンのディスクを参照しているはずです。これを、/dev/sdc1を参照するように書き換えます。blkidコマンドでUUIDは調べることができます。
# blkid /dev/sdc1
次に、/etc/fstabを編集します。他のマウントしているデバイスについても確認して変更が必要だったらしておきましょう。
# vi /etc/fstab
準備ができたら、USBメモリ(B)のEFIシステムパーティション(この時点で/boot/efiにマウントされているはず)にブートプログラムであるgrubをインストールします。
# grub-install --efi-directory=/boot/efi # update-grub
このコマンドを実行することで、/boot/efi/EFI/ubuntu/shimx64.efiといったファイルができます。
あとは、Ubuntuインストーラーを終了して、PCの電源を切ります。UbuntuインストーラーのUSBは抜きます。
それから、USBメモリ(B)を使ってPCの起動をすると、Ubuntu18.04が使えるようになります。