Vergrößern Sie ein Dateisystem-Image


7

Ich machte dpkg --configure -ain meinem Debian Keuchen. Und habe diesen Fehler bekommen:

dpkg --configure -a
dpkg: failed to write status record about `libcairo2' to `/var/lib/dpkg/status': No space left on device

Ich werde in eine .imgDatei gechroottet . Was kann ich machen?


Was meinst du mit "in eine IMG-Datei chrooted"?
Stephen Kitt

1
Bitte geben Sie die Ausgabe des df -hBefehls an und ja, was @StephenKitt auch gefragt hat!
Munai Das Udasin

@ MunaiDasUdasin Vielen Dank für Ihre Antwort. Df -h holt mich / wird zu 100% benutzt. StephenKitt Ich habe ein Bild, in das ich mich hineinwühlen kann. Ich meine, mit losetup habe ich es montiert und darin gechrootet. Vielen Dank, dass ich beide die Antwort unter atm versuche
JohnnyBoy

Übrigens @JohnnyBoy gibt es eine praktische Verknüpfung mount -oloop file /path, die das Losetup-Bit automatisch für Sie erledigt.
Sourcejedi

Antworten:


3

Um dies richtig zu machen, müssen Sie:

  1. Erweitern Sie zuerst die .imgDatei.
  2. Als nächstes erweitern Sie das Dateisystem innerhalb.

Der beste Weg, um das erste zu tun, ist mit dd. Aus irgendeinem Grund schreiben manche Leute der Funktionsweise eine Art Geheimnis zu dd, aber es gibt wirklich keine. So fügen Sie beispielsweise ein Loch an das Ende Ihrer .imgDatei an:

dd bs=1kx1k seek=100 of=.img </dev/null

An jedem POSIX - System , das wird gestutzt , die Datei zu 100MiBs. Auf einem GNU-System kann das 1kx1kBit auf nur gekürzt werden M. ddSucht 100 MB in der Datei, trifft beim ersten Lesen auf EOF und schließt die Datei. Es ist eine einzelne Aktion und erfordert keine Lesevorgänge (über die erste leere hinaus) oder Schreibvorgänge - es ist nahezu atomar.

Wenn die Datei zuvor 50 MB groß war, werden ihr jetzt 50 MB mehr zugewiesen. Wenn die Datei zuvor 150 MB groß war, werden die letzten 50 MB vom Schwanz abgeschnitten. Auf einem Dateisystem , das versteht Sparse - Dateien, das angehängte Datei Loch wird keinen Speicherplatz verwenden, wirklich, und wird nur verwendet werden, was notwendig ist , wie Sie es füllen.

Andere Möglichkeiten, dasselbe auf einigen Systemen zu tun:

fallocate -l100M .img
truncate -s100M .img

... beide Befehle werden genau das Gleiche tun dd. Ich empfehle, ddda keines dieser Tools portabel ist, wenn dddas Verhalten POSIX-spezifiziert ist. Wenn Sie erst einmal gelernt haben, wie Sie den Festplatten-Zerstörer richtig verwenden, wird es keine Festplatte mehr wagen , sich Ihnen in den Weg zu stellen.

Wenn Sie lediglich etwas hinzufügen, .imgkönnen Sie die oben genannten Schritte ausführen, unabhängig davon, ob es bereitgestellt ist oder nicht (obwohl .imges möglicherweise nicht wie erwartet funktioniert, wenn Sie einen Teil eines bereitgestellten Geräts entfernen) , müssen Sie jedoch höchstwahrscheinlich umount.imgzuerst die Größe ändern Bestandteil des Dateisystems, und das könnte auch so sein. Sie müssen -ddas Loop-Gerät jedoch nicht zerstören.

Wie Sie mit der zweiten Sache umgehen, hängt davon ab, ob sie .imgpartitioniert ist oder nicht. Wenn dies nicht der Fall ist, wie ich aufgrund Ihrer Kommentare an anderer Stelle vermute, müssen Sie die fs nur nach ihrem Typ adressieren. Für eine ext[234] .imgDatei sollten Sie verwenden resize2fsund damit fertig sein. Für andere sollten Sie sich die relevanten User-Space-Tools und deren manSeiten ansehen .

