はじめに
サポートが切れた古いIntel MacBook Air(2015)を、Linux学習用のサーバーとして再利用しようと思い立ちました。そのためにまず必要なのが OSのインストールUSB です。
balenaEtcherやRufusといったGUIツールを使う方法もありますが、今回は コマンドラインだけ で作ってみました。理由は単純で、インフラの世界では結局これが一番速くて確実だからです。ダウンロード・整合性チェック・ディスク書き込みまで、すべて数行のコマンドで完結します。
この記事では、その手順を「なぜそうするのか」の解説つきでまとめます。
対象読者
- 古いPCにLinuxを入れて学習環境を作りたい人
- macOSでブートUSBを作りたい人
-
ddを使ってみたいが、間違えて別のディスクを消すのが怖い人
環境
| 項目 | 値 |
|---|---|
| 作業マシン | macOS 15.5(Apple Silicon / arm64) |
| 書き込むOS | Ubuntu Server 24.04.4 LTS(amd64) |
| インストール先 | MacBook Air 2015(Intel / amd64) |
| USBメモリ | 16GB(FAT32フォーマット) |
ポイント:ISOのアーキテクチャは「インストールする先」に合わせる
作業マシンはApple Silicon(arm64)ですが、ダウンロードするのは amd64 です。なぜなら、OSを動かすのはインストール先の2015年MacBook Air(Intel = amd64)だから。焼く側のMacのCPUは関係ありません。ddはバイトをコピーするだけなので、ここを取り違えると「起動しないUSB」ができあがります。
全体の流れ
- ISOをダウンロードする(
curl) - SHA256で整合性を検証する(
shasum) - 書き込み先のUSBを特定する(
diskutil list) - USBをアンマウントする(
diskutil unmountDisk) -
ddで書き込む - 書き込み結果を確認する(
diskutil list) - 安全に取り外す(
diskutil eject)
手順
1. ISOをダウンロードする
公式の配布サーバーから取得します。最新の点リリース(執筆時点では 24.04.4)を指定します。
cd ~/Downloads
curl -L --fail -o ubuntu-24.04.4-live-server-amd64.iso \
https://releases.ubuntu.com/24.04/ubuntu-24.04.4-live-server-amd64.iso
-
-L:リダイレクトに追従する -
--fail:HTTPエラー時に失敗扱いで止める(壊れたファイルを掴まないため)
ファイルサイズは約3.2GBです。
2. SHA256で整合性を検証する
ダウンロードしたファイルが「壊れていないか」「本物か」を確認します。ここを飛ばす人が多いですが、ブートUSBが起動しない原因の多くはダウンロード破損 なので、地味に重要な工程です。
まず公式の期待値を取得します。
curl -fsSL https://releases.ubuntu.com/24.04/SHA256SUMS -o SHA256SUMS
grep 'live-server-amd64.iso' SHA256SUMS
次に、自分の手元のファイルのハッシュを計算します。
shasum -a 256 ubuntu-24.04.4-live-server-amd64.iso
出力された64文字の文字列が、公式の期待値と 完全に一致 すれば、ファイルは無傷かつ本物です。1文字でも違えばダウンロードし直します。
補足:より厳密に「本物」を確かめるには
上の照合は「SHA256SUMSに書かれた値と一致するか」までの確認です。SHA256SUMSファイル自体が本物かどうかは、配布元のGPG署名(SHA256SUMS.gpg)で検証して初めて完全になります。本記事ではハッシュ照合までにとどめますが、「ハッシュ一致=完全に本物」と言い切れるわけではない、という点だけ覚えておくと安全です(GPG署名検証は別記事で扱います)。
3. 書き込み先のUSBを特定する(最重要)
ここが事故りやすい工程です。dd は指定したディスクを問答無用で上書きするので、書き込み先を間違えると内蔵ディスクのデータが消えます。慎重に特定します。
より確実にするため、まず USBを挿す前 に一度ディスク一覧を撮っておきます。
diskutil list
次にUSBを挿してから、もう一度同じコマンドを実行します。
diskutil list
出力例(USBを挿した後・抜粋):
/dev/disk0 (internal, physical):
0: GUID_partition_scheme *500.3 GB disk0 ← 内蔵SSD(触らない)
...
/dev/disk4 (external, physical):
0: FDisk_partition_scheme *15.5 GB disk4 ← これがUSB
1: Windows_FAT_32 NO NAME 15.5 GB disk4s1
特定のコツは3つです。
-
external, physicalと書かれているもの を探す(内蔵はinternal) - 容量が、自分の買ったUSBと一致するか 確認する(16GBのUSBは約15.5GBと表示される)
- 内蔵SSD(この例では500GB)とは桁が違うことを確認する
より安全な特定方法
上のように「挿す前」と「挿した後」でdiskutil listを2回実行し、増えたデバイスを差分で特定する と、取り違えがほぼ起きません。「挿す前後でどれが増えたか」を見るのが一番確実です。
⚠️ デバイス番号は環境ごとに違います。 この記事の
disk4をそのままコピーせず、必ず自分の環境でdiskutil listを実行して、自分のUSBの番号を確認してください。
4. USBをアンマウントする
dd で書き込む前に、OSがそのディスクを使っている状態を解除します。
diskutil unmountDisk /dev/disk4
Unmount of all volumes on disk4 was successful と出ればOKです。これはデータを消す操作ではありません。
5. dd で書き込む
いよいよ本番です。
sudo dd if=$HOME/Downloads/ubuntu-24.04.4-live-server-amd64.iso \
of=/dev/rdisk4 bs=4m status=progress
各オプションの意味:
-
if=:入力ファイル(書き込むISO) -
of=/dev/rdisk4:出力先。disk4ではなくrdisk4(raw device) を指定するのがコツ。バッファを介さず直接書き込むため、disk4よりはるかに高速です -
bs=4m:ブロックサイズ。macOSのddは小文字m -
status=progress:進捗を表示する。これがないとddは完了まで沈黙し、画面が固まったように見えて不安になります
実行中は、status=progress によって転送量がリアルタイムで表示されます(数値は増えていきます)。status=progress を付け忘れた場合でも、macOS(BSD系)では実行中に Ctrl + T を押すと、その瞬間の進捗が一行だけ表示されます。
完了すると、最終的に次のような表示が出てプロンプトに戻ります(macOS / BSD系の dd の出力順)。
811+1 records in
811+1 records out
3405469696 bytes transferred in 370.093583 secs (9201645 bytes/sec)
records in と records out の数が一致していれば、dd が読んだ量と書いた量が一致した ことの確認になります。ただしこれは「USB側に正しく届いた・展開された」ことまでは保証しません。それは次の手順で確認します。
なお、書き込みにかかる時間はUSBの規格や個体差で大きく変わります。今回の環境(USBメモリ)では約6分・約9.2MB/sでしたが、USB2.0だと20分以上、高速なUSB3.0の良いメモリなら2〜3分で終わることもあります。
6. 書き込み結果を確認する
本当にISOが書き込まれたかを確認します。
diskutil list /dev/disk4
書き込み前は Windows_FAT_32 NO NAME というパーティションが1つだけでしたが、書き込み後は EFIブート用などを含む複数のパーティション構成に変わっている はずです。レイアウトが変わっていれば、ISOがUSBに正しく展開された証拠です。
補足:書き込み直後にダイアログが出ても正常
書き込み後、macOSが「このディスクは読み取れません」というダイアログを出すことがあります。これはmacOSがLinux用のパーティションを読めないだけで、失敗ではありません。「無視」を押してOKです。
7. 安全に取り外す
diskutil eject /dev/disk4
Disk /dev/disk4 ejected と出れば、インストールUSBの完成 です。
ハマりポイント・Tips
-
of=の指定ミスは致命的。内蔵ディスクを指定すると一発でデータが飛びます。書き込み前に番号を指差し確認しましょう。 -
ddは進捗が出ないので、status=progressを付けると安心。付け忘れた場合、macOSでは実行中にCtrl + Tを押すと一瞬だけ進捗が見えます。 -
sudoのパスワードは入力しても画面に表示されません。打てていないように見えますが入力されています。 -
rdiskとdiskで速度が段違い。rdiskを使うと書き込みが数倍速くなります。 - 書き込み後の「読み取れません」ダイアログは正常。macOSがLinuxパーティションを読めないだけなので「無視」でOK。
- ISOのアーキテクチャは「インストール先」基準。作業マシンがApple Siliconでも、Intel機に入れるなら amd64 を選びます。
まとめ
GUIツールを使わなくても、curl・shasum・diskutil・dd の組み合わせで、ダウンロードから検証、ディスク書き込み、確認まで一通り完結できました。
-
curlでダウンロードし、--failで壊れたファイルを掴まない -
shasum -a 256で整合性を必ず検証する(より厳密にはGPG署名検証もある) -
diskutil listで書き込み先を サイズと種類で 慎重に特定する(挿す前後の差分で確認するとさらに安全) -
ddはrdisk+bs=4m+status=progressで速く・見やすく - 書き込み後は
diskutil listでパーティション構成の変化を確認する
「黒い画面でOSを焼く」という作業は最初こそ身構えますが、やってみると一行ずつ意味が分かって、むしろGUIより透明性が高いと感じました。これらは実際のサーバー構築でも使う基本操作なので、インフラ学習の良い第一歩になります。
次にやること
完成したUSBで、古いMacBook AirにUbuntu Serverをインストールし、SSH接続できる自宅Linux環境を作っていきます(別記事で続けます)。