dd: writing '/ dev / null': Tidak ada ruang tersisa di perangkat

9

Saya membaca file 550MB ke / dev / null dan saya mulai

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

Saya terkejut. Saya pikir / dev / null adalah lubang hitam di mana Anda dapat mengirim sebanyak yang Anda inginkan (karena ini adalah fs virtual).

Ya, disk saya hampir penuh ketika saya mendapatkan kesalahan ini. Apa yang bisa saya lakukan selain menghapus konten dari disk?

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

Dari pada

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

Perintah yang saya gunakan:

time sh -c "dd if=$filename of=/dev/null"
Ankur Agarwal
sumber
3
dapatkah Anda memberikan hasills -l /dev/null
Patrick
@Patrick menambahkan ls-l
Ankur Agarwal
1
Bisakah Anda juga menyalin / menempelkan perintah dd yang Anda jalankan?
forcefsck
2
Ini memang aneh. Menulis ke /dev/nullseharusnya tidak pernah memicu kesalahan ini, karena itu sebenarnya tidak menulis apa pun di mana pun. Apakah Anda mendapatkan efek yang sama tanpa time? Silakan kirim output dari strace dd if=$filename of=/dev/null(lakukan dengan file yang tidak mengandung informasi rahasia ), atau strace dd if=$filename of=/dev/nulljika timediperlukan untuk memicu kesalahan.
Gilles 'SANGAT berhenti menjadi jahat'
1
@Gilles Masalahnya adalah bahwa / dev / null saya bukan file karakter khusus. Saya memperbarui pertanyaan saya di atas.
Ankur Agarwal

Jawaban:

17

/dev/nulladalah file khusus, tipe perangkat karakter. Pengemudi untuk perangkat karakter tersebut mengabaikan apa pun yang Anda coba tulis ke perangkat dan penulisan selalu berhasil. Jika /dev/nullgagal menulis , artinya Anda entah bagaimana berhasil menghapus yang benar /dev/nulldan menggantinya dengan file biasa. Anda mungkin telah dihapus secara tidak sengaja /dev/null; maka yang berikutnya … >/dev/nullakan dibuat ulang sebagai file biasa.

Jalankan ls -l /dev/nulldan periksa apakah garisnya terlihat seperti

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

Itu harus dimulai dengan crw-rw-rw-: cuntuk perangkat karakter, dan izin yang memungkinkan semua orang untuk membaca dan menulis. File harus dimiliki oleh root, meskipun itu tidak terlalu penting. Dua angka setelah pemilik dan grup mengidentifikasi perangkat (nomor perangkat utama dan kecil ). Di atas saya menunjukkan nilai-nilai di Linux; varian unix yang berbeda memiliki nilai yang berbeda. Tanggal ini biasanya tanggal ketika sistem diinstal atau tanggal reboot terakhir dan tidak masalah.

Jika Anda perlu membuat ulang file, beberapa sistem menyediakan perintah MAKEDEV, baik di PATH root atau di /dev. Jalankan cd /dev; ./MAKEDEV stdatau sesuatu seperti ini untuk membuat ulang perangkat dasar standar seperti /dev/null. Atau buat perangkat secara manual, dengan menyediakan nomor perangkat yang benar; di Linux, itu

mknod -m 666 /dev/null c 1 3
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Wow! Anda seorang penyelamat. Terima kasih, ini sangat membantu. Saya tidak pernah menghapus null tetapi tidak ada, saya membuatnya secara manual.
Fr0zenFyr
1
@ Fr0zenFyr Anda mungkin memiliki skrip yang berjalan sebagai root yang menghilangkan /dev/nulldalam beberapa keadaan, mungkin sesuatu sepertitmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO- berhenti menjadi jahat'
Saya harus memeriksa skrip saya kemudian, jika ini benar, ada kemungkinan null akan dihapus lagi. Saya akan kembali jika saya tidak dapat menemukan (menyelesaikan) situasi ini. Terimakasih atas peringatannya. Bersulang!! :)
Fr0zenFyr