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

@Patrick添加了ls -l
Ankur Agarwal,

1
您还能复制/粘贴正在执行的dd命令吗?
forcefsck 2012年

2
这确实很奇怪。写入/dev/null永远不会触发此错误,因为它实际上不会在任何地方写入任何内容。没有,您会得到相同的效果time吗?请发布输出strace dd if=$filename of=/dev/null(使用不包含机密信息文件进行输出),或者发布strace dd if=$filename of=/dev/null是否time需要触发错误的输出。
吉尔斯(Gilles)'“ SO-别再邪恶了”

1
@Gilles问题是我的/ dev / null不是字符特殊文件。我在上面更新了我的问题。
Ankur Agarwal

Answers:


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会在root的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-停止作恶”

然后,我必须检查我的脚本,如果这是真的,则有可能再次删除null。如果无法找到(解决)这种情况,我会回来的。感谢您的注意。干杯!!:)
Fr0zenFyr 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.