上传大文件 (> 1Go) 失败并出现错误 "Errno::ENOSPC: No space left on device"

Upload of big file (> 1Go) fails with error "Errno::ENOSPC: No space left on device"

Rails 3.2.20,Ruby 1.9.3p194,Apache 2.2.22,Passenger 3.0.21。

文件上传到 /tmp(我在查看日志时的想法:

Parameters: {
...
@tempfile=#<File:/tmp/RackMultipart20150317-1329-19lcteh>>
...
}

)

大文件上传(例如 1.8Go 文件)引发异常 Errno::ENOSPC: No space left on device - write 日志跟踪:

/usr/local/lib/ruby/1.9.1/fileutils.rb:1372 :in `copy_stream` /usr/local/lib/ruby/1.9.1/fileutils.rb:1372 :in `block (2 levels) in copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:1371 :in `open` /usr/local/lib/ruby/1.9.1/fileutils.rb:1371 :in `block in copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:1370 :in `open` /usr/local/lib/ruby/1.9.1/fileutils.rb:1370 :in `copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:477 :in `copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:396 :in `block in cp` /usr/local/lib/ruby/1.9.1/fileutils.rb:1515 :in `block in fu_each_src_dest` /usr/local/lib/ruby/1.9.1/fileutils.rb:1531 :in `fu_each_src_dest0` /usr/local/lib/ruby/1.9.1/fileutils.rb:1513 :in `fu_each_src_dest` /usr/local/lib/ruby/1.9.1/fileutils.rb:395 :in `cp` [GEM_ROOT]/gems/paperclip-4.2.0/lib/paperclip/io_adapters/abstract_adapter.rb:41 :in `copy_to_tempfile` [GEM_ROOT]/gems/paperclip-4.2.0/lib/paperclip/io_adapters/uploaded_file_adapter.rb:8 :in `initialize`

我不明白为什么 /tmp 目录所在的分区有很多可用 space:

Filesystem Size Used Avail Use% Mounted on rootfs 9.9G 4.9G 4.6G 52% /

Apache 配置中没有文件大小限制。

我快速查看回形针来源。似乎文件内容已被复制,因此它在磁盘上出现了 2 次。 (错误跟踪也显示了它)

因此,为了能够处理 1.8G 的文件,您至少需要 3.6G 的免费空间 space。如果同时上传了一个 500M 的文件(或者如果某个地方有另一个副本)你没有足够的磁盘 space.

为了能够确定所需存储的大小,您需要跟踪您的框架如何处理上传的文件。