Bei der Installation von Raspbian müssen Sie zunächst das Dateisystem so erweitern, dass es sich über die gesamte SD-Karte erstreckt. Funktioniert super. Aber was ist, wenn ich beim Erstellen eines Disk-Images Speicherplatz sparen möchte? Kann ich die Erweiterung rückgängig machen und ein kleines Disk-Image erhalten, mit dem ich mein System auf andere SD-Karten kopieren und dann auf diesen erneut erweitern kann?
7
Antworten:
[Wenn Sie nur die Partition auf der Karte verkleinern möchten, gibt es eine einfachere Möglichkeit als hier beschrieben, indem Sie zuerst
resize2fs
das Dateisystem verwenden und dannfdisk
die Partition verkleinern. Es sollte online viele Beispiele dafür geben, z. B. unter Unix und Linux . Bei der folgenden Methode wird ein neues, kleineres Kartenbild erstellt. In beiden Fällen können Sie dies nicht mit einem laufenden System tun.]Sie können ein Geräte-Image nicht verkleinern (obwohl Sie ein einzelnes Dateisystem mit verkleinern können
resize2fs
), aber Sie können eines von beliebiger Größe erstellen und den Inhalt eines anderen duplizieren. Ich werde dies in Bezug auf Raspbian diskutieren, aber es ist das gleiche für jedes andere GNU / Linux-System.Ein Geräte-Image ist für unsere Zwecke eine vollständige Byte-für-Byte-Kopie eines bootfähigen Gerätemediums wie einer SD-Karte, die keine oder mehrere Dateisystempartitionen enthalten kann. Dies unterscheidet sich von einem Dateisystem-Image , bei dem es sich um eine Byte-für-Byte-Kopie einer einzelnen Partition handelt. Weitere Informationen zu diesen wichtigen Unterscheidungen finden Sie hier.
In dieser Antwort wird beschrieben, wie Sie ein Geräte-Image mit darin enthaltenen Dateisystempartitionen erstellen. Diese Partitionen sind jedoch leer. Sie müssen dann den Inhalt jeder Partition gemäß meiner anderen Antwort hier kopieren . Dies ist die flexibelste Methode.
Einige dieser Befehle müssen root ausgeführt werden, daher empfehle ich Ihnen nur
su root
. Sie können das pi selbst verwenden, um dies zu tun, wenn Sie Speicher haben, der groß genug ist.Das Raspbian-Image enthält zwei Partitionen, die erste kleine Boot-Partition und das zweite größere Root-Dateisystem. Es gibt auch eine Partitionstabelle, auch bekannt als. der Master Boot Record (MBR), da dies ein Geräte- Image ist. Der MBR ist kritisch und belegt die ersten 512 Bytes im Bild.
Ein Gerätebild beginnt als leere Datei. Sie müssen entscheiden, wie groß es sein soll.
du -h
unddf
kann in dieser Hinsicht nützlich sein (sieheman du
undman df
; alle Befehle unten haben auch Manpages, die mindestens einen Blick wert sind).Ich werde ein kleines als Beispiel verwenden.
Das sind ~ 40 MiB; Die Gesamtgröße wird durch
bs
* bestimmtcount
, die Standardeinheit ist Bytes. Diese leere Datei kann jetzt als Gerät behandelt werden.Fdisk ist interaktiv und wird feststellen, dass das "Gerät keine erkannte Partitionstabelle enthält". Das erste, was Sie tun müssen, ist eine zu erstellen. Ein MBR-formatiertes Gerät verwendet eine DOS-Partitionstabelle und den
fdisk
Befehl zum Erstellen o.Sie können die leere Tabelle mit sehen p. Wir müssen jetzt die beiden neuen Partitionen mit erstellen n.
Hinweis Ich habe den Standardwert nicht verwendet. 8192 wird in den tatsächlichen Raspbian-Bildern verwendet und scheint bei SD-Karten üblich zu sein. 1 Im Raspbian-Image ist diese Partition ~ 56 MB groß und endet daher bei Sektor 122879. Sie muss nicht so groß sein, aber Sie können das Muster auch duplizieren. In diesem Beispiel ist jedoch nicht genügend Speicherplatz vorhanden, sodass ich 10 MB verwendet habe:
Standardmäßig ist der Partitionstyp "Linux". Das müssen wir ändern.
Nun die zweite Partition.
Beachten Sie erneut, dass ich die Standardeinstellung nicht verwendet habe. Da wir am Anfang leeren Raum gelassen haben, möchte fdisk ihn weiterhin verwenden. Stattdessen habe ich die Nummer für Sektor 2 nach dem letzten Sektor der ersten Partition verwendet, die Sie in der Partitionstabelle finden (es ist die
End
).Für den letzten Sektor habe ich den höchstmöglichen Wert (79999) gewählt, um die gesamte Bilddatei zu füllen.
Sobald dies erstellt ist, sieht die Tabelle folgendermaßen aus:
Das ist alles, was wir hier brauchen, aber um sich gegen Fehler abzusichern, tut fdisk nichts, bis Sie drücken w. An diesem Punkt wird die neue Tabelle ausgeschrieben und beendet. Überprüfen:
Es wird als Gerät mit Dateisystempartitionen erkannt. Diese müssen formatiert werden. Dazu müssen wir dem Betriebssystem die entsprechenden Bereiche der Image-Datei als Dateisysteme angeben. Zuerst:
Diese Offset (
-o
) -Werte sind dieStart
Zahlen aus der Partitionstabelle 8192 und 28672 multipliziert mit der Einheitengröße (512). Jetzt haben wir Gerätepartitionen, die formatiert werden können:Diese Warnung zur Diskettengröße kann ignoriert werden. Der zweite Befehl erzeugt mehr Ausgabe, es sollten jedoch keine Fehler gemeldet werden. Wir können jetzt die Dateisysteme überprüfen; Verwerfen Sie zuerst die Loop-Geräte mit
losetup -D
, und erstellen Sie dann einige Verzeichnisse undmount
die Image-Partitionen dort:Dies sollte keine Fehler melden (wenn Sie eine "überlappende Schleife" erhalten, lesen Sie hier und suchen Sie auf der Seite nach "überlappender Schleife").
one
wird leer sein undtwo
sollte einlost+found
Verzeichnis enthalten.Sie können nun kopieren , was Sie wollen in diese Mount - Punkte, zum Beispiel, können Sie einen pi mit duplizieren könnte
rsync
, gemäß dem anderen Q & A früher verknüpft . Wenn Sie fertig sind, können Sieumount
die Verzeichnisse unddd
test.img auf eine SD-Karte übertragen und verwenden.1. Wenn Sie versuchen, ein anderes Bild / eine andere Karte als eine Raspbian-Karte zu duplizieren, können Sie diese Zahlen erhalten, indem Sie die Partitionstabelle des Bildes / der Karte auf die gleiche Weise wie mit betrachten
fdisk
.2. Im Allgemeinen werden die von fdisk verwendeten Einheiten angezeigt, wenn Sie die Partitionstabelle anzeigen (z. B.
Units: sectors of 1 * 512 = 512 bytes
). Beachten Sie jedoch, dassBlocks
in der Tabelle (wie oben) möglicherweise auch 1 KB angegeben werden. Dies kann verwirrend sein, da die ZahlenStart
und nicht in "Blöcken", sondern in oben angegebenen Einheiten angegeben sind. Hier sind das 1/2 KiB, daher ist der Abstand zwischen diesen Figuren doppelt so groß wie . Nicht alle Versionen tun dies, einige berichten , was sinnvoller ist.End
Blocks
fdisk
Sectors
quelle