Ich machte dpkg --configure -a
in 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 .img
Datei gechroottet . Was kann ich machen?
disk-image
JohnnyBoy
quelle
quelle
df -h
Befehls an und ja, was @StephenKitt auch gefragt hat!mount -oloop file /path
, die das Losetup-Bit automatisch für Sie erledigt.Antworten:
Um dies richtig zu machen, müssen Sie:
.img
Datei.Der beste Weg, um das erste zu tun, ist mit
dd
. Aus irgendeinem Grund schreiben manche Leute der Funktionsweise eine Art Geheimnis zudd
, aber es gibt wirklich keine. So fügen Sie beispielsweise ein Loch an das Ende Ihrer.img
Datei an:An jedem POSIX - System , das wird gestutzt , die Datei zu 100MiBs. Auf einem GNU-System kann das
1kx1k
Bit auf nur gekürzt werdenM
.dd
Sucht 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:
... beide Befehle werden genau das Gleiche tun
dd
. Ich empfehle,dd
da keines dieser Tools portabel ist, wenndd
das 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,
.img
können Sie die oben genannten Schritte ausführen, unabhängig davon, ob es bereitgestellt ist oder nicht (obwohl.img
es möglicherweise nicht wie erwartet funktioniert, wenn Sie einen Teil eines bereitgestellten Geräts entfernen) , müssen Sie jedoch höchstwahrscheinlichumount
.img
zuerst die Größe ändern Bestandteil des Dateisystems, und das könnte auch so sein. Sie müssen-d
das Loop-Gerät jedoch nicht zerstören.Wie Sie mit der zweiten Sache umgehen, hängt davon ab, ob sie
.img
partitioniert 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 eineext[234]
.img
Datei sollten Sie verwendenresize2fs
und damit fertig sein. Für andere sollten Sie sich die relevanten User-Space-Tools und derenman
Seiten ansehen .Wenn
.img
es 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.img
Einzelheiten 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.quelle
seek
, müssen Sie nur 1.seek
/truncate
erstellt 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.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 mitconv=notrunc
. Einige anderedd
Dinge: eindd
Ringpuffer und eine versteckte Partition .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:Der Befehl ist für verschiedene Dateisysteme unterschiedlich, z . B.
btrfs filesystem resize /dev/loop0 max
oderxfs_growfs /test.img/is/mounted/here
.quelle
dd
, es ist schwer zu bedienen und schwerer zuverlässig zu benutzen. Verwendentruncate -s 10G foo.img
Sie 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.truncate
funktioniert auch und es gibt einen Unterschied im Ergebnis hinsichtlich der möglichen Leistung (kommentiert die andere Antwort).