#!/usr/bin/perl # $Id$ # spec: repeatedly writes random data to a block device to "shred" it use strict; use Fcntl; use Fcntl ':seek'; use Getopt::Std; use Time::HiRes; $| = 1; my %opts = (); getopts('b:d:fl:o:p:vx',\%opts); my $o_buf_size = defined($opts{b}) ? int(eval($opts{b})) : 1024*1024; my $o_dev_shred = defined($opts{d}) ? $opts{d} : ''; my $o_fork = 0; my $o_shred_limit = defined($opts{l}) ? int(eval($opts{l})) : 0; my $o_shred_offset = defined($opts{o}) ? int(eval($opts{o})) : 0; my $c_pass = defined($opts{p}) ? $opts{p} : 1; my $o_verbose = $opts{v}; my $o_execute = $opts{x}; if (! -b $o_dev_shred ) { print_help(); die "$0 only knows how to shred devices\n"; } sub print_help() { print <1 && $c= ($time_x + 5) ) { my $bytes_w = $i * $o_buf_size; # my $time_c = Time::HiRes::tv_interval($t0); # Number of minutes remaining my $time_r = (($l_dev_wipe - $bytes_w) / ($bytes_w / $time_c)) / 60; my $time_x = $time_c; printf("Shredded %s of %s in %.2fs (%s/s) - ETA: %.2fm \r", size_nice($bytes_w), size_nice($l_dev_wipe), $time_c, size_nice($bytes_w / $time_c), $time_r); } } close($fh); } # printf("Shredded %s of %s in %.2fs - ETA: %.2fm \n",size_nice($bytes_w),size_nice($l_dev_wipe),$time_c,$time_r);