Python3 script to zero fill the disk
Jump to navigation
Jump to search
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)