dd: pisanie „/ dev / null”: Brak miejsca na urządzeniu

9

Czytam plik 550 MB do / dev / null i otrzymuję

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

Byłem zaskoczony. Myślałem, że / dev / null to czarna dziura, w której możesz wysłać tyle, ile chcesz (ponieważ jest to wirtualny fs).

Tak, mój dysk jest prawie pełny, gdy pojawia się ten błąd. Co mogę zrobić poza usunięciem zawartości z dysku?

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

Zamiast

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

Polecenie, którego używam:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
źródło
3
czy możesz podać wynikls -l /dev/null
Patrick
@Patrick dodał ls -l
Ankur Agarwal
1
Czy możesz również skopiować / wkleić wykonywane polecenie dd?
forcefsck,
2
To jest naprawdę dziwne. Pisanie do /dev/nullnigdy nie powinno wyzwalać tego błędu, ponieważ tak naprawdę nigdzie nie pisze. Czy uzyskasz ten sam efekt bez time? Opublikuj wynik działania strace dd if=$filename of=/dev/null(zrób to z plikiem niezawierającym poufnych informacji ) lub strace dd if=$filename of=/dev/nulljeśli timejest to konieczne do wyzwolenia błędu.
Gilles „SO- przestań być zły”
1
@Gilles Problem polegał na tym, że mój / dev / null nie był plikiem specjalnym dla znaków. Zaktualizowałem moje pytanie powyżej.
Ankur Agarwal,

Odpowiedzi:

17

/dev/nullto specjalny plik typu urządzenie znakowe. Sterownik tego urządzenia znakowego ignoruje wszystko, co próbujesz zapisać na urządzeniu, a zapisy zawsze kończą się powodzeniem. Jeśli zapis do /dev/nullnie powiedzie się, oznacza to, że udało ci się jakoś usunąć właściwy /dev/nulli zastąpić go zwykłym plikiem. Być może przypadkowo usunąłeś /dev/null; następnie następny … >/dev/nullodtworzyłby go jako zwykły plik.

Uruchom ls -l /dev/nulli sprawdź, czy linia wygląda jakoś

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

Musi zaczynać się od crw-rw-rw-: curządzenia postaci i uprawnień, które pozwalają wszystkim czytać i pisać. Plik powinien należeć do roota, choć nie jest to bardzo ważne. Dwie cyfry po właścicielu i grupie identyfikują urządzenie ( główny i podrzędny numer urządzenia ). Powyżej pokazuję wartości pod Linuksem; różne warianty uniksowe mają różne wartości. Data jest zazwyczaj datą instalacji systemu lub datą ostatniego uruchomienia i nie ma znaczenia.

Jeśli konieczne jest ponowne utworzenie pliku, niektóre systemy udostępniają polecenia w MAKEDEVścieżce roota lub w folderze /dev. Uruchom cd /dev; ./MAKEDEV stdlub coś takiego, aby odtworzyć standardowe podstawowe urządzenia, takie jak /dev/null. Lub utwórz urządzenie ręcznie, podając prawidłowe numery urządzeń; w Linuksie, to jest

mknod -m 666 /dev/null c 1 3
Gilles „SO- przestań być zły”
źródło
1
Łał! jesteś ratownikiem. Dzięki, to naprawdę pomaga. Nigdy nie usunąłem wartości null, ale jej nie było, utworzyłem ją ręcznie.
Fr0zenFyr
1
@ Fr0zenFyr Prawdopodobnie masz skrypt działający jako root, który usuwa się /dev/nullw niektórych okolicznościach, być może coś w stylutmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO- przestań być zły'
Będę musiał sprawdzić moje skrypty, jeśli to prawda, istnieje szansa, że ​​wartość null zostanie ponownie usunięta. Wrócę, jeśli nie będę w stanie zlokalizować (rozwiązać) tej sytuacji. Dzięki za heads-upy. Twoje zdrowie!! :)
Fr0zenFyr