NeetEch

UbuntuのLiveUSBをコマンドで作成する

こんにちは,ぎいとです.
数年前のPCにCentOS7をインストールして放置していたのですが,Ubuntu 20.04 LTS がリリースされたということでLiveUSBを作成してみます.Windowsだったらrufusを使えとか色々出てくるんですが,Linuxだとそこまで詳しい記事が出てこない印象でした.インストールは他の記事がとても分かりやすいと思いますのでそちらをご覧ください.

必要なもの

基本的にはGUI環境がなくてもできるようにしましたが,環境によってはできない場合もありますのでご容赦ください.
データの損壊などあらゆる不利益の責任は取り兼ねます.この記事はほぼ初心者である筆者が,調べた内容を噛み砕いてまとめた記事となっています.あらかじめバックアップを取るなどのリスク管理を推奨します

LiveUSB作成までの流れと時間がない人のためのまとめ

人によってはサーバ用をインストールするかもしれないのと入力にミスが起こりづらいよう変数を用意しています.また,root権限が必要な場合もあるのでsudoなどが求められる場合もありますが,ここでは省略しています.適宜ご対応ください.

#  いちいち入力するのも面倒なので変数を用意
$ dlfile=ubuntu-20.04-desktop-amd64.iso

#  isoイメージをダウンロード
$ wget "https://releases.ubuntu.com/20.04/$dlfile"

#  ダウンロードしたファイルが壊れていないか確認
$ wget "https://releases.ubuntu.com/20.04/SHA256SUMS"
$ grep $dlfile SHA256SUMS | sha256sum -c -
ubuntu-20.04-desktop-amd64.iso: OK

#  USBを挿入し接続を確認 挿入デバイスが/dev/sdbだった場合
$ lsblk
...

#  MOUNTPOINTが空でない場合はアンマウント
$ umount /dev/sdb1

#  ddコマンドでUSBに書き込む
$ dd if=$dlfile of=/dev/sdb bs=4096 conv=sync,noerror

isoイメージファイルのダウンロード

まずこちらからインストールするisoイメージを決めます.
isoイメージはテキトーに言うとCDやDVDの中身を抽出したものです.仮想化技術により,PCの中にPCを再現したのと似た感じのイメージでしょうか.PCの中にファイルとしてCD,DVDを再現したのがisoイメージですね.
最新安定版 20.04 でいいでしょう.どうしても 18.04 などが必要なら適宜読み換えてください.
なお日本語環境のために日本語Remixイメージをインストールするのもいいですが,2020/5/4現在リリースされていないので保留です.日本語対応については,方法があるみたいですが未確認.Google先生がついていれば英語でもなんとかなります.


isoファイルを決めたらダウンロードしましょう.GUI環境であればブラウザからダウンロードしてもOKです.サイズが大きいので時間がかかりますが気長に待ちます.

#  いちいち入力するのも面倒なので変数を用意
#  もしサーバ用をインストールするなら dlfile=ubuntu-20.04-live-server-amd64.iso としてください
$ dlfile=ubuntu-20.04-desktop-amd64.iso

#  isoイメージをダウンロード
$ wget "https://releases.ubuntu.com/20.04/$dlfile"

#  ダウンロードしたファイルが壊れていないか確認
$ wget "https://releases.ubuntu.com/20.04/SHA256SUMS"
$ grep $dlfile SHA256SUMS | sha256sum -c -
ubuntu-20.04-desktop-amd64.iso: OK

wgetは引数のURLからファイルをダウンロードしてくれます.ここでは,dlfileで指定した名前のisoイメージとSHA256SUMSというファイルをダウンロードしています.

sha256sumコマンドは,特別な計算を行いファイルのハッシュ値を計算するコマンドです.ダウンロードされたisoイメージが,なんらかの理由で変化している場合には,このハッシュ値が全く別の値に変わります.
ハッシュ値が同じ値であれば,元のファイルの中身も全く同じと考えていいです.これによって公開されているisoイメージとダウンロードしたisoイメージの中身が全く同じであることを確認しているんですね.

LiveUSBの作成

USBを差し込み,OSが認識しているかどうかを確認します.

#  USBを挿入し接続を確認
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0    55M  1 loop /snap/core18/1705
loop1    7:1    0    55M  1 loop /snap/core18/1754
loop2    7:2    0 240.8M  1 loop /snap/gnome-3-34-1804/24
loop3    7:3    0 242.4M  1 loop /snap/gnome-3-34-1804/27
loop4    7:4    0  62.1M  1 loop /snap/gtk-common-themes/1506
loop5    7:5    0  49.8M  1 loop /snap/snap-store/433
loop6    7:6    0  27.1M  1 loop /snap/snapd/7264
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   512M  0 part 
├─sda2   8:2    0   513M  0 part /boot/efi
├─sda3   8:3    0     1K  0 part 
└─sda5   8:5    0 464.8G  0 part /
sdb      8:16   1   7.4G  0 disk 
└─sdb1   8:17   1   7.4G  0 part /media/gilito/5B90-767C
sr0     11:0    1  1024M  0 rom  

