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
Ankur Agarwal

1
Чи можете ви також скопіювати та вставити команду dd, яку виконуєте?
forcefsck

2
Це справді дивно. Запис /dev/nullніколи не повинен викликати цю помилку, оскільки він насправді нічого не пише ніде. Ви отримуєте такий же ефект без time? Будь ласка, опублікуйте висновок strace dd if=$filename of=/dev/null(зробіть це з файлом, що не містить конфіденційної інформації ), або, strace dd if=$filename of=/dev/nullякщо timeце потрібно, щоб викликати помилку.
Жил 'SO- перестань бути злим'

1
@Gilles Проблема полягала в тому, що my / 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 кореня, або в /dev. Виконайте cd /dev; ./MAKEDEV stdщось подібне, щоб відтворити стандартні базові пристрої, такі як /dev/null. Або створити пристрій вручну, надавши правильні номери пристроїв; в Linux, це

mknod -m 666 /dev/null c 1 3

1
Оце Так! ти рятівник. Дякую, це справді допомагає. Я ніколи не видаляв null, але його там не було, я створив його вручну.
Fr0zenFyr

1
@ Fr0zenFyr У вас, напевно, працює сценарій, що викорінюється як root, який видаляє /dev/nullза певних обставин, можливо, щось на кшталтtmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Жил "SO- перестань бути злим"

Тоді мені доведеться перевірити свої сценарії, якщо це правда, є ймовірність, що нуль буде видалено знову. Я повернусь, якщо не зможу знайти (вирішити) цю ситуацію. Дякую за голову вгору Ура !! :)
Fr0zenFyr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.