|
import os
|
|
import sys
|
|
|
|
import fiemap
|
|
|
|
def main():
|
|
|
|
if len(sys.argv) < 2:
|
|
print 'ERROR: not enough arguments provided'
|
|
return -1
|
|
|
|
base_path = sys.argv[1]
|
|
|
|
# Statistics variables
|
|
smallest_extent = 2**20
|
|
largest_extent = 0
|
|
number_extents = 0
|
|
number_chunks = 0
|
|
total_extent_size = 0
|
|
|
|
directory_count = 0
|
|
|
|
# Iterate over all of the "file" directories
|
|
directories = [d for d in os.listdir(base_path)
|
|
if os.path.isdir(os.path.join(base_path, d))]
|
|
dir_total = len(directories)
|
|
|
|
for directory in directories:
|
|
path = os.path.join(base_path, directory)
|
|
directory_count += 1
|
|
sys.stdout.write('(%d of %d) -- file: %s --- analyzing ... ' %
|
|
(directory_count, dir_total, directory))
|
|
sys.stdout.flush()
|
|
|
|
# Iterate over all of the chunk files
|
|
for file_ in os.listdir(path):
|
|
file_path = os.path.join(path, file_)
|
|
|
|
number_chunks += 1
|
|
|
|
# Open a chunk file to perform the fiemap call
|
|
with open(file_path, 'r') as fd:
|
|
map_ = fiemap.get_all_mappings(fd)
|
|
|
|
# Update statistics variables
|
|
number_extents += len(map_.extents)
|
|
for extent in map_.extents:
|
|
if extent.length < smallest_extent:
|
|
smallest_extent = extent.length
|
|
if extent.length > largest_extent:
|
|
largest_extent = extent.length
|
|
total_extent_size += extent.length
|
|
|
|
sys.stdout.write('DONE\n')
|
|
sys.stdout.flush()
|
|
|
|
# Print out final statistics
|
|
print '-' * 80
|
|
print 'Smallest extent size: %8d' % smallest_extent
|
|
print 'Largest extent size: %8d' % largest_extent
|
|
print 'Average extents per chunk: %8d' % (number_extents / number_chunks)
|
|
print 'Average extent size: %8d' % (total_extent_size / number_extents)
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|