Vật liệu cần:
- SD card đã cài PiOS hay một OS chạy trên RPi nào đó
- USB/HDD đã flash Ubuntu
- RPi đã cập nhật EEPROM để có thể khởi động từ USB
Khởi động từ SD card đã cài PiOS, rồi sau đó gắn USB/HDD vào RPi
Chúng ta sẽ sao chép cơ chế boot USB từ PiOS sang Ubuntu OS.
Giả sử USB/HDD gắn vào RPi có tên thiết bị là /dev/sda
Kiểm tra các partition bằng lệnh
lsblk
Output tương tự như sau:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 256M 0 part
└─sda2 8:2 0 2.8G 0 part
mmcblk0 179:0 0 59.5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 59.2G 0 part /
- mmcblk0 là thẻ nhớ SD card chứa PiOS
- sda là USB/HDD chứa Ubuntu OS
Mount các partition sda1, sda2 để chuẩn bị chuyển boot sang
sudo mkdir /mnt/{boot,writable}
sudo mount /dev/sda1 /mnt/boot
sudo mount /dev/sda2 /mnt/writable
Kết quả của lệnh lsblk giờ tương tự như sau:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 256M 0 part /mnt/boot
└─sda2 8:2 0 2.8G 0 part /mnt/writable
mmcblk0 179:0 0 59.5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 59.2G 0 part /
Chạy các lệnh sau để chuyển cơ chế boot từ USB của PiOS sang Ubuntu OS
wget https://raw.githubusercontent.com/TheRemote/Ubuntu-Server-raspi4-unofficial/master/BootFix.sh
chmod +x BootFix.sh
sudo ./BootFix.sh
Cuối cùng là dọn dẹp
sudo umount /mnt/{boot,writable}
rmdir /mnt/{boot,writable}
Bây giờ có thể bỏ thẻ nhớ ra và khời động Ubuntu bằng USB/HDD
Chú thích
- Ubuntu nhận dạng đĩa theo label (system-boot và writable), tuy nhiên vẫn có thể dùng PARTUUID như cũ
# Ubuntu, kiểu label
LABEL=writable / ext4 defaults 0 1
LABEL=system-boot /boot/firmware vfat defaults 0 1
# Ubuntu, kiều PARTUUID
PARTUUID=3ba4435d-02 / ext4 defaults 0 1
PARTUUID=3ba4435d-01 /boot/firmware vfat defaults 0 1
Nếu dùng PARTUUID thì phải sửa đổi trong file /boot/firmware/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=3ba4435d-02
rootfstype=ext4 elevator=deadline rootwait fixrtc
- system-boot được mount từ /boot/firmware không phải từ /boot như trong RaspiOS. Tuy ghi nhầm vẫn có thể boot được nhưng khi update OS sẽ gây lỗi.
- Nội dung partition boot sẽ thay đổi trong quá trình boot, các file hệ thống sẽ được dời vào thư mục firmware
- Raspberry Pi Imager có thể tạo khởi động từ USB, nhưng cơ chế đó dành cho PiOS chứ không dành cho Ubuntu