Cách khởi động Raspberry Pi 3 từ USB

Raspberry Pi là một bộ phần mềm tuyệt vời, linh hoạt, có nhiều khả năng đa dạng như chạy một media center hoặc sử dụng như một đài phát thanh. Nhưng nó có một lỗ hổng rất dễ nhận thấy: Không có khả năng khởi động từ USB.

Nếu bạn đang sử dụng Raspberry Pi 3, bạn có thể bỏ qua việc khởi động từ microSD và thay vào đó khởi động máy tính này từ thiết bị USB. Đây có thể là một thanh flash, một ổ SSD có bộ điều hợp USB hoặc thậm chí là ổ đĩa cứng USB đầy đủ. Đây là một sự phát triển đáng kể, vì vậy chúng ta hãy xem cách có thể thiết lập Raspberry Pi 3 của mình để khởi động từ USB.

Raspberry Pi 3

Cài đặt Raspbian và thêm các file mới

Tốt nhất là nên bắt đầu dự án này với một phiên bản Raspbian mới, vì vậy hãy tải xuống phiên bản mới nhất và cài đặt nó theo cách thông thường. Ngay sau khi việc này được thực hiện, hãy tháo thẻ SD một cách an toàn khỏi PC của bạn, lắp thẻ vào Raspberry Pi và khởi động lại, kết nối từ xa qua SSH ngay khi nó load lên.

Đăng nhập (trừ khi bạn đã thay đổi thông tin đăng nhập mặc định của mình), sau đó chạy các lệnh sau. Thao tác này sẽ thay thế file start.elfbootcode.bin mặc định bằng các lựa chọn thay thế mới được tải xuống:

sudo apt-get update
sudo BRANCH=next rpi-update

Bản cập nhật này cung cấp hai file vào thư mục /boot. Với các file đã tải về, tiến hành kích hoạt chế độ khởi động từ USB với:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Lệnh này thêm hướng dẫn program_usb_boot_mode=1 vào phía cuối của file config.txt.

Khởi động lại Pi

Bạn sẽ cần phải khởi động lại Pi khi việc này hoàn tất.

Bước tiếp theo là kiểm tra OTP - bộ nhớ lập trình một lần - đã được thay đổi chưa. Kiểm tra điều này bằng cách nhập:

vcgencmd otp_dump | grep 17:

Nếu kết quả đại diện bởi địa chỉ 0x3020000a (chẳng hạn như 17:3020000a) thì tất cả mọi thứ đều tốt cho đến thời điểm này. Ở giai đoạn này, bạn có thể xóa dòng program_usb_boot_mode=1 từ file config.txt nếu muốn. Pi bây giờ đã được kích hoạt khởi động từ USB, và bạn có thể muốn sử dụng cùng một thẻ microSD trong Raspberry Pi 3 khác, với cùng một hình ảnh, thì nên xóa dòng này..

Loại bỏ dòng

Điều này có thể dễ dàng thực hiện bằng cách chỉnh sửa config.txt trong nano:

sudo nano /boot/config.txt

Xóa hoặc thêm # vào dòng tương ứng.

Chuẩn bị USB boot

Tiếp theo, kết nối một USB đã được định dạng (hoặc sẵn sàng để xóa mọi dữ liệu trong đó) vào cổng dự phòng trên Raspberry Pi 3. Sau khi cắm USB, bạn sẽ tiếp tục sao chép hệ điều hành.

Bắt đầu bằng cách xác định USB của bạn với lệnh lsblk.

Xác định USB

Trong ví dụ này, thẻ SD là mmcblk0 còn USB là sda (phân vùng được định dạng là sda1). Nếu bạn có thiết bị lưu trữ USB khác được kết nối, nó có thể là sdb, sdc, v.v... Với tên của USB được thiết lập, hãy unmount ổ đĩa và sử dụng công cụ parted để tạo phân vùng 100 MB (FAT32) và phân vùng Linux:

sudo umount /dev/sda
sudo parted /dev/sda

Tại dấu nhắc (parted), nhập:

mdable msdos

Bạn có thể được thông báo rằng ổ đĩa đã được sử dụng. Nếu vậy, hãy chọn Ignore, sau đó lưu ý cảnh báo hướng dẫn bạn rằng dữ liệu trên ổ đĩa sẽ bị hủy. Như đã giải thích trước đó, đây phải là một ổ đĩa mà bạn sẵn sàng xóa hoặc định dạng, vì vậy hãy đồng ý với điều này.

Nếu bạn gặp phải bất kỳ vấn đề nào ở đây, bạn có thể cần phải chuyển sang màn hình desktop (thủ công hoặc trên VNC) và xác nhận ổ đĩa đã được ngắt kết nối, trước khi nhập lệnh msdos mktable trong cửa sổ dòng lệnh.

Tiến hành những điều sau đây với lệnh parted:

mkpart primary fat32 0% 100M
mkpart primary ext4 100M 100%
print

Điều này sẽ xuất ra một số thông tin liên quan đến ổ đĩa và các phân vùng mới. Tiến hành việc thoát parted với Ctrl + C, trước khi tạo hệ thống file khởi động và hệ thống file gốc:

sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

Sau đó bạn cần phải mount các hệ thống file đích, trước khi sao chép hệ điều hành Raspbian hiện tại của bạn vào thiết bị USB.

sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/target

Bước cuối cùng là sao chép tất cả mọi thứ, và bước này sẽ mất một lúc để hoàn thành. Bạn có thể thưởng thức một ly cà phê trong lúc chờ đợi!

Sao chép mọi thứ

Tiếp theo, bạn cần phải làm mới các key máy chủ SSH, để duy trì kết nối với Raspberry Pi được cấu hình, sau quá trình khởi động lại sắp diễn ra:

cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc

Làm mới các key

Lưu ý: Sau lệnh sudo chroot (lệnh thứ năm ở trên) bạn đang chuyển để root, bạn sẽ phải thay đổi từ pi@raspberrypi thành root@raspberrypi cho đến khi bạn nhập exit trên dòng 8.

Chuẩn bị khởi động lại từ USB!

Chỉ cần thêm một vài thứ và sắp xếp chúng trước khi Raspberry Pi của bạn sẵn sàng khởi động từ USB. Bạn cần chỉnh sửa cmdline.txt một lần nữa từ dòng lệnh với:

sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt

Tương tự, thay đổi sau cần được thực hiện cho fstab:

sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab

Sau đó bạn đã sẵn sàng để unmount các hệ thống file trước khi tắt Pi:

cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroff

Lưu ý: Điều này sử dụng lệnh poweroff mới để thay thế cho việc tắt máy.

Khi Pi đã tắt, hãy ngắt kết nối nguồn điện trước khi tháo thẻ SD. Tiếp theo, kết nối lại nguồn điện và Raspberry Pi của bạn bây giờ sẽ khởi động từ thiết bị USB!

Bạn đã thử điều này chưa? Bạn có bị hấp dẫn bởi khả năng khởi động từ USB thay vì từ thẻ SD không? Bạn có kế hoạch thử nghiệm điều này không? Hãy cho chúng tôi biết trong phần bình luận bên dưới nhé!

Chúc bạn thành công!

Xem thêm:

Thứ Tư, 15/08/2018 16:56
53 👨 1.427