dd: запись '/ dev / null': на устройстве не осталось места

9

Я читаю 550MB файл в / dev / null и получаю

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

Я удивлен. Я думал, что / dev / null - это черная дыра, куда вы можете отправлять столько, сколько захотите (потому что это виртуальный фс).

Да, мой диск почти заполнен, когда я получаю эту ошибку. Что я могу сделать, кроме удаления контента с диска?

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

Вместо

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

Команда, которую я использую:

time sh -c "dd if=$filename of=/dev/null"
Анкур Агарвал
источник
3
Можете ли вы предоставить выводls -l /dev/null
Патрик
@Patrick добавил ls -l
Анкур Агарвал
1
Не могли бы вы также скопировать / вставить команду dd, которую вы выполняете?
forcefsck
2
Это действительно странно. Запись в /dev/nullникогда не должна вызывать эту ошибку, так как на самом деле она нигде ничего не записывает. Вы получаете тот же эффект без time? Пожалуйста, опубликуйте выходные данные strace dd if=$filename of=/dev/null(сделайте это с файлом, не содержащим конфиденциальной информации ) или, strace dd if=$filename of=/dev/nullесли timeнеобходимо, чтобы вызвать ошибку.
Жиль "ТАК - перестань быть злым"
1
@ Жиль Проблема была в том, что мой / dev / null не был специальным символьным файлом. Я обновил свой вопрос выше.
Анкур Агарвал

Ответы:

17

/dev/nullэто специальный файл типа символьного устройства. Драйвер для этого символьного устройства игнорирует все, что вы пытаетесь записать на устройство, и запись всегда выполняется успешно. Если запись /dev/nullне удалась, это означает, что вам каким-то образом удалось удалить правильное /dev/nullи заменить его обычным файлом. Вы могли случайно удалить /dev/null; тогда следующий … >/dev/nullвоссоздает его как обычный файл.

Запустите ls -l /dev/nullи убедитесь, что линия выглядит примерно так

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

Оно должно начинаться с crw-rw-rw-: cдля символьного устройства и разрешений, которые позволяют каждому читать и писать. Файл должен принадлежать пользователю root, хотя это не очень важно. Два номера после владельца и группы обозначают устройство ( основной и вспомогательный номер устройства ). Выше я показываю значения под Linux; разные варианты Unix имеют разные значения. Дата обычно является либо датой установки системы, либо датой последней перезагрузки и не имеет значения.

Если вам нужно пересоздать файл, некоторые системы предоставляют MAKEDEVкоманды, либо в PATH root, либо в /dev. Запустите cd /dev; ./MAKEDEV stdили что-то вроде этого, чтобы воссоздать стандартные базовые устройства, такие как /dev/null. Или создайте устройство вручную, указав правильные номера устройств; в Linux это

mknod -m 666 /dev/null c 1 3
Жиль "ТАК - перестань быть злым"
источник
1
Вот Это Да! ты спасатель Спасибо, это действительно помогает. Я никогда не удалял ноль, но его там не было, я создал его вручную.
Fr0zenFyr
1
@ Fr0zenFyr У вас, вероятно, есть скрипт, работающий от имени пользователя root, который /dev/nullв некоторых обстоятельствах удаляет , возможно, что-то вродеtmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Жиль "ТАК ... перестать быть злым"
Тогда мне придется проверить мои сценарии, если это правда, есть вероятность, что null будет снова удален. Я вернусь, если я не смогу найти (решить) эту ситуацию. Спасибо за внимание. Ура !! :)
Fr0zenFyr