Tech

Khởi động Raspberry Pi 4 từ SSD

M2 NVMe SSD Hat cho Raspberry Pi

So sánh tốc độ SSD vs thẻ nhớ, cho phép khởi động từ USB với Pi 4B

Photo: geekstudio
22 phút để đọc hết nội dung

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.

Raspberry Pi4 8GB

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

Raspberry Pi 4B Boot From USB
Các thiết bị 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 Ultra Samsung EVO 16GB U1 Thẻ nhớ Samsung microSD SDHC U1 EVO 16GB (retina)
  • Ổ 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.

Raspberry Pi 4B SSD 4K Speed Test
Tốc độ 4K so sánh

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:

Kết quả iozone 4K Pi 4B microSD
Tốc độ microSD (boot: microSD)
Kết quả iozone 4K Pi 4B SSD3.0 boot from microSD
SSD 3.0 (boot: microSD)
Kết quả iozone 4K Pi 4B SSD 2.0
SSD 2.0 (boot: SSD)
Kết quả iozone 4K Pi 4B SSD 3.0
SSD 3.0 (boot: SSD)

Like page để nhận cập nhật

Mời bạn thích – Like facebook page của chúng tôi để cập nhật nhanh chóng các bài viết hay tin tức SmartHome, IOT và công nghệ mới.

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.

Xem thêm Tuyên bố Pháp lý, Công bằng và Minh bạch

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

Raspberry Pi 4B Cập nhật apt

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-eepromrpi-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
Có cập nhật eeprom cho Pi 4
Có cập nhật BOOTLOADER (beta)

Tiến hành cập nhật bootloader trên eeprom.

sudo rpi-eeprom-update -a
Cập nhật eeprom cho Pi 4
Cập nhật BOOTLOADER và chờ khởi động lại

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
Raspberry Pi 4B bootloader version
Bootloader phát hành ngày 3/06/2020

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.

Tải File zip từ github
Tải toàn bộ repository từ github về máy tính

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ệnh diskutil 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:

  1. Thử một cổng USB khác như cổng 2.0
  2. Làm lại bước clone thẻ
  3. Thử dùng một USB drive khác để boot thay vì dùng SSD
  4. 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.

Raspberry Pi mở rộng phân vùng nhớ
Mở rộng phân vùng hệ thống (/) trên SSD

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.

TRIM supported by Raspbian

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.

Kết quả kiểm tra hỗ trợ TRIM trên Raspbian
Kết quả cho thấy TRIM chưa được hỗ trợ
Kết quả kiểm tra có hỗ trợ TRIM trên Raspbian (retina)
Kết quả cho thấy TRIM được hỗ trợ

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.

Vô hiệu hoá UAS trên Pi
Số VID:PID trong khung đỏ

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.

Vô hiệu hoá UAS trong cmdline
/boot/cmdline.txt sau khi sửa

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.

Lên Đầu
  • Đăng ký
Bạn quên mất mật khẩu? Vui lòng nhập tên đăng nhập và địa chỉ email đã đăng ký. Bạn sẽ nhận được liên kết tạo mật khẩu mới qua email (bạn nhớ kiểm tra hộp spam trong trường hợp email đi lạc).