dd: write '/ dev / null': Không còn chỗ trống trên thiết bị


9

Tôi đang đọc tệp 550MB vào / dev / null và tôi đang nhận được

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

Tôi ngạc nhiên. Tôi nghĩ / dev / null là một lỗ đen nơi bạn có thể gửi bao nhiêu tùy ý (vì đó là fs ảo).

Có, đĩa của tôi đã gần đầy khi tôi gặp lỗi này. Tôi có thể làm gì ngoài việc xóa nội dung khỏi đĩa?

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

Thay vì

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

Lệnh tôi đang sử dụng:

time sh -c "dd if=$filename of=/dev/null"

3
bạn có thể cung cấp đầu ra củals -l /dev/null
Patrick

@Patrick đã thêm ls -l
Ankur Agarwal

1
Bạn cũng có thể sao chép / dán lệnh dd bạn đang thực hiện không?
Forcefsck

2
Điều này thực sự kỳ lạ. Viết để /dev/nullkhông bao giờ gây ra lỗi này, vì nó không thực sự viết bất cứ điều gì ở bất cứ đâu. Bạn có nhận được hiệu ứng tương tự mà không có time? Vui lòng gửi đầu ra của strace dd if=$filename of=/dev/null(làm điều đó với một tệp không chứa thông tin bí mật ) hoặc strace dd if=$filename of=/dev/nullnếu timecần thiết để kích hoạt lỗi.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Gilles Vấn đề là / dev / null của tôi không phải là một tập tin đặc biệt. Tôi đã cập nhật câu hỏi của tôi ở trên.
Ankur Agarwal

Câu trả lời:


17

/dev/nulllà một tập tin đặc biệt, thuộc loại thiết bị ký tự. Trình điều khiển cho thiết bị nhân vật đó bỏ qua bất cứ điều gì bạn cố gắng ghi vào thiết bị và viết luôn thành công. Nếu ghi /dev/nullkhông thành công, điều đó có nghĩa là bằng cách nào đó bạn đã quản lý để xóa phần thích hợp /dev/nullvà thay thế nó bằng một tệp thông thường. Bạn có thể đã vô tình loại bỏ /dev/null; sau đó tiếp theo … >/dev/nullsẽ tạo lại nó như một tập tin thông thường.

Chạy ls -l /dev/nullvà kiểm tra xem dòng đó có giống không

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

Nó phải bắt đầu bằng crw-rw-rw-: ccho một thiết bị ký tự và các quyền cho phép mọi người đọc và viết. Các tập tin nên được sở hữu bởi root, mặc dù nó không quan trọng lắm. Hai số sau khi chủ sở hữu và nhóm xác định thiết bị (số thiết bị chính và phụ ). Ở trên tôi hiển thị các giá trị trong Linux; các biến thể unix khác nhau có giá trị khác nhau. Ngày thường là ngày mà hệ thống được cài đặt hoặc ngày khởi động lại lần cuối và không thành vấn đề.

Nếu bạn cần tạo lại tệp, một số hệ thống cung cấp một dấu MAKEDEVphẩy, trong PATH gốc hoặc trong /dev. Chạy cd /dev; ./MAKEDEV stdhoặc một cái gì đó như thế này để tạo lại các thiết bị cơ bản tiêu chuẩn như /dev/null. Hoặc tạo thiết bị bằng tay, cung cấp số thiết bị chính xác; trên Linux, đó là

mknod -m 666 /dev/null c 1 3

1
Ồ bạn là phao cứu sinh Cảm ơn, điều này thực sự có ích. Tôi chưa bao giờ xóa null nhưng nó không ở đó, tôi đã tạo một cách thủ công.
Fr0zenFyr

1
@ Fr0zenFyr Bạn có thể có một đoạn script chạy bằng root mà loại bỏ /dev/nulltrong một số trường hợp, có lẽ giống nhưtmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"
Gilles 'SO- ngừng trở nên xấu xa'

Sau đó, tôi sẽ phải kiểm tra tập lệnh của mình, nếu điều này là đúng, có khả năng null sẽ bị xóa lại. Tôi sẽ quay lại nếu tôi không thể xác định (giải quyết) tình huống này. Cảm ơn cho những người đứng đầu lên. Chúc mừng !! :)
Fr0zenFyr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.