Python3 script to zero fill the disk
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.
Insert into the Linux machine and find the device id using
sudo lsblk
mount the device to a directory name for example mnt
Then run the following python script.
python3 zero.py mnt
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)