ラズパイはMicro-SDから起動するのが一般的ですが、外付けSSDから起動することも可能です。今回は外付けSSDからUbuntu Serverを起動できるようにします。
※2021年9月29日時点の情報です
必要なもの
- Raspberry pi 4 8GB
- Micro-SD(ラズパイの初回起動に使用します)
- 外付けSSD
- 有線LANケーブル(ラズパイをインターネットに繋げるのに使います)
- Micro-HDMI変換アダプター(ラズパイをモニターに繋げるのに使います)
- WindowsまたはMac(OSのダウンロードに使います)
手順
- WindowsまたはMacに公式サイトからRaspberry pi OS with DesktopとbelenaEtcherをダウンロードします。
- belenaEtcherを使い、Micro-SDにRaspberry pi OSを書き込みます。
- 有線LANとMicro-SDをRaspberry piに挿入して起動します。外付けSSDはまだ繋げません。
- Raspberry pi OSの初期設定が完了したらターミナルを開き、Raspberry pi OSを更新し、Imagerをインストールします。
sudo apt update && sudo apt upgrade -y
sudo apt install rpi-imager -y
- Raspberry pi OSを起動したまま外付けSSDを繋げます。画面左上のラズパイのマークをクリックし、「アクセサリ」→「Imager」をクリックしてImagerを開きます。ImagerでUbuntu Serverを外付けSSDに書き込みます。
- 外付けSSDを一度外し、再度繋げるとデスクトップに「system-boot」と「writable」というパーティションが表示されます。
- ターミナルを開き、Raspberry pi OSから必要なファイルを外付けSSDにコピーします。
cp /boot/*.dat /media/pi/system-boot/
cp /boot/*.elf /media/pi/system-boot/
- vmlinuxというファイルを作成します。
cd /media/pi/system-boot
zcat vmlinuz > vmlinux
- 「system-boot」パーティション内の
config.txt
をダブルクリックして開き、[pi4]
セクションに以下を追記します。
max_framebuffers=2
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel
- 今の段階で
apt upgrade
をするとvmlinuzとvmlinuxのバージョンが合わなくなるため、「system-boot」パーティションにバージョンを合わせるスクリプトを作成します。
sudo nano /media/pi/system-boot/auto_decompress_kernel
スクリプトの中身は以下にします。
#!/bin/bash -e
#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux
#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
exit 0
else echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
fi
fi
#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak
if [ ! $? == 0 ]; then
echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
exit 1
else
echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi
#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH".............."
zcat $CKPATH > $DKPATH
if [ ! $? == 0 ]; then
echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
exit 1
else
echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi
#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5
if [ ! $? == 0 ]; then
echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
else echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi
#Exit
exit 0
スクリプトを保存したら権限を変更します。
sudo chmod +x /media/pi/system-boot/auto_decompress_kernel
- 「writable」パーティションにもスクリプトを作成します。
sudo nano /media/pi/writable/etc/apt/apt.conf.d/999_decompress_rpi_kernel
スクリプトの中身は以下にします。
DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };
スクリプトを保存したら権限を変更します。
sudo chmod +x /media/pi/writable/etc/apt/apt.conf.d/999_decompress_rpi_kernel
- ターミナルから起動ドライブを外付けSSDに変更するための設定を開きます。
sudo raspi-config
Advanced Options
からBoot Order
をUSB Boot
に変更し、ラズパイをシャットダウンします。
- Micro-SDを取り外し、ストレージは外付けSSDだけ接続されている状態で電源を入れます。初回ログイン時はユーザー名
ubuntu
パスワードubuntu
を使用します。