dd: écriture '/ dev / null': pas d'espace disponible sur le périphérique

9

Je lis un fichier de 550 Mo dans / dev / null et je reçois

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

J'ai été surpris. Je pensais que / dev / null est un trou noir où vous pouvez envoyer autant que vous le souhaitez (car c'est un fs virtuel).

Oui, mon disque est presque plein lorsque j'obtiens cette erreur. Que puis-je faire d'autre que supprimer le contenu du disque?

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

Au lieu de

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

Commande que j'utilise:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
la source
3
pouvez-vous fournir la sortie dels -l /dev/null
Patrick
@Patrick a ajouté ls -l
Ankur Agarwal
1
Pourriez-vous également copier / coller la commande dd que vous exécutez?
forcefsck
2
C'est vraiment bizarre. Écrit à /dev/nullne devrait jamais déclencher cette erreur, car il ne fait pas tout écrire partout. Obtenez-vous le même effet sans time? Veuillez poster la sortie de strace dd if=$filename of=/dev/null(faites-le avec un fichier ne contenant aucune information confidentielle ), ou de strace dd if=$filename of=/dev/nullsi timeest nécessaire pour déclencher l'erreur.
Gilles 'SO- arrête d'être méchant'
1
@Gilles Le problème était que mon / dev / null n'était pas un fichier spécial de caractères. J'ai mis à jour ma question ci-dessus.
Ankur Agarwal

Réponses:

17

/dev/nullest un fichier spécial, de type périphérique de caractères. Le pilote de ce périphérique de caractères ignore tout ce que vous essayez d'écrire sur le périphérique et les écritures réussissent toujours. Si une écriture /dev/nulléchoue, cela signifie que vous avez réussi à supprimer le bon /dev/nullet à le remplacer par un fichier normal. Vous pourriez avoir accidentellement supprimé /dev/null; alors le suivant l' … >/dev/nullaurait recréé comme un fichier normal.

Exécutez ls -l /dev/nullet vérifiez que la ligne ressemble à quelque chose

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

Il doit commencer par crw-rw-rw-: cpour un périphérique de caractères et des autorisations qui permettent à tout le monde de lire et d'écrire. Le fichier doit appartenir à root, bien qu'il ne soit pas très important. Les deux chiffres après le propriétaire et le groupe identifient l'appareil ( numéro d'appareil majeur et mineur ). Ci-dessus, je montre les valeurs sous Linux; différentes variantes Unix ont des valeurs différentes. La date est généralement la date d'installation du système ou la date du dernier redémarrage et n'a pas d'importance.

Si vous devez recréer le fichier, certains systèmes fournissent des MAKEDEVcommandes, soit dans le CHEMIN de la racine, soit dans /dev. Exécutez cd /dev; ./MAKEDEV stdou quelque chose comme ça pour recréer les périphériques de base standard tels que /dev/null. Ou créez le périphérique manuellement, en fournissant les numéros de périphérique corrects; sous Linux, c'est

mknod -m 666 /dev/null c 1 3
Gilles 'SO- arrête d'être méchant'
la source
1
Hou la la! vous êtes une bouée de sauvetage. Merci, cela aide vraiment. Je n'ai jamais supprimé null mais ce n'était pas là, j'en ai créé un manuellement.
Fr0zenFyr
1
@ Fr0zenFyr Vous avez probablement un script fonctionnant en tant que root qui supprime /dev/nulldans certaines circonstances, peut-être quelque chose commetmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO- arrêtez d'être mauvais'
Je vais devoir vérifier mes scripts puis, si c'est vrai, il y a une chance que null soit à nouveau supprimé. Je reviendrai si je ne peux pas localiser (résoudre) cette situation. Merci pour l'information. À votre santé!! :)
Fr0zenFyr