dd: กำลังเขียน '/ dev / null': ไม่มีพื้นที่เหลือบนอุปกรณ์


9

ฉันกำลังอ่านไฟล์ 550MB เป็น / dev / null และฉันได้รับ

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

ฉันรู้สึกประหลาดใจ. ฉันคิดว่า / dev / null เป็นหลุมดำที่คุณสามารถส่งได้มากเท่าที่คุณต้องการ (เพราะมันเป็น fs เสมือนจริง)

ใช่ดิสก์ของฉันเกือบเต็มเมื่อฉันได้รับข้อผิดพลาดนี้ ฉันจะทำอะไรได้นอกจากการลบเนื้อหาออกจากดิสก์

 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จำเป็นเพื่อเรียกใช้ข้อผิดพลาด
Gilles 'หยุดความชั่วร้าย' ใน

1
@ ปัญหาของ Gilles คือ / dev / null ของฉันไม่ใช่ไฟล์พิเศษของตัวละคร ฉันอัปเดตคำถามของฉันด้านบน
Ankur Agarwal

คำตอบ:


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; ตัวแปรยูนิกซ์ที่แตกต่างกันมีค่าต่างกัน โดยทั่วไปวันที่จะเป็นวันที่เมื่อติดตั้งระบบหรือวันที่รีบูตครั้งล่าสุดและไม่สำคัญ

หากคุณต้องการสร้างไฟล์ขึ้นใหม่ระบบบางระบบจะจัดเตรียมคำสั่ง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"
Gilles 'SO- หยุดความชั่วร้าย'

ฉันจะต้องตรวจสอบสคริปต์ของฉันถ้าเป็นจริงมีโอกาสที่ null จะถูกลบอีกครั้ง ฉันจะกลับมาถ้าฉันไม่สามารถค้นหา (แก้ไข) สถานการณ์นี้ ขอบคุณสำหรับหัวขึ้น. ไชโย !! :)
Fr0zenFyr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.