2020年9月に入って、Raspberry Pi 4用の新しい安定版ブートローダーがリリースされたということで。
容量1TBのUSB外付けHDDから、64ビット版Ubuntu 20.04.1 LTSを起動してみました。
以前のRaspberry Pi 3の頃は、5秒の制限があったためSSDのみ起動可能でしたが。Raspberry Pi 4の場合は、SSDだけではなくHDDからも起動できるのですね。ただし、ブートローダーの更新やコンフィグの作成等、必要な準備をしっかり行う必要があるようです。
手順を記録しておこうと思います。
Raspbianによるブートローダー更新
ブートローダーの更新はこちらの情報から
起動用/bootの設定はこちらの情報を参考にさせて頂きました。
特に起動用boot設定は、抜けや間違いがあると正常に起動しないため、正しい情報源の選択が重要なようです。
microSDカードにRaspberry Pi OS(Lite)をインストール
起動用のHDDの作成など、基本的にすべてRaspberry Piで行おうと思いますが。最初の最初、ブートローダーの更新に使用するRaspberry Pi OSは、Windows PCで作成したほうが楽かもしれません。
ブートローダーの更新は、Raspberry Pi OSを使用します。ここではLiteを選択しましたが、無印でも問題無いようです。(私はLiteのみ試しました)
microSDカードを作成後、SSHでログインできるように設定します。手順はこちらの記事になります。
最新版への更新もお忘れなく。
sudo apt update
sudo apt upgrade
ブートローダーのバージョン確認
Raspberry Pi OS Liteにログイン後、eepromのバージョンを確認します。
sudo rpi-eeprom-update
vcgencmd bootloader_config
vcgencmd bootloader_version
手持ちのPi 4は、2020年4月16日 17:11:26版のeepromのようです。
USB起動に対応していないせいか、ブートローダーのコンフィグ設定は3行で、少しさみしい感じです。
ブートローダー更新
apt upgrade実行後、/lib/firmware/raspberrypi/bootloader/ディレクトリに、新しいeepromのバイナリがダウンロードされているようです。
たとえばbetaディレクトリには、2020-07-16や2020-07-31等のファイルがあるようです。
安定版であるstableディレクトリ内の、2020-09-03が、USB起動が可能な新しいブートローダーかと思います。こちらを使ってeepromを更新します。
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-09-03.bin
# コピペ用
# sudo vi /etc/default/rpi-eeprom-update
# FIRMWARE_RELEASE_STATUS="stable"
# sudo rpi-eeprom-update -a
sudo rpi-eeprom-update -aで最新版に更新されるようですが、うまく行かなかったため、-fオプションで直接binファイルを指定してみました。
ブートローダー更新確認
更新後、再起動してバージョンを確認してみます。
sudo reboot
# 再起動後
vcgencmd bootloader_config
vcgencmd bootloader_version
このような感じで、release版のSep 3 2020つまり2020-09-03版に更新されました。ブートローダーのコンフィグも色々とパラメータが増えています。
BOOT_ORDERの値で、どのメディアから起動するかを指定できるようです。資料を拝見すると、2020-06-15.bin以降から、0x4でUSBブートに対応しているそうです。0xf41は、SDとUSBストレージから連続(繰り返し)起動する設定になります。
もしBOOT_ORDERの値が異なる場合、sudo raspi-configから値を変更できるようです。
以上でブートローダーの更新が完了しました。
起動用HDD作成
次はUSBストレージにOSイメージを書き込んで、新しいブートローダーから起動できるように設定したいと思います。
USBストレージの接続
Raspberry Pi 4にUSBストレージを取り付けます。宜しければこのあたりの記事を御覧ください。
容量512GBのSSDと、1TBの2.5インチHDDでUSBブートを試しましたが、どちらも問題なく起動しました。
Raspberry Pi 3時代の5秒縛りは無いようですので、USB接続のSATAのHDDも問題なく起動するようです。ただしUAS(USB Attached SCSI)はダメとの記述がありました。
※20.12.29追記: Type-C対応のUSB HDDケースは注意が必要です。「UASP」と記述がありませんか?
私は実際に試していませんが、UAS Protocol採用のためRaspberry Pi 4のUSB起動に対応していない可能性が高いです。Windows PCで使用する場合は全く問題ありません。64ビット版Ubuntu 20.04.1 LTSダウンロード
以前作成した、とある実験環境を強化したいという目的から。
接続したUSBストレージに、64ビット版のUbuntu 20.04.1 LTSを書き込んで起動したいと思います。
こちらのページからPi 4用の64ビットサーバ版起動イメージをダウンロードしました。
ぜんぶRaspberry Piで済ませたかったので、このような感じでダウンロードしました。
curl https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz -O ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz
OSイメージをUSBストレージへ書き込み
ダウンロードしたimg.xzファイルを、/dev/sdaに書き込みます。
xzcat ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz | sudo dd bs=4M of=/dev/sda
Raspberry Pi最新ファームウェアのダウンロード
USB起動のため、最新のRaspberry Piファームウェア(*.elfと*.datファイル)が必要のようです。
こちらからダウンロードさせて頂きたいのですが。手動では手間がかかりそうですし、cloneでは不要なファイルがコピーされてしまいます。
・・・
ここはsubversionのインタフェースを使用させて頂き、boot以下をちぇけr
sudo apt install -y subversion
svn checkout https://github.com/raspberrypi/firmware/trunk/boot
カーネルイメージの展開
通常のブートはgrub等のブートローダーが、圧縮されたカーネルイメージ(vmlinuz)を展開後、initプロセス用のram fsをメモリーにロードするようですが(半分寝言
eepromのブートローダーは、grubを経由せず、直接カーネルイメージとramfsをメモリーにロードする感じなのですね(たぶん
そのため、カーネルイメージを予め展開しておく必要があるようです。
sudo su -
mount /dev/sda1 /media
cd /media/
dd if=vmlinuz bs=1 | zcat > vmlinux
スーパーユーザー変更後、/mediaにUSBストレージのブート領域をマウント、vmlinuzをzcatで展開しました。
config.txtの編集
/boot/config.txtを編集します。[pi4]エントリを1行コメント化して、4行書き足す感じです。
vi config.txt
[pi4]
#kernel=uboot_rpi_4.bin
max_framebuffers=2
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel
14c14
< #kernel=uboot_rpi_4.bin
---
> kernel=uboot_rpi_4.bin
16,19d15
< dtoverlay=vc4-fkms-v3d
< boot_delay
< kernel=vmlinux
< initramfs initrd.img followkernel
新しいファームウェアのコピー
最後に先程ダウンロードしたファームウェアをUSBストレージにコピーします。
cp ~pi/boot/*.dat ~pi/boot/*.elf /media
ls -al /media/*.dat /media/*.elf
以上でUSBストレージから起動する準備が整いました。
いちどRaspberry Piの電源を落としましょう。
umount /media
sync
halt
さあ、microSDカードを取り外しましょう。
さようなら!microSDカードさん!!(BGM蛍の光
USBストレージによる起動の確認
いよいよHDD(SSD)から起動しますが。
確認のため、シリアルコンソールを接続しました。
Ubuntu 20.04.1は、既定でシリアルコンソールが有効になっています。このため、USBストレージによる起動状況を知るため、シリアルコンソールが有効です。LEDランプはずっと点滅するため、正確な情報を知ることができません。
たとえば新しいファームウェアのコピーを忘れたりして、上述のブートローダーの設定の手順を間違うと、シリアルコンソールに何も出力されない状態になります。(LEDは点滅し続けます
USBストレージから正しく起動すると、次のようにコンソール出力されるようです。ブートローダーが直接vmlinuxカーネルをロードして、ramfsからinitプロセスを生成シテイルノカト(systemdかもさあ、正しく起動できましたでしょうか?
Ubuntu 20.04.1 LTSの初期ログインユーザ/パスワードは、ubuntu/ubuntuのようです。
古いパスワード(ubuntu)と、新しいパスワードを2回入力して、ログインできましたでしょうか?
dfコマンドで確認すると、ルート(/)領域は自動拡張されているようです。1TBのHDDを使用しましたが、918Gの容量が確保されています。
あとはswapファイルを作成すれば、実用になりそうな感じです。そのあたりの調整は、後で記事に書き足そうと思います。
USBストレージから起動しなくなったら
※20.9.15追記:Ubuntuの自動更新で、USBストレージの/boot領域のファイルが更新されると起動しなくなる場合があるようです。
その場合、microSDカードから起動して、vmlinuxファイルの再作成と、*.datと*.elfファイルを/boot領域に再度コピーすれば起動するようになりました。
追々、アップデートでUSBストレージ起動に対応したカーネルやファームウェアが配布されるようになるかもしれませんが、それまでは注意が必要のようです。
Ubuntu 20.04.1 LTSの場合
apt upgradeでカーネルが更新された場合、次回起動時、うまくUSBストレージから起動しない可能性があります。
このため、再起動前に、カーネルの展開と新しいファームウェアのコピーを行っておきます。
cd ~
sudo apt install -y subversion
svn checkout https://github.com/raspberrypi/firmware/trunk/boot
sudo su -
cd /boot/firmware
dd if=vmlinuz bs=1 | zcat > vmlinux
cp ~ubuntu/boot/*.dat ~ubuntu/boot/*.elf /boot/firmware
ああ、とうとう、いつ壊れるかわからないmicroSDカードの束縛から開放される日が来たのですね。
SSDだけではなく大容量のHDDを使用可能。
さらに64ビットのOSの起動が可能になりました。
いよいよ、Raspberry Piがサーバとして本格的に使用できる日が来たのですね(大げさ
ぜひともお試し下さいませ!!!
ちなみにUbuntu 20.04.1 LTSホスト名等の初期設定はこちらの記事になります。
コメント
初心者的質問ですみません。
上記でブートできますが、USBキーボードがOFFになってしまいます。
何か設定があるのでしょうか?
sbinさんはじめまして。コメント頂きありがとうございます。
わたしの自宅の環境ですが、
1.シリアルコンソールで接続
2.別のPCからSSH(TeraTerm)で接続
していますが、そういえばHDMIとUSBキーボードを接続して試していませんでした。
USBキーボードを全く認識していないような状態でしょうか?
コマンドで、キーボードが表示されるか確認してみてください。
認識されていない場合はハードウェア上の問題、認識されていればソフトウェア上の設定の問題かと思います。
お使いのRaspberry Pi 4のメモリー容量はいくつでしょうか?手元にメモリー4GBモデルはありますので、同じようでしたらあとでHDMIとUSBキーボードを接続して試してみようと思います。
返信ありがとうございます。
raspiは初めてなので何が正しいのかわかりません。
シリアルコンソールですか?探してみます。
USBポートに電源が来ていない感じです。
sd で動かしている場合は、動いていますが、SSDでブートさせると
boot のメッセージが流れて ubuntu login: がでますので、動いてはいます。
何処かでの処理で USB の電源が disable にされている感じです。
あ、ごめんなさい。
8GBのメモリーです。
HDMIとUSBキーボードを刺して作業しました。
8GBモデルですね、ふむふむふむ。
何かUSBの電源が不安定な印象を受けます。
Raspiに、直接SSDを接続している感じでしょうか?
その場合、推測で恐縮ですが、もしかするとUSB 3.0 ハブ セルフパワー(ACアダプタ付き)を間に入れると動作が安定するかもしれません。
https://denor.jp/raspberry-pi-4%e3%81%abssd%e3%82%92%e6%8e%a5%e7%b6%9a%e3%81%97%e3%81%a6%e3%83%99%e3%83%b3%e3%83%81%e3%83%9e%e3%83%bc%e3%82%af%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%a6%e3%81%bf%e3%81%be%e3%81%97
lsusb -v
というコマンドで、USBに接続した機器に供給している電源(MaxPower)を表示できるそうです。
lsusb -v |grep -e 'MaxPower' -e 'Bus [0-9]'
これでどのデバイスに何mA供給できるか抜粋できます。
こちらの記事に、USB端子の電力供給量を上げるコマンドがありますが、今のUbuntuでは不要なようです。
https://denor.jp/raspberry-pi%E3%81%A7nfs%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E4%BD%9C%E6%88%90
上述のコマンドで、USBデバイスはどのくらい電力を使っている様子でしょうか?
たとえば500mAのように表示される場合、電力が足りてない可能性があります。
回避策になってしまいますが、電力が足らなそうな場合、ワイヤレスのキーボード・マウスのほうが、電力は少なくて済むようです。
https://denor.jp/raspberry-pi-4%e3%81%abusb%e7%ab%af%e5%ad%901%e3%81%a4%e3%81%a7%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89%e3%81%a8%e3%83%9e%e3%82%a6%e3%82%b9%e3%82%92%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%81%ab
色々とリンク情報を頂きありがとうございます。
お返事のように電源容量がかなり怪しいです。
結構電源で嵌ってるようですね。
あれから纏まった時間がとれず、停滞しています。
とりあえず、ssh 起動ように touch してから
シリアルコンソールが届いたらつないで起動してみます。
別環境で試す機会があったので試したのですが、
そちらは、小さ目な M.2 の SSD では問題なく
ログイン出来たりしました。
確かに lsusb -v とキーボードとマウスは、MaxPowerが 100mA
と表示されますが、 SSDは 0mA と表示されているので
計れてないかもしれません。
そちらの環境では、ldap,radius,vpn と全て動作したので
とりあえず SSHでアクセスできるところまで目指します。
ありがとうございました。
自己解決しました。
電源の疑いは残っていますが、基本的にはSSDのディスクージャーがタコだったので
アクセス中にエラーを起こしていて、正常に cloud-init が走らなかったのが
全ての原因でした。
正常な場合は、microSD と SSD に同じイメージを書きました。
microSD でブートしてから mount /dev/sda1 /mnt して config.txt の編集と vmlinuz
の展開しただけで、普通にブートできるようになりました。
あとは何処かに書かれていた、auto_decompress_kernel をapt 実行時に
処理されるように追加しました。
sbinさんこんばんは
自己解決されたそうで、おめでとうございます。
ふむふむSSDでアクセスエラーになってたのですねふむふむ。
今はFirmwareのコピーは不要なのですね。展開だけで大丈夫ですか。
なるほど。バックグラウンドでaptが走って、知らないうちにvmlinuzが更新されていますので、apt実行時にフックで自動展開は必須なのですね。
うちもやらないとーと思っているうちに、vmlinuzが更新される→Raspberry Piがフリーズ→再起動で起動しない
コンボにやられている毎日です。orz
Ubuntuも正式にサポートされて、microSDでブート出来るので不思議に感じていました。
https://www.yukkuriikouze.com/2020/10/24/3945/
この方のスクリプト頂きました。aptを実行の度に走りますが、必要ない時は無いよと言ってくれて、忘れる事はなくなるかと思います。
Ubuntuもそうですが、raspi4 もとても素晴らしいですね。とても気に入りました。
シリアルコンソールも動いてたので、最高です。シリアルとviが有れば困らない人なのでとてもいい感じです。
これから夏休みの宿題であったRadiusで無線LAN認証や、LDAPの流し込みしてiPhoneで出先からアクセス出来るようにセットしようと思います。おまけでWordpresでblogをあげてみようかと思います。
ありがとうございました。
sbinさんこんにちは
自動展開のリンクを頂きまして、ありがとうございました。
良い機会ですので、早速おうちの録画用Pi 4にスクリプトを2つ追加しました。
おかげさまで、いつでも再起動できるようになりました。
sbinさんのraspi4は、いろいろと活用してもらえて幸せそうですね。
raspiで楽しい時間を過ごせますように。
hideさんのページとても刺激を受けます。
ありがとうございます。
お陰様でやりたい事は一通りできました。最近はメインサーバーのように働いています。こんなに酷使していいのか?と言う状況です。別ページで書かれていた、NextCloud とても良いですね。写真を同期したり書類を放り込んだりしています。
何だか全部入りになってしまいました。
暫くエージングに入ります。
sbinさんこんにちは
嬉しいお言葉を頂き、大変励みになります。ありがとうございます!
わたしのRaspiは、いつも実験に使われて、実験後は放置されてしまっています。
sbinさんは私よりもずっとRaspiを実用的に活用されていると思います。
NextCloud同感です。おうち運用でしたら料金もかかりませんし、Raspiでしたら消費電力も少なそうですね。
全部入りですか、贅沢な感じで、なんだか美味しそうですね。
sbinさんのRaspiさん、安定動作を願っております。