sbcs:raspberry_pi:nvme_ssd_s_nutzen_pi_5
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
sbcs:raspberry_pi:nvme_ssd_s_nutzen_pi_5 [2024/01/24 19:01] – removed - external edit (Unknown date) 127.0.0.1 | sbcs:raspberry_pi:nvme_ssd_s_nutzen_pi_5 [2024/01/24 19:01] (current) – ↷ Links adapted because of a move operation dominik | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== NVMe SSD's nutzen (Pi 5) ===== | ||
+ | > **<color # | ||
+ | |||
+ | ===== YouTube Video #79 ===== | ||
+ | {{youtube> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Erklärungen ===== | ||
+ | ==== PCIe ==== | ||
+ | PCI Express (PCIe) ist ein serielles Hochgeschwindigkeitsübertragungsprotokoll für die Datenübertragung zwischen Hauptplatinen und Peripheriegeräten. Es verwendet differenzielle Signalpaare und Punkt-zu-Punkt-Verbindungen, | ||
+ | ==== NVMe ==== | ||
+ | > **Hinweis** \\ NVMe ist nicht SSD mSATA ! | ||
+ | NVMe (Non-Volatile Memory Express) ist ein Protokoll, das speziell für den Zugriff auf NAND-basierten Flash-Speicher optimiert ist, wie er in modernen Solid-State-Drives (SSDs) verwendet wird. NVMe ermöglicht eine effiziente und parallele Datenübertragung zwischen dem Host (CPU) und der SSD über den PCIe-Bus. Im Gegensatz zu älteren Protokollen wie AHCI reduziert NVMe Latenzen und maximiert die Bandbreite, was zu deutlich schnelleren Lese- und Schreibgeschwindigkeiten führt. NVMe-SSDs werden zunehmend in Hochleistungsrechnern und Datenspeicherlösungen eingesetzt, um die Leistungsfähigkeit von Flash-Speicher optimal zu nutzen. | ||
+ | ==== M.2 (NGFF) ==== | ||
+ | M.2 (= NGFF = Next Generation Form Factor) ist ein Formfaktor und Schnittstellenstandard für kompakte, kleine Erweiterungskarten, | ||
+ | ==== M Key ==== | ||
+ | "M Key" ist eine Bezeichnung für einen der physischen Schlüssel (Keying) in M.2-Steckplätzen. Der M.2-Steckplatz selbst kann verschiedene Schlüssel oder Buchsen haben, um die Kompatibilität mit unterschiedlichen Arten von M.2-Modulen sicherzustellen. | ||
+ | In einem M.2-Steckplatz mit einem M Key ist der Schlitz so gestaltet, dass er speziell für M.2-Module mit einem M Key passt. M-Key-Module können verschiedene Arten von Schnittstellen verwenden, einschließlich PCIe (PCI Express) und SATA, und werden häufig für Hochleistungsgeräte wie NVMe-SSDs verwendet. | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ===== Hinweise ===== | ||
+ | * Bevor eine NVMe oder der Adapter dazu installiert wird, immer den Pi stromlos machen! | ||
+ | * Die WD Green SSDs sind laut Pimoroni nicht zu empfehlen. Laufwerke wie das SN350 führen wohl öfters zu Problemen am CM4 und Pi 5. | ||
+ | * Es empfiehlt sich erstmal von SD zu booten, um den [[sbcs: | ||
+ | |||
+ | ===== Hardware ===== | ||
+ | Für den Betrieb am Pi wird ein NVMe Adapter benötigt, der an den PCIe Port angeschlossen wird. | ||
+ | Der USB auf NVMe Adapter dient vornehmlich zum Bespielen einer NVMe unter Windows. Er funktioniert aber auch mit einem Raspberry Pi - allerdings mit Geschwindigkeitseinbußen. Und er wird behandelt wie ein USB-Stick. | ||
+ | |||
+ | ==== NVMe Base ==== | ||
+ | {{: | ||
+ | |||
+ | * https:// | ||
+ | * Unterstützt alle gängigen Formate von 2230 bis 2280 | ||
+ | ==== HatDrive! ==== | ||
+ | {{: | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * Zwei Versionen verfügbar | ||
+ | |||
+ | ==== Typ X 1001 ==== | ||
+ | **TBD** | ||
+ | ==== USB auf NVMe Adapter ==== | ||
+ | {{: | ||
+ | |||
+ | Solche Adapter gibt es bei eBay / Amazon für 10-15€. Zu finden unter der Bezeichnung **USB NVMe Adapter**. | ||
+ | ===== Bootloader Update ===== | ||
+ | > **Achtung** \\ Ohne aktuelle Firmware (Bootloader) wird die NVMe erst gar nicht erkannt! | ||
+ | > **Hinweis** \\ Der Bootloader wird auf dem Board selber geflasht. Also selbst bei einem Wechsel von SD / USB / NVMe bleibt er in seiner Version erhalten! | ||
+ | |||
+ | * '' | ||
+ | * Version prüfen \\ '' | ||
+ | pi@Pi5Test: | ||
+ | *** UPDATE AVAILABLE *** | ||
+ | BOOTLOADER: update available | ||
+ | | ||
+ | LATEST: Wed 6 Dec 18:29:25 UTC 2023 (1701887365) | ||
+ | | ||
+ | Use raspi-config to change the release. | ||
+ | </ | ||
+ | * Update durchführen auf eine Version > 06.12.2023 \\ '' | ||
+ | |||
+ | **Alternativ** kann die Firmware auch über '' | ||
+ | * '' | ||
+ | * 6 Advanced Options | ||
+ | * A5 Bootloader Version | ||
+ | * E1 Latest | ||
+ | * Die Frage mit YES beantworten | ||
+ | * Und den Reboot durchführen lassen | ||
+ | |||
+ | ===== Bootloader Konfig ===== | ||
+ | > **Hinweise** \\ 1) Die Bootreihenfolge kann generell wie hier beschrieben eingestellt werden. Kann von NVMe nicht gebootet werden fällt der Pi auf SD-Karte oder USB-Stick zurück. \\ 2) Die Bootreihenfolge lässt sich auch mit '' | ||
+ | |||
+ | Um von NVMe booten zu können, müssen die Bootloader Parameter angepasst werden: | ||
+ | * '' | ||
+ | * '' | ||
+ | * Folgender Eintrag muss ggf. hinzugefügt werden: \\ '' | ||
+ | * Mit '' | ||
+ | * Es kommt dann folgende Ausgabe \\ < | ||
+ | Updating bootloader EEPROM | ||
+ | .... | ||
+ | | ||
+ | UPDATE: Fri 5 Jan 15:57:40 UTC 2024 (1704470260) | ||
+ | BOOTFS: / | ||
+ | '/ | ||
+ | Copying recovery.bin to / | ||
+ | |||
+ | EEPROM updates pending. Please reboot to apply the update. | ||
+ | To cancel a pending update run "sudo rpi-eeprom-update -r" | ||
+ | * Neustart mittels \\ '' | ||
+ | * Sollten diese Settings flasch sein, kommt folgende Fehlermeldung beim Booten: \\ {{: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Grundlegende Tests ===== | ||
+ | |||
+ | ==== PCIe aktivieren ==== | ||
+ | > **Hinweis** \\ Die NVMe wurde trotz fehlendem Eintrag erkannt mit der letzten Firmware. | ||
+ | |||
+ | * '' | ||
+ | * folgenden Eintrag in der Datei ergänzen \\ '' | ||
+ | * Den Editor mit '' | ||
+ | * '' | ||
+ | |||
+ | |||
+ | ==== PCIe checken ==== | ||
+ | * Prüfen kann man den aktivierten PCIe Port mittels '' | ||
+ | pi@Pi5Test: | ||
+ | [ 0.410070] brcm-pcie 1000110000.pcie: | ||
+ | [ 0.530924] brcm-pcie 1000120000.pcie: | ||
+ | </ | ||
+ | * hier werden 2 Host Bridges gelistet. Ist der Port deaktiviert, | ||
+ | |||
+ | * Eine weitere Möglichkeit besteht mit '' | ||
+ | pi@Pi5Test: | ||
+ | 0000: | ||
+ | 0000: | ||
+ | 0001: | ||
+ | 0001: | ||
+ | </ | ||
+ | * Auch hier werden 2 bridges gelistet wenn PCIe aktiviert ist. | ||
+ | ==== PCIe V3 Mode aktivieren ==== | ||
+ | Offiziell unterstützt der Raspberry Pi 5 nur PCIe 2 - der Bus würde als mit 5GB/s arbeiten. Es ist allerdings möglich den PCIe Bus auf die Version 3 einzustellen. In dem Fall arbeitet der Bus mit 10GB/ | ||
+ | |||
+ | * '' | ||
+ | * folgenden Eintrag in der Datei ergänzen \\ '' | ||
+ | * Den Editor mit '' | ||
+ | * '' | ||
+ | |||
+ | ==== PCIe V3 checken ==== | ||
+ | * Prüfen kann man den V3 Mode wieder mit dmesg \\ '' | ||
+ | * Wenn PICe V3 aktiviert ist, läuft ein PCIe Port mit 8.0 GT/s | ||
+ | * PCIe V3 aktiviert \\ <code bash> | ||
+ | pi@Pi5Test: | ||
+ | [ 0.613326] brcm-pcie 1000110000.pcie: | ||
+ | [ 0.733329] brcm-pcie 1000120000.pcie: | ||
+ | </ | ||
+ | * PCIe V2 aktiviert \\ <code bash> | ||
+ | pi@Pi5Test: | ||
+ | [ 0.517003] brcm-pcie 1000110000.pcie: | ||
+ | [ 0.637007] brcm-pcie 1000120000.pcie: | ||
+ | </ | ||
+ | |||
+ | > **Was ist GT/s?** \\ Dazu gibt es hier ein paar Erklärungen : \\ https:// | ||
+ | |||
+ | ==== NVMe prüfen ==== | ||
+ | * '' | ||
+ | pi@Pi5Test: | ||
+ | [ 0.633625] nvme nvme0: pci function 0000: | ||
+ | [ 0.633663] nvme 0000: | ||
+ | [ 0.637575] nvme nvme0: Shutdown timeout set to 8 seconds | ||
+ | [ 0.646457] nvme nvme0: allocated 64 MiB host memory buffer. | ||
+ | [ 1.150493] nvme nvme0: 4/0/0 default/ | ||
+ | [ 1.581354] | ||
+ | [ 4.906692] EXT4-fs (nvme0n1p1): | ||
+ | </ | ||
+ | * '' | ||
+ | pi@Pi5Test: | ||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS | ||
+ | sdb | ||
+ | ├─sdb1 | ||
+ | └─sdb2 | ||
+ | nvme0n1 | ||
+ | └─nvme0n1p1 259:1 0 238.5G | ||
+ | </ | ||
+ | * '' | ||
+ | * -> Beispiel : '' | ||
+ | * grafische Tools | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Verwendung ===== | ||
+ | Es gibt durchaus verschiedene Szenarien zur Einrichtung und Verwendung einer NVMe SSD. | ||
+ | |||
+ | * **Booten von einer NVMe SSD erstellt mit Raspberry Pi Imager** | ||
+ | * Es ist ein [[sbcs: | ||
+ | * [[sbcs: | ||
+ | * [[sbcs: | ||
+ | * [[sbcs: | ||
+ | * Anpassen der config.txt | ||
+ | * Die Anpassung erfolgt unter Windows mit einem Editor (z.B. Notepad) | ||
+ | * Evtl. muss der USB Adapter 1x neu in den USB Port gesteckt werden weil der Pi Imager das Medium auswirft. | ||
+ | * Dann auf der Partition mit dem Namen " | ||
+ | * Die NVMe über einen passenden Adapter am Pi einstecken, SD-Karte bzw. USB-Stick entfernen und den Pi booten. | ||
+ | * **Booten von einer NVMe SSD geklont mittels piclone** | ||
+ | * [[sbcs: | ||
+ | * [[sbcs: | ||
+ | * Anpassen der config.txt | ||
+ | * Die Anpassung erfolgt unter Linux mit einem Editor (z.B. nano) | ||
+ | * '' | ||
+ | * Speichern mittels '' | ||
+ | * [[sbcs: | ||
+ | * **NVMe SSD als zuätzliche Platte verwenden** | ||
+ | * [[sbcs: | ||
+ | * Anpassen der config.txt | ||
+ | * [[sbcs: | ||
+ | |||
+ | |||
+ | |||
+ | ==== Boot (Raspberry Pi Imager) ==== | ||
+ | * Die NVMe in einen passenden [[sbcs: | ||
+ | * Das " | ||
+ | * Als **Raspberry Pi Modell** den **RASPBERRY PI 5** wählen | ||
+ | * Als **Betriebssystem** eine **64Bit Bookworm** Variante wählen (Sonst gibt es u.A. Probleme mit dem Bootloader Update) | ||
+ | * Als **SD-Karte** sollte der USB auf NVMe mit der NVMe SSD angeboten werden | ||
+ | * Schreiben lassen und fertig | ||
+ | * Die NVMe " | ||
+ | ==== Boot (piclone) ==== | ||
+ | * Zunächst mal muss der Pi von einer SD-Karte oder einem USB-Stick booten (64Bit BookWorm Image) | ||
+ | * Mit '' | ||
+ | pi@Pi5Test: | ||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS | ||
+ | sda | ||
+ | ├─sda1 | ||
+ | └─sda2 | ||
+ | nvme0n1 | ||
+ | ├─nvme0n1p1 259:1 0 | ||
+ | └─nvme0n1p2 259:2 0 | ||
+ | * Im Terminal '' | ||
+ | * Oben das aktuelle Bootmedium auswählen (in dem Fall ein USB-Stick) und unten die NVMe als Ziel: \\ {{: | ||
+ | * '' | ||
+ | * Dann auf **Start** klicken, die Sicherheitsfrage mit '' | ||
+ | * piclone schließen | ||
+ | * Das System herunter fahren mittels '' | ||
+ | * Das System stromlos machen, den USB-Stick (oder die SD-Karte) entfernen | ||
+ | * Strom wieder dran und der Pi sollte von der NVMe booten :-) | ||
+ | ==== SSD Mount ==== | ||
+ | * UUID ermitteln \\ '' | ||
+ | pi@Pi5Test: | ||
+ | / | ||
+ | /dev/sda2: LABEL=" | ||
+ | /dev/sda1: LABEL_FATBOOT=" | ||
+ | </ | ||
+ | * Einen Ordner erstellen in den die NVMe gemountet werden kann \\ '' | ||
+ | * Die Zugriffsrechte auf den aktuellen User (hier pi) umbiegen \\ '' | ||
+ | * Die fstab Datei anpassen um das Dateisystem automatisch einzubinden \\ '' | ||
+ | * Datei speichern mit '' | ||
+ | * '' | ||
+ | * Sollte die SSD nicht eingebunden werden unter ''/ | ||
+ | |||
+ | ===== Speedtest ===== | ||
+ | |||
+ | ==== fio ==== | ||
+ | * '' | ||
+ | * Eine Datei anlegen \\ '' | ||
+ | #!/bin/bash | ||
+ | echo " | ||
+ | rm -rf $1/ | ||
+ | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=$1/ | ||
+ | echo " | ||
+ | rm -rf $1/ | ||
+ | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=$1/ | ||
+ | echo " | ||
+ | rm -rf $1/ | ||
+ | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=$1/ | ||
+ | echo " | ||
+ | rm -rf $1/ | ||
+ | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=$1/ | ||
+ | rm -rf $1/ | ||
+ | </ | ||
+ | * Die Datei ausführbar machen \\ '' | ||
+ | * Das zu testende Speichermedium sollte am Pi angeklemmt sein und als Dateisystem ext4 haben. Testen kann man das mit '' | ||
+ | pi@Pi5Test: | ||
+ | NAME FSTYPE FSVER LABEL UUID | ||
+ | nvme0n1 | ||
+ | ├─nvme0n1p1 vfat FAT32 bootfs EF6E-C078 | ||
+ | └─nvme0n1p2 ext4 | ||
+ | </ | ||
+ | * Hinweis: Normalerweise sollte man ein Laufwerk nicht testen, wenn es als Bootmedium verwendet wird. Aber für einen einfachen Test auf einem unbelasteten Pi 5 sollte es trotzdem klappen :-) | ||
+ | * Test starten mit '' | ||
+ | pi@Pi5Test: | ||
+ | Testing Sequential READ | ||
+ | READ: bw=785MiB/s (823MB/s), 785MiB/ | ||
+ | Testing Random | ||
+ | READ: bw=799MiB/s (838MB/s), 799MiB/ | ||
+ | Testing Sequential WRITE | ||
+ | WRITE: bw=671MiB/s (704MB/s), 671MiB/ | ||
+ | Testing Random | ||
+ | WRITE: bw=698MiB/s (731MB/s), 698MiB/ | ||
+ | </ | ||
+ | * USB-Sticks und SD-Karten werden normalerweise direkt als Laufwerke eingehängt: | ||
+ | pi@Pi5Test: | ||
+ | NAME FSTYPE FSVER LABEL UUID | ||
+ | sda | ||
+ | ├─sda1 | ||
+ | └─sda2 | ||
+ | mmcblk0 | ||
+ | ├─mmcblk0p1 vfat FAT32 bootfs EF6E-C078 | ||
+ | └─mmcblk0p2 ext4 | ||
+ | nvme0n1 | ||
+ | ├─nvme0n1p1 vfat FAT32 bootfs EF6E-C078 | ||
+ | └─nvme0n1p2 ext4 | ||
+ | </ | ||
+ | * Hier ein Beispiel mit USB-Stick (sda), SD-Karte (mmcblk0) und NVMe (nvme0n1). | ||
+ | * Sollte ein Laufwerk nicht gemountet werden, muss es wie folgt gemountet werden (dies ist nur ein Beispiel!): | ||
+ | * '' | ||
+ | * '' | ||
+ | * Anschließend kann das Medium mittels '' | ||
+ | * Unmount mittels '' | ||
+ | |||
+ | |||
+ | ==== LibreOffice ==== | ||
+ | * Das ist eine 500MB Installation ... | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== SMART Test ===== | ||
+ | * '' | ||
+ | |||
+ | ==== nvme ==== | ||
+ | * Übersicht anzeigen \\ '' | ||
+ | * Error Log ansehen \\ '' | ||
+ | pi@Pi5Test: | ||
+ | smartctl 7.3 2022-02-28 r5338 [aarch64-linux-6.1.0-rpi7-rpi-2712] (local build) | ||
+ | Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org | ||
+ | |||
+ | === START OF SMART DATA SECTION === | ||
+ | Error Information (NVMe Log 0x01, 16 of 16 entries) | ||
+ | Num | ||
+ | 0 | ||
+ | 1 | ||
+ | 2 | ||
+ | </ | ||
+ | * Gesamtstatus ansehen \\ '' | ||
+ | pi@Pi5Test: | ||
+ | smartctl 7.3 2022-02-28 r5338 [aarch64-linux-6.1.0-rpi7-rpi-2712] (local build) | ||
+ | Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org | ||
+ | |||
+ | === START OF SMART DATA SECTION === | ||
+ | SMART overall-health self-assessment test result: PASSED | ||
+ | </ | ||
+ | |||
+ | ==== nvme ==== | ||
+ | * Geräteliste ausgeben \\ '' | ||
+ | pi@Pi5Test: | ||
+ | Node Generic | ||
+ | --------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- | ||
+ | / | ||
+ | </ | ||
+ | * Übersicht anzeigen \\ '' | ||
+ | pi@Pi5Test: | ||
+ | Smart Log for NVME device: | ||
+ | critical_warning | ||
+ | temperature | ||
+ | available_spare | ||
+ | available_spare_threshold | ||
+ | percentage_used | ||
+ | endurance group critical warning summary: 0 | ||
+ | Data Units Read : 1,697,108 (868.92 GB) | ||
+ | Data Units Written | ||
+ | host_read_commands | ||
+ | host_write_commands | ||
+ | controller_busy_time | ||
+ | power_cycles | ||
+ | power_on_hours | ||
+ | unsafe_shutdowns | ||
+ | media_errors | ||
+ | num_err_log_entries | ||
+ | Warning Temperature Time : 0 | ||
+ | Critical Composite Temperature Time : 0 | ||
+ | Thermal Management T1 Trans Count : 0 | ||
+ | Thermal Management T2 Trans Count : 0 | ||
+ | Thermal Management T1 Total Time : 0 | ||
+ | Thermal Management T2 Total Time : 0 | ||
+ | </ | ||
+ | * Error Log ansehen \\ '' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Sonstiges ===== | ||
+ | Diese Punkte sind normal nicht Bestandteil vom YT Video! | ||
+ | ==== Downgrade des Bootloaders ==== | ||
+ | > **<color # | ||
+ | |||
+ | * Update eeprom \\ '' | ||
+ | * Eine Liste mit älteren Bootloader Ständen findet man unter ''/ | ||
+ | * rpi-boot-eeprom Releases \\ https:// | ||
+ | |||
+ | ===== Links ===== | ||
+ | * PCIe - PCI Express \\ https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * Raspberry Pi Bootoptions \\ https:// | ||
+ | * SMART Werte von NVMe SSDs auslesen \\https:// | ||