Wenn .imges partitioniert ist, kann es komplizierter sein. In solchen Fällen hängt es davon ab, welche Art von Partitionstabelle verwendet wird (z. B. GPT vs MBR vs Hybrid-MBR) , ob es sich um die letzte Partition in der Partitionstabelle der Datei handelt und vieles mehr. Ich zögere, hier .imgEinzelheiten ohne weitere Informationen zu erfahren : Wenn Sie Ratschläge zum Umgang mit einer Partitionierung benötigen, teilen Sie mir dies bitte mit, und ich werde Ihnen anbieten, was ich kann.


Vielen Dank. Dd bs = 1M count = 500 >> .img funktioniert jedoch auch. Nur sagen. Tolle Antwort
JohnnyBoy

@ Johnnyboy - Ok ... aber was ist der Input dort?
Mikeserv

@JohnnyBoy - und obwohl es funktionieren wird, müssen Sie in diesem Fall tatsächlich etwas kopieren. Das bedeutet, dass Sie 500 Lese- / Schreibvorgänge benötigen. Wenn Sie nur seek, müssen Sie nur 1.
Mikeserv

Beides ist nützlich. Die Methode seek/ truncateerstellt eine "Sparse-Datei", in der der Speicherplatz erst zugewiesen wird, wenn Inhalt darauf geschrieben wird. Das Ergebnis kann dadurch auf der Festplatte stärker fragmentiert werden.
Sourcejedi

1
@sourcejedi - es macht auch Spaß. seq 20 >nums; seq 20 | (</dev/null dd bs=20 seek=1; cat) 1<>nums; cat nums- Versuch es. Sie können den gleichen Zweck erreichen <>wie mit conv=notrunc. Einige andere ddDinge: ein ddRingpuffer und eine versteckte Partition .
Mikeserv

5

Wenn das Chroot-Dateisystem voll ist, können Sie die Bilddatei vergrößern.

ZB mit dd conv=notrunc oflag=append bs=1M count=X of=file.img. Sei sehr, sehr vorsichtig :). Dh wenn Sie dann die Chroot aushängen und die IMG-Datei sichern können, wäre dies sehr zu empfehlen.

Ändern Sie dann die Größe des Dateisystems, damit es den zusätzlichen Speicherplatz nutzen kann. Für ein ext4-Dateisystem wäre der Befehl resize2fs. Die Manpage schlägt vor, dass Sie diesen letzten Befehl auf einem Loop-Gerät ausführen müssen, nicht auf der Datei:

# losetup -f file.img
# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /home/alan/file.img
# resize2fs /dev/loop0
...
# losetup -d /dev/loop0

Der Befehl ist für verschiedene Dateisysteme unterschiedlich, z . B. btrfs filesystem resize /dev/loop0 maxoder xfs_growfs /test.img/is/mounted/here.


Hey danke für die Antwort. Ich erhalte nach dem Befehl dd "ungültiges Konvertierungsanhängen" und resize2fs sagt, dass das "Dateisystem bereits 183105 (4 KB) Bytes lang ist. Nichts zu tun!"
JohnnyBoy

@JohnnyBoy Kümmere dich nicht darum dd, es ist schwer zu bedienen und schwerer zuverlässig zu benutzen. Verwenden truncate -s 10G foo.imgSie einfach etwa 10G als neue Größe für das Bild (größer als die aktuelle Größe!). Tun Sie dies bei nicht montiertem Bild. Ändern Sie dann die Größe des Dateisystems.
Gilles 'SO - hör auf böse zu sein'

Entschuldigung, behoben. truncatefunktioniert auch und es gibt einen Unterschied im Ergebnis hinsichtlich der möglichen Leistung (kommentiert die andere Antwort).
Sourcejedi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.