sdaは内臓のHDDです.Linuxではお馴染み(?)の/(ルート)パーティションが設定されていることがわかります.これはシステム上非常に重要なので,できるだけ触らない.今回LiveUSBとして作成するUSBはsdbとして検出されています.

挿入したUSBがどこに割り当てられているかはよく確認してください.見分ける方法はいくつかあると思いますが,USBを挿入する前と後でlsblkを呼び出し,挿入後に増えたsdXを探せばいいと思います.筆者はX=bでしたが,違う可能性もあります後の操作でUSB内のデータが消えますのでよく確認してください.
環境によってマウントされていたりされていなかったりするようです.sdb1にMOUNTPOINTが設定されているため,今回はマウントされています.不具合の原因になる可能性があるのでアンマウントしておきましょう.

# sdbのパーティション1をアンマウント
$ umount /dev/sdb1

もう一度lsblkコマンドを実行して,sdb全てがアンマウントされていることを確認しましょう.sdb{,?}にMOUNTPOINTが存在しなければ大丈夫なはずです.

# /dev/sdb 全てマウントされていないことを確認
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0    55M  1 loop /snap/core18/1705
loop1    7:1    0    55M  1 loop /snap/core18/1754
loop2    7:2    0 240.8M  1 loop /snap/gnome-3-34-1804/24
loop3    7:3    0 242.4M  1 loop /snap/gnome-3-34-1804/27
loop4    7:4    0  62.1M  1 loop /snap/gtk-common-themes/1506
loop5    7:5    0  49.8M  1 loop /snap/snap-store/433
loop6    7:6    0  27.1M  1 loop /snap/snapd/7264
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   512M  0 part 
├─sda2   8:2    0   513M  0 part /boot/efi
├─sda3   8:3    0     1K  0 part 
└─sda5   8:5    0 464.8G  0 part /
sdb      8:16   1   7.4G  0 disk 
└─sdb1   8:17   1   7.4G  0 part 
sr0     11:0    1  1024M  0 rom  

ここまでくれば後は簡単です.次のコマンドでUSBをLiveUSBにしてしまいます.

# isoイメージをUSBに丸々コピー
$ dd if=$dlfile of=/dev/sdb bs=4096 conv=sync,noerror

ddコマンドはデバイスの中身をそのままデバイスにコピーするコマンドです.ifがコピー元,ofがコピー先ですね.バックアップの作成にも使えるコマンドです.

先ほど軽く触れましたが,isoイメージは仮想的なDVDだと思ってください.それをUSBにコピーすればいいわけですが,通常のコピー(copyコマンドなど)では「仮想的なDVD」をUSBの中に作成するだけで,USBが「仮想的なDVD」を保存しているだけです.USB自体はそれまでと変わらずただのUSBと言えます.

ddコマンドはデバイスの中身を別デバイスに丸々コピーするコマンドです.こちらはファイルを作成するのではなく,中身を完全に一致させる印象でしょうか.こちらはUSBが「仮想的なDVD」を保存しているのではなく,USBの中身が「仮想的なDVD」の中身と全く同じになります.USBの肉体にisoイメージの精神を与える感じです.

数分かかりますがこれにてLiveUSBの作成は終了です.お疲れ様でした.

まとめというか感想

思ったより少ないコマンドで作成できました.ddコマンドが主役ですかね.Windowsではrufusというアプリケーションを使えとささやかれているようですが,Linuxはコマンドだけでいいみたいです.

このLiveUSBがあればUbuntuのインストールには困りません.インストールしなくても使うことができるくらいです.
PCのOSがトんでしまった時や,友人のPCを激変させて驚かせたいとき,Ubuntuを使いたくてどうしようもないときなど大活躍間違いなしです.筆者はUbuntuをインストールしたのでLiveUSBは机の隅で来たるべき時を静かに待っています

できるだけなにをしているのか,どうすればいいのかわかりやすくまとめたつもりですがどうでしょうね.ここわからんとかなんか気になるとかのコメントお待ちしています.間違いがございましたらご指摘もお願いしたいです.

今日のちなみに

サーバ用ならGUIほど容量喰わないしUSBで持っておいてもいいかなぁとか思ってサーバ用もやってみたんです.ところがサーバ用はインストールして使用することしかできず,(おそらく)内臓ディスク以外にインストールができない.
まぁつまりUSBで起動することができないっぽい.できるとすればインストールしてddコマンド…?試した方はコメントください.僕は諦めました.

Ubuntuをインストールして最初にしたことに続きます〜

Follow me!