Raspberry Pi 3B+ hỗ trợ boot – khởi động hệ điều hành từ USB ngay khi xuất xưởng, tuy nhiên phiên bản mới hơn – Raspberry Pi 4B cần đến 1 năm để phát triển tính năng này. Gần đây Raspberry Pi Foundation đã phát hành phiên bản bootloader (β) beta hỗ trợ khởi động – boot Pi4 từ thiết bị USB như ổ cứng gắn ngoài, SSD.
Hôm nay chúng tôi sẽ thử nghiệm tính năng này và cũng ghi lại các bước để mở tính năng boot Pi 4B từ USB như một bài hướng dẫn.
Thông số kĩ thuật
- Processor: 1.5GHz quad-core 64-bit ARM Cortex-A72 CPU
- RAM: 1GB/2GB/4GB/8GB LPDDR4 SDRAM
- Connectivity: Full-throughput Gigabit Ethernet, Dual-band 802.11ac wireless networking, Bluetooth 5.0
- Ports: Two USB 3.0, Two USB 2.0, and two micro-HDMI port supporting 4K resolution
- VideoCore VI graphics, supporting OpenGL ES 3.x
- 4Kp60 hardware decode of HEVC video
Yêu cầu cần thiết
Từ trái sang:
- Ổ SSD và adapter chuyển SATA-USB
- Thẻ microSD tối thiểu 16GB và adapter chuyển sang SD
- Raspberry Pi 4B phiên bản nào cũng được
- Ổ cứng USB gắn ngoài nếu không sử dụng SSD và adapter
Tất nhiên bạn cũng sẽ cần thêm:
- Nguồn cho Raspberry Pi, cần nguồn có công suất lớn hơn một chút so với thông thường
- Máy tính Windows/MAC/Linux
- Đầu đọc thẻ nếu máy tính không có
Hiệu năng của SSD so với thẻ nhớ trên Raspberry Pi 4B
Chắc chắn mọi người đều đồng ý rằng hiệu năng của Raspberry Pi 4B sẽ tăng đáng kể khi boot/sử dụng SSD qua USB thay cho thẻ nhớ microSD. Nhưng mức chênh lệch cao đến đâu và liệu có đáng kể. Ở đây ta sẽ “test” thử tốc độ đọc ghi ngẫu nhiên của thẻ nhớ và ổ SSD bên trên.
Phần chênh lệch về tuổi thọ và độ ổn định mình sẽ giải thích ở một bài viết khác.
Thiết bị và phương thức đo
Tốc độ đọc/ghi tuần tự và đọc/ghi ngẫu nhiên được đo bởi ứng dụng iozone chuyên để đo hiệu năng của các hệ thống lưu trữ. 2 thiết bị lưu trữ được sử dụng để đo (tạm) là:
- Thẻ nhớ microSD
Sandisk UltraSamsung EVO 16GB U1 - Ổ cứng SSD Samsung 840EVO 120GB SATA3 gắn qua adapter SATA-USB Orico (controller JMS578)
Cả 2 được đo bởi iozone chạy trên cùng một thiết bị Raspberry Pi 4B 2GB RAM.
Kết quả đo
Bên dưới là biểu đồ so sánh tốc độ đọc/ghi tuần tự và ngẫu nhiên 4K. Đọc ghi ngẫu nhiên 4K là chỉ số quan trọng nhất liên quan đến hiệu năng của các ứng dụng thông thường.
Tốc độ ghi ngẫu nhiên của SSD trong bài đo cao hơn khoảng 33 lần so với thẻ microSD.
Tốc độ đọc ngẫu nhiên của SSD trong bài đo cao hơn khoảng 4 lần so với thẻ microSD.
Mặc dù còn liên quan đến cache của SSD, sự chênh lệch vẫn là rất ấn tượng.
Trong đó,
- MicroSD boot: tốc độ test trên thẻ microSD dùng để boot
- SSD (3.0) (microSD boot): tốc độ test SSD cắm qua cổng USB 3.0, Pi boot từ microSD
- SSD boot (2.0): tốc độ test SSD cắm qua USB 2.0, Pi boot từ SSD này
- SSD boot (3.0): tốc độ test SSD cắm qua USB 3.0, Pi boot từ SSD này
Các kết quả đo khác:
Thay đổi bootloader để mở tính năng boot từ USB cho Pi 4B
Để mở tính năng boot Rasspberry Pi 4B từ thiết bị USB, ta cần chỉnh sửa lại bootloader cho thiết bị. Lưu ý đây là phiên bản thử nghiệm beta và chưa được công bố chính thức nên hiệu năng có thể chưa được tối ưu và có thể còn có lỗi.
Use At Your Own Risk/Lưu ý Trách Nhiệm
I. Mọi thao tác trên thiết bị điện hay thiết bị là nguồn nguy hiểm phải được tiến hành bởi người có chuyên môn và chứng chỉ phù hợp.
II. Bạn phải tuân theo mọi chỉ dẫn an toàn (Safety Instruction/Safety Information) đi kèm với thiết bị.
III. Tất cả nội dung trên trang web này (https://konnected.vn) đến từ KonnectED, KonnectED Team và nhóm tác giả đều được kiểm tra và kiểm nghiệm bởi những người có kiến thức và kinh nghiệm trong lĩnh vực đó, cũng như được áp dụng phổ biến bởi cộng đồng, tuy vậy chúng tôi không thể đảm bảo những chỉ dẫn hay nội dung này hoạt động tốt và an toàn trên tất cả các hệ thống, thiết bị hay tình huống. Vì vậy, tuyên bố này miễn cho KonnectED, KonnectED Team và các tác giả mọi trách nhiệm liên quan đến tai nạn hay sự cố hư hỏng thiết bị, hệ thống khi đọc giả làm theo các hướng dẫn hay nội dung được chia sẻ trên trang web này.
Tất cả các trách nhiệm khác của công ty Konnect ED đối với sản phẩm thương mại hay dịch vụ thương mại không bị miễn trừ bởi tuyên bố này.
Cập nhật hệ điều hành Raspbian
Trước tiên bạn cần khởi động hệ điều hành Raspbian từ thẻ nhớ, đây là yêu cầu bắt buộc. Nếu bạn đang có rồi thì tiếp tục bước dưới mà không cần phải tải về và flash lại Raspbian mới. Nếu bạn chưa thì cần flash Raspbian lên thẻ và khởi động cũng như thực hiện một số cài đặt ban đầu trước khi làm tiếp (tham khảo Cách tải về và cài đặt Raspbian).
Bạn cũng sẽ cần truy cập vào Raspbian qua giao diện dòng lệnh (console) hoặc kết nối SSH (tham khảo về kết nối SSH).
Giờ ta sẽ chạy lệnh để cập nhật Raspbian kể cả khi bạn mới tải về phiên bản mới nhất từ Pi Foundation.
sudo apt-get update sudo apt-get full-upgrade -y
Bạn cần chờ cho việc cập nhật hoàn tất và giao diện quay trở về con trỏ dòng lệnh. Sẽ mất khá lâu (khoảng 5p) để hoàn tất cập nhật do giới hạn tốc độ ghi của thẻ nhớ.
Kiểm tra kết quả cập nhật
Kết quả trên màn hình sau khi lệnh trên hoàn tất.
Cần kiểm tra chắc chắn 2 package rpi-eeprom và rpi-eeprom-image đã được nâng cấp thành công.
Thay đổi cài đặt bootloader
Dùng lệnh sau để thay đổi cài đặt cập nhật phiên bản eeprom từ critical sang beta.
cat /etc/default/rpi-eeprom-update sudo sed -i 's/STATUS=\"critical\"/STATUS=\"beta\"/' /etc/default/rpi-eeprom-update
Nâng bootloader lên phiên bản beta
Chạy lệnh sau để kiểm tra phiên bản beta mới nhất trước khi nâng cấp.
sudo rpi-eeprom-update
Tiến hành cập nhật bootloader trên eeprom.
sudo rpi-eeprom-update -a
Khởi động lại Raspberry Pi 4B để hoàn tất quá trình cập nhật.
sudo reboot now
Thử boot Pi 4B từ USB
Kiểm tra bootloader hiện tại
Dùng lệnh sau để kiểm tra phiên bản bootloader hiện tại.
vcgencmd bootloader_version
Chuẩn bị SSD để boot Pi 4B từ USB
Bạn có thể clone/copy nội dung thẻ nhớ đang chạy Raspbian sang SSD hoặc flash SSD với phiên bản Raspbian mới tinh.
Ở đây ta sẽ clone thẻ nhớ hiện tại sang SSD. Loại SSD mình dùng là ổ Samsung 840EVO 120GB cũ và box chuyển đổi là Orico. Những điều cần lưu ý với kiểu box này và hiệu năng của nó sẽ được đề cập ở mục cuối bài này.
Cập nhật /boot trên thẻ nhớ
Trước khi clone, ta sẽ cập nhật các file dùng cho việc khởi động nằm trong thư mục /boot
trên thẻ nhớ hiện đang chạy Raspbian bằng lệnh sau:
sudo rpi-update
Nếu bạn nào flash Raspbian mới lên SSD/USB drive thì cần tải về Pi firmware mới nhất tại đây: Raspberry Firmware. Sau đó copy toàn bộ file trong thư mục /boot
mới tải về và paste đè lên nội dung cũ của thư mục /boot
trên SSD.
Có thể tải file từ github về bằng nhiều cách, tuy nhiên để cho nhanh thì bạn tải về toàn bộ như ảnh dưới về máy tính rồi giải nén để lấy thư mục /boot. Dung lượng file nén khoảng 200MB, trong đó có hơn 50MB là phần thư mục /boot
.
Clone thẻ nhớ microSD sang SSD
Bạn sẽ cần đầu đọc thẻ nhớ nếu chưa có sẵn. Cắm thẻ nhớ vào máy tính rồi sử dụng các công cụ sau để thực hiện clone:
- Trên Windows, sử dụng công cụ Win32DiskImager miễn phí để tạo bản sao thẻ nhớ rồi dùng chính công cụ này hoặc Etcher ghi bản sao lên SSD
- Trên MacOS, sử dụng lệnh
dd if=/dev/rdiskx of=/dev/rdisky bs=4m
Với/dev/rdiskx
là ổ đĩa đại diện cho thẻ nhớ và/dev/rdisky
là ổ đĩa đại diện cho SSD. Xác định bằng lệnhdiskutil list
- Trên Raspbian Desktop, sử dụng công cụ có sẵn SD Card Copier application để clone ngay trên Pi
Thử khởi động Raspberry Pi 4B từ SSD gắn qua USB
Sau khi clone, ngắt nguồn Raspberry Pi. Cắm ổ cứng SSD vào 1 trong 2 cổng USB 3.0 (cổng có lõi bên trong màu xanh) trên Pi. Cắm nguồn và chờ xem Raspberry Pi có boot được từ ổ cứng hay không.
Lưu ý lỗi boot chậm
Có thể Pi sẽ boot khá chậm, vấn đề có lẽ nằm ở trình tự lựa chọn thiết bị boot hoặc do thời gian khởi động của ổ cứng gắn ngoài. Hi vọng lỗi này sẽ được khắc phục trong bản chính thức.
Bạn cần kiên nhẫn và quan sát các đèn báo hiệu của Pi cũng như ổ cứng.
Các dấu hiệu boot thành công:
- Đèn ACT màu xanh trên Pi nhấp nháy nhanh 3 nhịp mỗi lần
- Đèn PWR màu đỏ trên Pi sáng đều, không nháy
- Đèn báo hiệu đọc ổ cứng trên adapter chuyển SATA sang USB nhấp nháy không theo quy luật
- Nếu bạn đang kết nối Pi vào mạng bằng cáp Ethernet: đèn tín hiệu mạng trên cổng Ethernet của Pi nhấp nháy cả 2 đèn không theo quy luật
Các dấu hiệu Raspberry Pi không boot được từ ổ cứng USB:
- Đèn báo hiệu đọc ổ cứng trên adapter chuyển SATA sang USB không thay đổi
- Đèn ACT màu xanh trên Pi không sáng hoặc sáng liên tục
- Đèn PWR màu đỏ nhấp nháy hoặc sáng liên tục rồi tắt
- Raspberry Pi không kết nối vào mạng nội bộ, không thấy IP hoặc không thể Ping
Nếu không thể boot thành công và bạn có màn hình + mini-HDMI adapter, kết nối Pi vào màn hình rồi boot lại từ đầu để tìm hiểu lỗi. Nếu không hãy:
- Thử một cổng USB khác như cổng 2.0
- Làm lại bước clone thẻ
- Thử dùng một USB drive khác để boot thay vì dùng SSD
- Xe phần lưu ý bên dưới về Adapter SATA-USB
Nếu Raspberry Pi 4B của bạn khởi động thành công từ SSD thì xin chúc mừng, bạn có thể sử dụng nó cho các ứng dụng y hệt như khi boot từ thẻ nhớ như làm máy chủ Home Assistant, NAS, Webserver v.v.. Nhưng nếu bạn dùng SSD thì trước tiên, hãy đọc phần bên dưới về TRIM để tăng hiệu năng và tuổi thọ SSD.
Mở rộng phân vùng trên SSD
Sau khi boot thành công, ta cần mở rộng phân vùng trên SSD vì hiện tại nó chỉ có dung lượng bằng với dung lượng thẻ nhớ. Nếu bạn flash trực tiếp Raspbian lên SSD thì không cần bước này.
Chạy lệnh:
sudo raspi-config
Tiếp theo chọn Advanced Options > A1 Expand Filesystem.
Kích hoạt TRIM trên Raspbian
Tóm tắt về TRIM
TRIM là một lệnh phải được hỗ trợ cả bởi SSD (controller) và hệ điều hành, qua đó hệ điều hành báo cho SSD biết các tập tin nào đã bị xoá. SSD sau đó sẽ chủ động lên lịch để xoá bỏ các ô nhớ liên quan đến tập tin này khi nó “rảnh”. TRIM là tính năng cơ bản của các ổ cứng SSD và hệ điều hành thế hệ mới.
Do đặc tính của bộ nhớ Flash, một ô nhớ phải được xoá trước khi có thể ghi dữ liệu mới lên và tốc độ xoá chậm hơn rất nhiều so với ghi do khác biệt về kích cỡ block, TRIM sẽ giúp tăng tốc độ ghi lên ổ đĩa, đặc biệt khi dung lượng trống trên SSD ở mức thấp.
TRIM cũng giúp tăng tuổi thọ SSD khi giảm số lần đọc ghi không cần thiết vốn hay xảy ra khi số ô nhớ “sạch” quá thấp khiến SSD phải di chuyển dữ liệu vòng quanh cố sắp xếp lại các ô nhớ.
Kiểm tra hỗ trợ TRIM trên Raspbian
Chạy lệnh bên dưới để xác định ổ SSD của bạn có hỗ trợ TRIM trên Raspbian hay không. Lưu ý là ổ SSD này không cần phải là ổ boot.
lsblk --discard
Nếu giá trị trong cột DISC-GRAN của kết quả là 0, SSD của bạn chưa hỗ trợ TRIM trên Raspbian.
Nếu ổ SSD của bạn có hỗ trợ TRIM, bác có thể kích hoạt tính năng TRIM định kỳ hoặc TRIM liên tục như bên dưới để đảm bảo hiệu suất và tuổi thọ ổ cứng.
Nếu kết quả cho thấy SSD của bạn không hỗ trợ TRIM, đa phần nguyên nhân là do bộ chuyển đổi SATA-USB của bạn. Có thể xem xét chuyển sang bộ chuyển khác (sử dụng controller khác) hoặc nếu bạn đang dùng bộ chuyển sử dụng controller JMS578, hãy thử cách ở cuối bài.
Kích hoạt TRIM
TRIM định kỳ mỗi tuần
Đây là cách khuyến nghị. Bạn nên sử dụng cách này.
Thực hiện lệnh bên dưới để kích hoạt service fstrim.timer. Hệ điều hành sẽ tự lên kế hoạch thực hiện TRIM mỗi tuần một lần.
sudo systemctl enable fstrim.timer
TRIM thời gian thực
Lệnh TRIM sẽ được gởi bởi hệ điều hành ngay khi file được xoá. Cần thay đổi tuỳ chọn mount ổ SSD trong /etc/fstab. Sử dụng lệnh bên dưới để sửa file /etc/fstab, tìm ổ đĩa SSD tương ứng rồi thêm tuỳ chọn discard.
sudo nano /etc/fstab #Ví dụ #PARTUUID=738a4d67-02 / ext4 defaults,noatime 0 1 #Sẽ sửa thành #PARTUUID=738a4d67-02 / ext4 defaults,noatime,discard 0 1
Ctrl-X rồi Y để lưu. Lưu ý lỗi trong file /etc/fstab sẽ khiến hệ điều hành không thể khởi động được, cần cẩn thận.
Khởi động lại để thay đổi có hiệu lực.
Một số vấn đề liên quan đến SATA-USB
Lỗi UAS
Nhiều adapter SATA-USB và ổ cứng gắn ngoài không hỗ trợ đầy đủ tập lệnh UAS dùng để giao tiếp giữa hệ điều hành và ổ cứng. Nếu ổ cứng gắn ngoài của bạn hoạt động không ổn định, tốc độ rất chậm hoặc không thể boot từ USB trên Raspberry Pi 4, nhiều khả năng là có lỗi UAS.
Bạn có thể tìm lỗi này trong log – nhật ký của kernel sử dụng lệnh sau:
dmesg | grep uas
Để khắc phục, ta có thể thử vô hiệu hoá giao thức UAS đối với ổ cứng gắn ngoài này. Lưu ý rằng vô hiệu hoá UAS đồng thời cũng sẽ vô hiệu hoá TRIM và tốc độ ổ cứng sẽ bị giảm (nhưng vẫn không quá nghiêm trọng).
Trước tiên cần tìm mã nhà sản xuất và thiết bị của adapter/ổ cứng, gọi là VID và PID. Chạy lệnh sau để tìm VID và PID.
lsusb
Kết quả như ảnh dưới, trong khung đỏ là VID:PID.
Tiếp theo bạn cần sửa file /boot/cmdline.txt bằng lệnh dưới.
sudo nano /boot/cmdline.txt
Thêm đoạn bên dưới vào đầu dòng đang có, thay VID:PID như đã lấy ở trên, theo sau bằng :u
và dấu cách – space.usb-storage.quirks=VID:PID:u
Kết quả trông như bên dưới.
Ctrl-X rồi Y để lưu file. Khởi động lại để thay đổi có hiệu lực.
Không hỗ trợ TRIM
Nếu cả SSD và controller của adapter đều hỗ trợ TRIM, để khắc phục lỗi này thông thường cần cập nhật firmware của adapter.
Ví dụ trên dòng controller JMS578 vốn rất phổ biến (như trên box Orico sử dụng trong bài này), cần nâng cấp fimware của chip để hỗ trợ TRIM như sau.
wget https://wiki.odroid.com/_media/odroid-xu4/software/jms578fwupdater.tgz tar xzf jms578fwupdater.tgz cd JMS578FwUpdater && ./JMS578FwUpdate -v sudo ./JMS578FwUpdate -d /dev/sda -f ./JMS578-Hardkenel-Release-v173.01.00.02-20190306.bin -b ./backup.bin
Cần tắt Pi và rút nguồn ổ cứng rồi cắm lại để firmware mới được cài đặt.
Cảm ơn bạn đã xem bài viết này!
konnectED Team.