Difference between revisions of "Python3 script to zero fill the disk"

From docs
Jump to navigation Jump to search
(Created page with "This page has the python script that can be used to zero fill the empty space on a disk. Doing this helps save space when compressing the image file. First step is to insert...")
(No difference)

Revision as of 10:21, 3 April 2022

This page has the python script that can be used to zero fill the empty space on a disk. Doing this helps save space when compressing the image file.

First step is to insert and mount the disk on a Linux based machine. Raspberry Pi works well for this.

Then run the following python script.

python3 zero.py [location to zero fill]

import os
import shutil
import time

import argparse

parser = argparse.ArgumentParser(description='Zero fills the file system for the purpose of disk imaging and compression')
parser.add_argument('basepath', help='basepath is required.')
args = parser.parse_args()

# get space available on drive
total, used, free = shutil.disk_usage(args.basepath)

# make a byte array
buff = bytearray(1048576*100)

tempdir = os.path.join(args.basepath, f"files_tmp")
if not os.path.exists(tempdir): os.makedirs(tempdir)
print(f"tempdir : {tempdir} created to hold zero fill files.")
for i in range(int(free/len(buff))):
  ff = open(os.path.join(tempdir, f"file_{i}.tmp"), "wb")
  start = time.time()
  byteswritten = ff.write(buff)
  end = time.time()
  speed = byteswritten/1048576 / (end-start)
  total, used, free = shutil.disk_usage(tempdir)
  print(f'free: {int(free/(1024*1024))} Mb, speed = {speed:.2f} Mb/sec')
  ff.close()
# create the last temp file
ff = open(os.path.join(tempdir, f"file_final.tmp"), "wb")
byteswritten = ff.write(bytearray(free))
ff.close()
# finally delete the temp
print("All remaining space on drive filled.")
ans = input(f"Are you sure you want to delete: {tempdir} (Y/N)? ")
if "Y" == ans.upper():
  if os.path.exists(tempdir): shutil.rmtree(tempdir)