Blog (83)
Komentarze (2k)
Recenzje (1)

Raspberry Pi CM4 jako serwer plików?

Strona główna@cyrylloRaspberry Pi CM4 jako serwer plików?
18.03.2021 04:37

Czy Raspberry Pi może być wydajnym serwerem plików? Tak o ile wybierzemy nowa wersję Compute Mode 4 wraz z płytą rozszerzeń CM4IO, która posiada port PCIe. Nowa odsłona popularnego mikrokomputera w wersji CM4 wreszcie pozwala na więcej.

719533

Compute Mode 4 w wielu opcjach

bDYSkmMn

Nowy moduł dostępny jest w różnych konfiguracjach. To co łączy wszystkie wersje to ten sam procesor oparty na układzie Broadcom BCM2711, który jest 64 bitowym układem posiadającym 4 rdzenie każdy po 1,5GHz oraz złącza 2x 104 pin-ów, które posiadają wyprowadzenia interfejsów:

  • Gigabit Ethernet
  • 1x USB 2.0
  • 28 GPIO
  • dual HDMI
  • 2-liniowy MIPI DSI dla ekranu
  • 2-liniowy MIPI CSI dla kamery
  • 4-liniowy MIPI DSI dla ekranu
  • 4-liniowy MIPI CSI dla kamery
  • PCIe

Ilość wielkości RAM zależna jest od wersji jaką wybierzemy, dostępne opcje od 1GB do 8GB. Są również wersje, które posiadają pamięć eMMC o różnych pojemnościach od 4GB do 32GB. Jak również opcjonalne wbudowany moduł Bluetooth i dwuzakresowym Wi-Fi.

bDYSkmMt

Pełna specyfikacja i opcje dostępnych wersji można zobaczyć na oficjalnej stronie raspberrypi.org

Płyta rozszerzeń CM4IO

Sam moduł CM4 nie posiada praktycznie nic poza wyprowadzonych złączach pinów. Aby można było korzystać z niej należy zaopatrzyć się w płytę rozszerzeń i tutaj skupimy się na oficjalnej podstawce CM4IO. W przeciwieństwie do wcześniejszych wersji CM których ceny podstawek były powyżej 1 tyś zł to cena dla wersji 4 jest naprawdę niska i wynosi około 170zł, dzięki czemu dla zwykłego kowalskiego cena jest akceptowalna.

719542

Płyta posiada załącza:

bDYSkmMu
  • wejście zasilania: od 5 V do 12 V
  • 2x HDMI 2.0
  • 2x MIPI DSI do podłączenia ekranów
  • 2x MIPI CSI-2 do podłączenia kamer
  • 2x USB 2.0
  • standardowe złącza GPIO 2x 20
  • konektory pod nakładkę PoE
  • standardowy konektor pod wiatrak
  • wyjście zasilania 12/5V na zasilanie np. dysków
  • gigabit Ethernet ze wsparciem PoE (wymaga dedykowanej nakładki PoE HAT)
  • PCIe 2
  • wejście kart microSD (tylko dla wersji CM4 Lite bez pamięci eMMC)
  • gniazdo baterii RTC

Pełna specyfikacja i dokumentacja dostępna na stronie projektu raspberrypi.org

Instalacja systemu na CM4 z pamięcią eMMC jest nieco bardziej trudniejsza niżeli instalacja obrazu na kartę SD. Opis instalacji opisany jest na stronie raspberrypi.org

W porównaniu do podstawowej wersji RPi 4 płyta rozszerzeń jest większa i ma wymiar 160x90mm. Istnieją już inne płyty rozszerzeń dedykowane dla CM4, które są mniejsze lub dedykowane do konkretnych zastosowań.

bDYSkmMv

PCIe i karta z kontrolerem SATA

Podstawka CM4IO posiada złącze PCI Express 2.0 ze złączem x1 dzięki czemu mamy możliwość podłączenia rożnych kart poprzez to złącze. Mi od razu do głowy wpadł pomysł użycia karty ze złączami SATA aby można było podpiąć dyski SSD lub zwykłe "talerzówki". Ale nie jest to jedna opcja można używać kontrolerów RAID, kart dźwiękowych i innych, które pracują na szynie x1 PCIe.

Ja wybrałem kartę PCIe z konwerterem SATA III z 2 złączami opartym na tanim układzie Marvell 9125. Kartę zamówiłem z aliexpress-u za około 20zł.

719551

Moduł nie jest domyślnie wspierany w kernelu systemu raspbian i należy dodać samemu moduły do naszego kernela. Informacje jak tego dokonać znalazłem na GitHub-ie Jeff'a Geerling, który jest znanym mi Youtuberem i podjął się sprawdzenia różnych kontrolerów SATA pod CM4IO.

bDYSkmMw

Poniżej wkleiłem oryginalne polecenia jakie należy wykonać na naszej CM4 aby dodać i skompilować kernel z odpowiednim modułem.

