Skip to content

Instantly share code, notes, and snippets.

@kofemann
Created January 12, 2012 14:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kofemann/1600898 to your computer and use it in GitHub Desktop.
Save kofemann/1600898 to your computer and use it in GitHub Desktop.
mkfile utility, like on Solaris.
#!/usr/bin/env python
"""
A small utility to create a file of specified size:
$ mkfile 100g
"""
import sys
import time
import os
B = 1
K = 1024
M = K*K
G = K*M
def get_size(s):
size = int(s[:-1])
m = s[-1:]
if m == 'b' or m == 'B':
return size*B
elif m == 'k' or m == 'K':
return size*K
elif m == 'm' or m == 'M':
return size*M
elif m == 'g' or m == 'G':
return size*G
else:
raise Exception('Invalid format: %s' % s)
def mkfile(fname, size, chunk=1024) :
n_chunks = size // chunk
bite = bytearray(chunk)
payload = bytearray(size % chunk)
with open(fname, "wb") as f:
for n in range(n_chunks) :
f.write(bite)
f.write(payload)
f.flush()
os.fsync(f.fileno())
if len(sys.argv) != 3:
print 'Usage: <file> <size><b|k|m|g>'
sys.exit(1)
fname = sys.argv[1]
size = get_size(sys.argv[2])
time_start = time.time()
mkfile(fname, size, 8192)
time_stop = time.time()
delta = time_stop - time_start
print '%.2f MB/s' % (size / M / delta)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment