Den besten Widerstand gegen Korruption auf einer einzelnen SD-Karte bietet BTRFS in RAID1 Modus mit automatischem Schrubblauf alle vordefinierten Zeiträume.
Die Vorteile:
- Bewahrung der Fähigkeit, RW zum Dateisystem zu schreiben
- modernes, voll funktionsfähiges Dateisystem mit sehr nützlichen Optionen für ein RPi, wie transparente Komprimierung und Snapshots
- entworfen (unter anderem) für Flash-Speicher
So geht's:
Ich betreibe meinen RaspberryPi auf ArchARM Linux und meine Karte befindet sich im SD-Lesegerät, also ändern Sie diese Anweisungen entsprechend für andere Distributionen und /dev-Schnittstellen.
Hier ist ein Beispiel für ein Partitionslayout:
/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap
Um btrfs in RAID1 zu bekommen, erstellen Sie das Dateisystem wie folgt:
mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3
Dann rsync -aAXv
dazu Ihr zuvor gesichertes System.
Damit es von BTRFS in raid1 bootet, müssen Sie initramfs ändern . Daher müssen Sie Folgendes tun, während Ihr System noch auf Ihrem alten Dateisystem läuft.
Raspberry verwendet mkinitcpio normalerweise nicht, daher müssen Sie es installieren. Dann müssen Sie „btrfs“ zum MODULES-Array in mkinitcpio.conf hinzufügen und initramfs mit
neu erstellenmkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION
Um zu wissen, was Sie anstelle von YOUR_KERNEL_VERSION eingeben müssen, führen Sie
ausls /lib/modules
Wenn Sie den Kernel aktualisieren, MÜSSEN Sie initramfs neu erstellen, BEVOR Sie neu starten.
Dann müssen Sie die Boot-Dateien von RPi ändern.
In cmdline.txt müssen Sie
habenroot=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs
und in config.txt müssen Sie
hinzufügeninitramfs initrd 0x01f00000
Wenn Sie das alles getan und Ihr btrfs RAID1-System erfolgreich gebootet haben, müssen Sie nur noch das regelmäßige Scrubben (alle 3-7 Tage) entweder mit dem systemd-Timer (bevorzugt) oder cron (dcron) wie folgt einrichten:
btrfs scrub start /
Es wird auf Ihrem Dateisystem ausgeführt, vergleicht die Prüfsummen aller Dateien und repariert sie (ersetzt durch die richtige Kopie), wenn es eine Beschädigung findet.
Die Kombination aus BTRFS RAID1, Single Medium und Raspberry Pi macht dieses ziemlich geheimnisvolle Zeug. Es hat einige Zeit und Arbeit gekostet, alle Teile zusammenzusetzen, aber hier ist es.
Ich würde einen anderen Weg gehen und nur ein schreibgeschütztes Dateisystem verwenden. Ich bekomme meinen Himbeer-Pi nie stabil genug, wenn ich ein Root-Dateisystem mit Lese- und Schreibzugriff auf der SD-Karte verwende. Sie können entweder einfach Ihren Root per Kernel-cmdline (ro) booten oder ein initramfs mit Huckepack verwenden, das Ihr komplettes System enthält.
Beide können mit meinem hausgemachten Build-System OpenADK erstellt werden. (http://www.openadk.org)
Nun, Flash-Speicher ist aus mehreren Gründen wünschenswerter als Magnetspeicher, aber für diese Anwendung sage ich hauptsächlich, weil es keine beweglichen Teile gibt. Abgesehen davon glaube ich nicht, dass es ein "korruptionssicheres" Dateisystem gibt, aber es gibt einige robuste Dateisysteme (ext4 ist eines davon) sowie einige Taktiken, um die Korruption zu mindern.
RAM-Disk
Wenn das Bild des RPi nicht hat zu ändern, und es hört sich so an, als würde dies nicht der Fall sein. Wenn nichts versucht (oder versuchen sollte), auf die Festplatte zu schreiben, versuchen Sie, ein Root-Dateisystem zu verwenden, das zum Entpacken in den RAM erstellt wurde. Die Idee dabei ist, dass Sie beim Booten ein komprimiertes Root-Dateisystem haben, das in den Arbeitsspeicher entpackt wird. Alle Änderungen erfolgen auf der RAM-Disk, sodass praktisch kein Schreiben auf die SD-Karte erfolgt, sondern nur beim Booten gelesen wird. Dies sollte die Lese-/Schreibvorgänge auf Ihrem Laufwerk reduzieren und dessen Lebensdauer erhalten. Dies ähnelt dem, was getan wird, wenn Sie Linux von einer CD booten, und ist eines der ersten Dinge, die passieren, wenn Linux bootet.