# Instalacja zależności
sudo apt install -y git bc bison flex libssl-dev make libncurses5-dev

# Klonujemy źródła kernela dla rpi
git clone --depth=1 https://github.com/raspberrypi/linux

# Ustawiamy konfigurację 
cd linux
export KERNEL=kernel7l 
make bcm2711_defconfig

#Ustawiamy .config za pomocą menuconfig
make menuconfig
# Włączamy  odpowiednio zaznaczając poniższe opcje :
# Device Drivers:
#   -> Serial ATA and Parallel ATA drivers (libata)
#     -> AHCI SATA support
#     -> Marvell SATA support
#
# Dodatkowo OPCJONALNIE można włączyć inne kontrolery lub opcje:
# CONFIG_ATA=m
# CONFIG_ATA_VERBOSE_ERROR=y
# CONFIG_SATA_PMP=y
# CONFIG_SATA_AHCI=m
# CONFIG_SATA_MOBILE_LPM_POLICY=0
# CONFIG_ATA_SFF=y
# CONFIG_ATA_BMDMA=y
# CONFIG_SATA_MV=m

#edytujemy .config
nano .config
# możemy dodać naszą końcówkę nazwy kernela  w CONFIG_LOCALVERSION i zapisujemy 

# Budujemy  kernel  trrochę to potrwa
make -j4 zImage modules dtbs

# a na koniec instalujemy i kopiujemy wszystko
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

Sama kompilacja trwa jakieś około 30 minut. Lecz po wykonaniu wszystkich operacji i restarcie podłączone dyski będą widoczne w systemie. Jeśli posiadamy inny kontroler na innym chipie można poszukać swój i włączyć go jak również można włączyć opcjonalne funkcje.

Czekając na kompilacje polecam obejrzeć wideo o innych kartach rozszerzeń dla CM4

Trzeba pamiętać aby po każdej aktualizacji kernela z repozytorium na nowo pobrać źródła i ponownie przekompilować i skonfigurować obsługę.

Instalacja OpenMediaVault

Teraz można pomyśleć nad konfiguracją różnych usług jak samba czy nextcloud lub po prostu pomyśleć o NAS-ie z użyciem OpenMediaVault.

Oprogramowanie można zainstalować za pomocą poniższego polecenia, które uruchomi skrypt i proces instalacji.

Opis instalacji i konfiguracji wg tego skryptu znajdziecie pod adresem pimylifeup.com

wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash

Po wydaniu polecenia zostaną zainstalowane niezbędne pakiety oraz sam OMV. Instalacja zajmie trochę czasu. Podczas instalacji może rozłączyć połączenie bo skrypt konfiguruje wszystkie dostępne interfejsy sieciowe. Dlatego warto ustawić na sztywno na swoim routerze adres IP. W razie czego należy ponowić polecenie a wtedy wszystko zakończy się poprawnie.

719565

Jeśli wszystko pójdzie dobrze pozostanie nam tylko zrestartować system.

sudo reboot

Po ponownym uruchomieniu możemy już zalogować się do panelu administracyjnego wchodząc na adres IP naszej maliny. Dane do logowania to użytkownik admin i hasło openmediavault

719569

Teraz możemy stworzyć system plików na dyskach oraz udostępnić je za pomocą jednej z usług np. Samba.

Testy transferów z CM4, CM4IO i Marvell 9125

Postanowiłem przy okazji sprawdzić jakie transfery jesteśmy w stanie wyciągnąć na takim zestawie. Nie spodziewałem się szaleństwa na tym kontrolerze ale liczyłem na maksymalną przepustowość dla karty Gigabitowej w mojej sieci. Podłączyłem jeden dysk SSD GoodRam SSDPB-S400U-120-80 do testów i udostępniłem go w usłudze samba.

Test wykonany za pomocą narzędzia Helios LanTest
Test wykonany za pomocą narzędzia Helios LanTest

Przy kopiowaniu w eksploratorze Windows łącze 1GbE wysycało się. Zdarzały się zazwyczaj pod koniec kopiowania spadki do około 60% przepustowości.

kopiowanie w eksploratorze Windows
kopiowanie w eksploratorze Windows

Przetestowałem również lokalnie

  • hdparm 303MB/s
  • dd 4k 41 MB/s
  • dd 169MB/s

Wg producenta dysku odczyt/zapis maksymalny to 550/530MB/s.

719579

Podsumowując. Wg mnie Raspberry Pi Compute Mode 4 radzi sobie całkiem nieźle z obsługą i prędkością wymiany danych poprzez złącze PCIe i sprawdzi się bardzo dobrze jako serwer plików do domu ale również bez problemu skorzystamy z konteneryzacji Docker'a instalując popularne usługi i oprogramowania jak Nextcloud, serwer www itp.. Brakuje póki co dobrej obudowy ale zawsze można spróbować zaprojektować i mając dostęp do drukarki 3D wydrukować sobie ją.

bDYSkmNj