dd: Schreiben von '/ dev / null': Kein Platz mehr auf dem Gerät

9

Ich lese eine 550-MB-Datei in / dev / null und erhalte sie

dd: writing '/dev/null': No space left on device

Ich war überrascht. Ich dachte, / dev / null ist ein schwarzes Loch, in das Sie so viel senden können, wie Sie möchten (weil es ein virtuelles fs ist).

Ja, meine Festplatte ist fast voll, wenn ich diesen Fehler erhalte. Was kann ich tun, außer Inhalte von der Festplatte zu löschen?

 ls -l /dev/null
 -rw-r--r--    1 root     root             0 July 7 21:58 /dev/null

Anstatt

 crw-rw-rw-    1 root     root        1,   3 July 7 02:58 /dev/null

Befehl, den ich benutze:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
quelle
3
können Sie die Ausgabe vonls -l /dev/null
Patrick
@ Patrick fügte hinzu ls -l
Ankur Agarwal
1
Könnten Sie auch den Befehl dd kopieren / einfügen, den Sie ausführen?
Forcefsck
2
Das ist in der Tat komisch. Das Schreiben in /dev/nullsollte diesen Fehler niemals auslösen, da es nirgendwo etwas schreibt. Erhalten Sie den gleichen Effekt ohne time? Bitte posten Sie die Ausgabe von strace dd if=$filename of=/dev/null(tun Sie dies mit einer Datei, die keine vertraulichen Informationen enthält ) oder von, strace dd if=$filename of=/dev/nullwenn dies timeerforderlich ist, um den Fehler auszulösen.
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles Problem war, dass mein / dev / null keine spezielle Zeichendatei war. Ich habe meine Frage oben aktualisiert.
Ankur Agarwal

Antworten:

17

/dev/nullist eine spezielle Datei vom Typ Zeichengerät. Der Treiber für dieses Zeichengerät ignoriert alles, was Sie versuchen, auf das Gerät zu schreiben, und Schreibvorgänge sind immer erfolgreich. Wenn ein Schreibvorgang /dev/nullfehlschlägt, bedeutet dies, dass Sie es irgendwie geschafft haben, das richtige zu entfernen /dev/nullund durch eine reguläre Datei zu ersetzen. Sie haben möglicherweise versehentlich entfernt /dev/null; dann hätte der nächste … >/dev/nulles als reguläre Datei neu erstellt.

Führen Sie aus ls -l /dev/nullund überprüfen Sie, ob die Linie ungefähr so ​​aussieht

crw-rw-rw- 1 root root 1, 3 Sep 13  2011 /dev/null

Es muss beginnen mit crw-rw-rw-: cfür ein Zeichengerät und Berechtigungen, mit denen jeder lesen und schreiben kann. Die Datei sollte im Besitz von root sein, obwohl dies nicht sehr wichtig ist. Die beiden Nummern nach dem Besitzer und der Gruppe identifizieren das Gerät ( Haupt- und Nebengerätenummer ). Oben zeige ich die Werte unter Linux; Unterschiedliche Unix-Varianten haben unterschiedliche Werte. Das Datum ist normalerweise entweder das Datum, an dem das System installiert wurde, oder das Datum des letzten Neustarts und spielt keine Rolle.

Wenn Sie die Datei neu erstellen müssen, stellen einige Systeme MAKEDEVBefehle bereit, entweder im PATH von root oder in /dev. Führen Sie cd /dev; ./MAKEDEV stdoder so etwas aus, um die Standardgrundgeräte wie z /dev/null. Oder erstellen Sie das Gerät manuell und geben Sie die richtigen Gerätenummern an. unter Linux ist das so

mknod -m 666 /dev/null c 1 3
Gilles 'SO - hör auf böse zu sein'
quelle
1
Wow! Du bist ein Lebensretter. Danke, das hilft wirklich. Ich habe null nie gelöscht, aber es war nicht da, ich habe eins manuell erstellt.
Fr0zenFyr
1
@ Fr0zenFyr Sie haben wahrscheinlich ein Skript als root ausgeführt, das /dev/nullunter bestimmten Umständen entfernt, vielleicht so etwas wietmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO - hör auf böse zu sein'
Ich muss dann meine Skripte überprüfen. Wenn dies zutrifft, besteht die Möglichkeit, dass null erneut gelöscht wird. Ich komme wieder, wenn ich diese Situation nicht finden (lösen) kann. Danke für die Warnung. Prost!! :)
Fr0zenFyr