Python 填满磁盘

Posted

技术标签:

【中文标题】Python 填满磁盘【英文标题】:Python Filling Up Disk 【发布时间】:2012-11-27 19:22:18 【问题描述】:

我需要设置一些测试条件来模拟已填满的磁盘。我创建了以下内容来简单地将垃圾写入磁盘:

#!/usr/bin/python

import os
import sys
import mmap

def freespace(p):
    """
    Returns the number of free bytes on the drive that ``p`` is on
    """
    s = os.statvfs(p)
    return s.f_bsize * s.f_bavail 

if __name__ == '__main__':

    drive_path = sys.argv[1]
    output_path = sys.argv[2]

    output_file = open(output_path, 'w')

    while freespace(drive_path) > 0:
        output_file.write("!")
        print freespace(drive_path)
        output_file.flush()

    output_file.close()

据我所知,通过查看 freespace 的返回值,write 方法在文件关闭之前不会写入文件,从而使 while 条件无效。

有没有办法可以将数据直接写入文件?或者其他解决方案?

【问题讨论】:

尝试os.fsync写入更改并等待它 您使用的是哪个操作系统? 一次填满一个字符需要 guite 一段时间,你知道的(除非它已经快满了)。 是的,尤其是每次都冲洗它。一次写入 MB 会好很多,然后在开始出错时退出,只写入之前的一半以填充最后一位。 您可以使用dd 而不是编写自己的脚本。 【参考方案1】:

这是未经测试的,但我想这些方法将是轻松填满磁盘的最快方法

import sys
import errno

write_str = "!"*1024*1024*5  # 5MB

output_path = sys.argv[1]

with open(output_path, "w") as f:
    while True:
        try:
            f.write(write_str)
            f.flush()
        except IOError as err:
            if err.errno == errno.ENOSPC:
                write_str_len = len(write_str)
                if write_str_len > 1:
                    write_str = write_str[:write_str_len/2]
                else:
                    break
            else:
                raise

【讨论】:

这需要import sys【参考方案2】:

您可以在写入时尝试/捕获磁盘已满异常。

【讨论】:

以上是关于Python 填满磁盘的主要内容,如果未能解决你的问题,请参考以下文章

当磁盘被大文件填满时的一些小技巧

postfix导致maillog填满磁盘空间的巨坑!

iOS:核心数据和磁盘空间

三十,GeoWebCache 磁盘配额(/diskquota)

Cassandra 磁盘空间开销

解决linux根目录磁盘空间不足问题