Herausgefunden, warum e2fsimage
abstürzt. Es wird durch einen int32-Überlauf verursacht, wenn die Bildgröße größer als 4 GB ist. Die Lösung besteht also darin, die erforderlichen Blöcke und Inodes zu zählen, die Loop-Datei ( truncate
& mke2fs
) zu erstellen und dann e2fsimage
mit -n
argument zu verwenden (damit das loopfile nicht erstellt wird, sondern das bereits erstellte).
Wie erstelle ich ein ext2-Image ohne Superuser-Rechte?
Ich muss mehrere ext2-Bilder erstellen. Der naheliegendste Weg ist, ein Bild zu erstellen, es zu mounten und den Inhalt zu kopieren. Es sind jedoch zwei Mal root-Berechtigungen erforderlich (um die Dateien festzulegen und das Image zu mounten). Ich habe auch zwei Werkzeuge zum Erzeugen von Bildern gefunden: e2fsimage & genext2fs.
genext2fs speichert das Bild während des Generierens in den RAM-Speicher, aber die Größe eines meiner Bilder beträgt ~ 30GiB.
e2fsimage stürzt mit einigen Werten der Bildgröße ab.
Wie kann ich also meine Bilder erzeugen? Es wäre schön, wenn das Tool die Bildgröße selbst berechnet.
3 Antworten auf die Frage
Das Erstellen eines Images erfordert kein Root-Privileg. Hier ein Beispiel, um ein ext2-Image zu erstellen:
dd if=/dev/zero of=./MyDisk.ext2 bs=512 count=20480 mkfs.ext2 ./MyDisk.ext2
Das Root-Privileg ist jedoch erforderlich, um das Gerät bereitzustellen:
mkdir MyDisk sudo mount ./MyDisk.ext2 MyDisk
mke2fs -d
minimal lauffähiges Beispiel ohne sudo
mke2fs
ist Teil des e2fsprogs-Pakets. Es wurde vom berühmten Linux-Kernel-Dateisystem-Entwickler Theodore Ts'o geschrieben, der ab 2018 bei Google ist. Die Quelle des Upstreams befindet sich unter kernel.org unter: https://git.kernel.org/pub/scm/fs/ext2 / e2fsprogs Dieses Repository kann daher als eine Referenzanwenderimplementierung von ext-Dateisystemoperationen betrachtet werden:
#!/usr/bin/env bash set -eu root_dir=root img_file=img.ext2 # Create a test directory to convert to ext2. mkdir -p "$root_dir" echo asdf > "$/qwer" # Create a 32M ext2 without sudo. # If 32M is not enough for the contents of the directory, # it will fail. rm -f "$img_file" mke2fs \ -L '' \ -N 0 \ -O ^64bit \ -d "$root_dir" \ -m 5 \ -r 1 \ -t ext2 \ "$img_file" \ 32M \ ; # Test the ext2 by mounting it with sudo. # sudo is only used for testing. mountpoint=mnt mkdir -p "$mountpoint" sudo mount "$img_file" "$mountpoint" sudo ls -l "$mountpoint" sudo cmp "$/qwer" "$/qwer" sudo umount "$mountpoint"
Die Schlüsseloption lautet -d
, welches Verzeichnis für das Image verwendet werden soll, und es ist eine relativ neue Ergänzung zu v1.43 im Commit 0d4deba22e2aa95ad958b44972dc933fd0ebbc59
Daher funktioniert es auf Ubuntu 18.04 "out of the box", das e2fsprogs 1.44.1-1 hat, nicht aber Ubuntu 16.04, das bei 1.42.13 liegt.
Wir können dies jedoch genauso wie Buildroot tun und auf Ubuntu 16.04 problemlos aus dem Quellcode kompilieren:
git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git cd e2fsprogs git checkout v1.44.4 ./configure make -j`nproc` ./misc/mke2fs -h
Wenn mke2fs
fehlschlägt mit:
__populate_fs: Operation not supported while setting xattrs for "qwer" mke2fs: Operation not supported while populating file system
Wenn Sie die Option hinzufügen:
-E no_copy_xattrs
Dies ist beispielsweise erforderlich, wenn sich das Stammverzeichnis in NFS oder tmpfs
anstelle von extX befindet, da diese Dateisysteme keine erweiterten Eigenschaften zu haben scheinen .
mke2fs
wird oft mit einem symbolischen Link verknüpft mkfs.extX
, und man mke2fs
sagt, dass, wenn Sie einen Anruf mit einem solchen Symlink verwenden, dies -t
impliziert wird.
Wie ich dies herausgefunden habe und wie ich zukünftige Probleme lösen kann: Buildroot generiert Ext2-Images ohne Sudo, wie hier gezeigt, also habe ich nur den Build ausgeführt V=1
und die Befehle aus dem Image-Generierungsteil extrahiert, der am Ende kommt. Gutes altes Copy Paste hat mich nie versagt.
TODO: Beschreibe, wie die folgenden Probleme gelöst werden können:
- Erstellen Sie im Besitz von Sudo-Dateien. Buildroot macht es.
- Berechnen Sie automatisch die minimal erforderliche Größe. Die anfängliche Schätzung
du
für die Dateigröße undfind . | wc
für die Verzeichnisstruktur, die mit 32 MB (kleinere Fehler) minimieren und dann verdoppeln, bis der Befehl funktioniert, ist wahrscheinlich ein sehr anständiger Ansatz. Buildroot pflegte dies zu tun, hielt aber aus irgendeinem Grund an, war aber leicht selbst zu implementieren. - Extrahieren Sie bequem alle Dateien von der Partition:
Mehrere Partitionen in einer Bilddatei
Verwandte Probleme
-
4
Wie kann ich ein ISO-CD-Image auf einem Mac in das bin / cue-Format konvertieren?
-
3
Gibt es eine Festplatten-Imaging-Software für Windows, die kostenlos oder Open Source ist?
-
5
Mit welchen Dateisystemen kann Google Chrome OS arbeiten?
-
4
Lesen Sie die OS X-Partition von Windows 7
-
3
Mounten Sie ext3fs in Windows
-
3
Sollte ich VFAT oder ext3 für eine externe 1-TB-USB-Festplatte verwenden?
-
1
NFS-Server für Windows
-
1
µTorrent erwähnt, dass ich nicht genug Platz habe, aber ich?
-
2
NTFS5-Dateisystem in Windows XP
-
5
Was ist mit WinFS passiert?