Ich werde die komplette Installation meines Jetson Nano von der micro SD-Karte auf eine SSD Festplatte umziehen. Ich erhoffe mir davon deutlich mehr Performance und weniger Probleme durch defekte mirco SD-Karten. Denn aktuell setzte ich den Nano auf meinem Donkey Car ein. Dort zeichne ich viele 10.000 Bilder und Json Dateien auf die die mirco SD-Karte bei den Lese- und Schreibe- Zugriffen stark beanspruchen. Auch ist die SSD Festplatte ca 4x so schnell wie die micro SD-Karte wenn es darum geht die Aufgezeichneten Trainingsdateien zu kopieren etc.
Danksagung:
An dieser Stelle möchte ich mich bei JetsonHacks bedanken für die perfekte Anleitung. Diese findet sich im original auf der folgenden Seite:
URL: jetson nano run on usb drive
Komponentenliste
Die Wahl ist auf die folgende USB 3.0 SSD Festplatte gefallen, da diese einfach via USB Kabel an den Jetson Nano angeschlossen werden kann und von der Baumform sehr kompakt ist also gut auf mein Donkey Car passt.
Zusammen mit der SSD Festplatte und den doch sehr Performance hungrigen AI Beispielen musste auch ein starkes Netzteil angeschafft werden. Bei mir ist die Wahl auf ein 5V Netzteil mit 5A gefallen. Mit diesem hatte ich dann keine sporasichen Abstürze mehr.
Das nachfolgende Netzteil sollte funktionieren. Leider habe ich das Netzteil das ich verwende nicht mehr bei Amazon gefunden.
Für den mobilen Einsatz empfehle ich die folgende PowerBank die sich bei mir sehr bewährt hat. Interessant ist bei dieser der USB-C Anschluss der 5V und 5A liefert und damit ideal für die Energieversorgung des Jetson Nano ist.
Installation
Als erstes wird von Jetson Hacks das repository rootOnUSB herunter geladen. Dieses Repository enthält alles was benötigt wird um ein neues Boot-Image mit USB 3.0 Unterstützung zu erstellen.
Befehl: git clone https://github.com/JetsonHacksNano/rootOnUSB
Befehl: cd rootOnUSB
Bevor jetzt der neue Kernel gebaut wird erstelle ein Backup von dem original Boot-Image. Dieses findest Du im Ordner /boot/ und der Name des Boot-Image lautet „Image“. Kopiere die Datei in einen BackUp Ordner z. B. im Verzeichnis /home/<User Name>/BackUp.
Mit dem folgenden Befehl wird der neue Kernel mit USB 3.0 Unterstützung gebaut. Der Bau des neuen Boot-Images dauert ca. 45 Minuten.
Befehl: ./buildKernel.sh
SSD Festplatte vorbereiten
Während der Kernel gebaut wird kann parallel die SSD Festplatte vorbereitet werden. Schließe diese jetzt am Jetson Nano an und gehe in das Programm Disks. Im Programm Disks wird dann die SSD Festplatte auswählt.
Das nachfolgende Bild zeigt das Programm Disks und die markierte SSD Festplatte. Rechts oben in dem Menü wird dann der Punkt „Format Disk“ ausgewählt.
Das nächste Fenster zeigt dann das Menü für das Formatieren der Festplatte. Dort wie gezeigt den Punkt „Compatible with modern systems and hards disks > 2TB“ auswählen und auf Format tippen.
Es erscheint eine Meldung ob wir uns wirklich sicher sind die Festplatte formatieren zu wollen. Hier wieder auf Format klicken.
Nach dem die Festplatte formatiert ist muss noch eine Partition angelegt werden. Dazu dann wieder unter Disks die SSD Festplatte auswählen und auf das „+“ links im Fenster drücken um eine Partition anzulegen.
Anschließend erscheint dann folgender Dialog. Hier wird die Größe der Festplatte festgelegt.
Anschließend links oben auf Next klicken.
Im jetzt erscheinenden Dialog kann ein Label für die Partition festgelegt werden. Ich habe die Festplatte „NanoUSBSSD“ genannt. Weiter muss noch das Filesystem „Ext4“ gewählt werden. Das ist der erste Punkt im Abschnitt „Type“ wie im nachfolgenden Bild zu sehen ist. Anschließend rechts oben auf Create tippen.
Nach wenigen Sekunden ist die Partition mit dem Filesystem Ext4 erstellt und der Status der SSD sollte „OK“ anzeigen.
Jetzt ist die Festplatte vorbereitet und die Erstellung des Kernel läuft sicher noch.
Das neue Image booten
Nach dem der Kernel bzw. das Boot-Image erfolgreich gebaut wurde kopiert das Skript „buildKernel.sh“ dieses Image auch gleich an die richtige Stelle in das /boot/ Verzeichnis.Auch hier macht es Sinn das neu gebaute Image sich zu sichern. so muss man falls notwendig später einmal das Image nicht neu bauen sondern hat es gleich zur Hand.
Das nachfolgende Bild zeigt die Ausgabe nach dem das Skript durchgelaufen ist.
Jetzt ist der Augenblick gekommen das der Nano neugestartet werden kann.
Befehl: sudo reboot
Dateien auf die SSD Festplatte kopieren
Nach dem der Nano mit dem neu gebauten image gebooted hat werden alle Dateien von der micro SD-Karte auf die SSD Festplatte kopiert. Auch hier gibt es wieder ein Skript von Jetson Hacks das uns diese Arbeit abnimmt.
Bitte wieder in den Ordner rootOnUSB wechseln.
Befehl: cd rootOnUSB
Jetzt kann der Kopiervorgang mit dem folgenden Befehl gestartet werden.
Befehl: ./copyRootToUSB.sh -v <Volume Label>
Bei mir sieht der Aufruf mit dem vergebeben Label der SSD Festplatte wie folgt aus.
Befehl: ./copyRootToUSB.sh -v NanoUSBSSD
Der Kopiervorgang dauert ein paar Minuten.
Boot Reihenfolge ändern
Damit auch wirklich das Betriebssystem von der SSD Festplatte geladen wird muss noch eine Anpassung vorgenommen werden. Dazu bitte die Datei „/boot/extlinux/extlinux.conf“ in einem Text Editor öffnen und wie folgt abändern.
Befehl: sudo nano /boot/extlinux/extlinux.conf
Dazu einfach den vorhandenen Eintrag der micro SD-Karte kopieren und wie gezeigt anpassen. Wichtig ist, dass das neue Bootlaufwerk nicht mehr die micro SD-Karte ist sondern das Laufwerk /dev/sda1. Auch muss der original Eintrag mit der micro SD-Karte von „pimary“ auf z. B. „SD_Karte“ geändert werden.
TIMEOUT 30
DEFAULT primary
MENU TITLE p3450-porg eMMC boot options
LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
INITRD /boot/initrd
APPEND ${cbootargs} rootfstype=ext4 root=/dev/sda1 rw rootwait
LABEL sd-card
MENU LABEL primary kernel
LINUX /boot/Image
INITRD /boot/initrd
APPEND ${cbootargs} rootfstype=ext4 root=/dev/mmcblk0p1 rw rootwait
Im folgenden Bild ist die Änderung zu sehen.
Jetzt kann der Nano neu gestartet werden und das Betriebssystem sollte von der SSD Festplatte geladen werden.
Befehl: sudo reboot
Das die Umstellung von der mirco SD-Karte auf die SSD Festplatte geklappt hat erkennt man daran, dass mit dem Befehl „df -h“ das root Verzeichnis ca. 449 GB Speicherplatz anzeigt.
Befehl: df -h
Nachfolgend ist die Ausgabe von meinem Jetson Nano zu sehen.
(env) donkey@donkey:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 449G 19G 408G 5% /
devtmpfs 1,8G 0 1,8G 0% /dev
tmpfs 2,0G 12K 2,0G 1% /dev/shm
tmpfs 2,0G 18M 2,0G 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 2,0G 0 2,0G 0% /sys/fs/cgroup
tmpfs 397M 120K 397M 1% /run/user/1000
/dev/mmcblk0p1 30G 18G 11G 64% /media/donkey/847320a9-f217-4c2b-826c-2db9a77f6c52
(env) donkey@donkey:~$
Zusammenfassung
Eine großes Dank geht an Jetson Hacks für die sehr gute Anleitung wie der Jetson Nano von einer micro SD-Karte auf eine USB SSD Festplatte umgestellt werden kann. Ich freue mich jetzt sehr darauf mein Donkey Car mit der SSD Festplatte betreiben zu können. So habe ich nicht die ständigen Probleme das die micro SD-Karte die ständigen Lese- / Schreibe- Zugriffe nicht verträgt. Auch ist die Performance um ein vielfaches besser.
Spannend wäre es zu sehen, wie man so eine aktuelle Nano SD read-only bekommt…