RPi 4 đã có thể boot từ USB rất ổn định từ firmware pieeprom-2020-05-15
1. Chuẩn bị
- SD Card đã được flash OS Raspbian
- USB Flash /SSD /HDD cũng đã được flash OS Raspbian
Trước tiên là khởi động bằng SD Card, update EEPROM trên board mạch RPi và các file hệ thống trên /boot. Sau đó chép vài file hệ thống mới cập nhật sang USB Flash /SSD /HDD. Cuối cùng lấy SD Card ra khỏi RPi và khởi động lại chỉ với USB Flash /SSD /HDD
2. Khởi động RPi bằng SD Card
A. Cập nhật hệ thống
# Cập nhật hệ thống
sudo apt update
sudo apt full-upgrade
sudo apt install rpi-eeprom -y
sudo sed -i 's/critical/beta/g' /etc/default/rpi-eeprom-update
# Kiểm tra xem phiên bản mới nhất của bootloader là gì
ls /lib/firmware/raspberrypi/bootloader/beta/pieeprom-*
# Giả sử bản mới nhất là pieeprom-2020-04-15.bin
# Cập nhật EEPROM
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-05-15.bin
sudo reboot
B. Kiểm tra bootloader
vcgencmd bootloader_version
vcgencmd bootloader_config
Version phải May-15-2020 hoặc mới hơn và BOOT_ORDER phải là 0xf41, nghĩa là “thử boot từ SD Card rồi đến thiết bị lưu trữ USB”
3. Chép file hệ thống sang /boot của USB Flash /SSD/ HDD
USB Flash /SSD /HDD cũng đã được flash OS Raspbian, có thể được được tạo mới hay chép từ SD Card, miễn sao cmdline.txt ở /boot và fstab ở /etc được chỉnh sửa theo các PART_UUID phù hợp. Thông thường có 2 partition được tạo ra khi flash OS, một chứa các file dùng để boot và một để chứa OS.
Gắn USB Flash /SSD /HDD vào RPi, các partition trên USB Flash /SSD /HDD có thể được mount tự động hoặc không. Chúng ta chỉ cần mount partition thứ nhất dùng để boot và chép các file cần thiết sang
sudo mount /dev/sda1 /media
sudo cp /boot/*{.elf,.dat} /media/
sudo halt
Cuối cùng gở SD Card ra khỏi RPi và khởi động lại RPi chỉ với USB Flash /SSD /HDD.
Nếu không gở SD Card, EEPROM sẽ thử boot từ SD Card trước, vi vậy trong trường hợp bị lỗi RPi vẫn boot được theo phương thức cũ.
Chú thích
1. SD Card đã tạo bên trên có thể dùng để cài đặt khởi động từ USB Flash /SSD /HDD khác, bắt đầu từ dòng lệnh sau đây của 1.A trở đi
update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-05-15.bin
2. Có thể ssh vào RPi từ xa để tạo PiEEPROM.
Phải chắc là RPi đàng xa có cùng mạng và có thể ssh vào RPi đàng xa.
3. Thông thường USB Flash /SSD /HDD có dung lượng cao, nếu flash OS bằng ứng dụng thì USB Flash /SSD /HDD được chia thành 2 partition trong đó rootfs partition lấy hết dung lượng đĩa còn lại. Tốt nhất là dùng fdisk chia USB Flash /SSD /HDD thành 3 partition:
- /dev/sda1 200MB Label boot fstype c
- /dev/sda2 10GB – 40GB Label rootfs fstype ext4
- /dev/sda3 phần còn lại Label Data fstype ext4
Sau khi format từng partition, mount từng partition và rsync partition trên SD Card tương ứng sang
sudo mount /dev/sda1 /media
sudo rsync -avx /boot/ /media/
sudo umount /media
sudo mount /dev/sda2 /media
sudo rsync -avx / /media/
Dùng blkid để tìm PARTUUID của các partition
sudo blkid
Sau đó chỉnh cmdline.txt ở boot partition /dev/sda1 để cho ROOT trỏ đến PARTUUID của rootfs partition /dev/sda2.
Tiếp theo chỉnh /etc/fstab trên rootfs partition /dev/sda2 sao cho BOOT trỏ đến PARTUUID của /dev/sda1 và ROOT trỏ đến PARTUUID của /dev/sda2