Wie erstelle ich ein ext2-Image ohne Superuser-Rechte?

1612
Equidamoid

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.

5

3 Antworten auf die Frage

2
Equidamoid

Herausgefunden, warum e2fsimageabstü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 e2fsimagemit -nargument zu verwenden (damit das loopfile nicht erstellt wird, sondern das bereits erstellte).

Haben Sie dafür einen Fehlerbericht und / oder Patch geschickt? Toby Speight vor 6 Jahren 1
Ich bezweifle, dass ich es getan habe. Es tut uns leid. Equidamoid vor 6 Jahren 0
1
مصطفی

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 
1
Ciro Santilli 新疆改造中心 六四事件 法轮功

mke2fs -d minimal lauffähiges Beispiel ohne sudo

mke2fsist 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" 

GitHub Upstream .

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 mke2fsfehlschlä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 tmpfsanstelle von extX befindet, da diese Dateisysteme keine erweiterten Eigenschaften zu haben scheinen .

mke2fswird oft mit einem symbolischen Link verknüpft mkfs.extX, und man mke2fssagt, dass, wenn Sie einen Anruf mit einem solchen Symlink verwenden, dies -timpliziert 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=1und 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:

Mehrere Partitionen in einer Bilddatei

Siehe hierzu: https://stackoverflow.com/questions/10949169/wie-zu-erstellen-einer-multi-partition-sd-image-ohne-wurzelberechtigten/52850819#52850819