Python3 script to zero fill the disk: Difference between revisions
Jump to navigation
Jump to search
Numberformat (talk | contribs) 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..." |
Numberformat (talk | contribs) No edit summary |
||
| Line 2: | Line 2: | ||
First step is to insert and mount the disk on a Linux based machine. Raspberry Pi works well for this. | 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. | Then run the following python script. | ||
python3 zero.py | python3 zero.py mnt | ||
<pre> | <pre> | ||
Latest revision as of 19:11, 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.
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)