Использование скрипта perl для заполнения жесткого диска - может ли это быть сделано более эффективно? - PullRequest
1 голос
/ 11 апреля 2020

Я написал сценарий Perl (Strawberry), чтобы пару раз заполнить некоторые старые жесткие диски полуслучайными числами перед отправкой на переработку.
Этот сценарий создает файл ~ 100 Мб со случайными нулями и 1, которые затем записываются в файл 10 раз.
Этот процесс затем повторяется в зависимости от размера жесткого диска (в примере только 3 раза для целей тестирования).

В настоящее время его выполнение занимает около 36 секунд. за файл.
Мой вопрос: какие изменения я могу внести в скрипт, чтобы ускорить его?

Вот скрипт полностью:

my $master = "c:/programme/tools/filluphd/master.txt";
my $rd;

my $log = "c:/programme/tools/filluphd/log.log";

my $file = "f:/file_";

#create master
open (MASTER, ">", $master);

for ($i = 0; $i < 100000000; $i++)
{
    $rd = int(rand(2)); 
    print MASTER $rd;
}

close (MASTER);

open (LOG, ">", $log);
print LOG "start: ".localtime()."\n";
my $start_time = time();
my $random;
open (MASTER, "<", $master) or die "cannot open master: $!"."\n";
while (<MASTER>)
{
    $random .= $_;
}
close (MASTER);
for ($n = 0; $n <= 2 ; $n++) 
{
    my $file_start = time();
    my $filename = $file.$n.".txt";
    my $i = 0;
    open (FILE, ">", $filename);
    for ($i; $i <= 10; $i++)
    {
        print FILE $random;
    }
    close (FILE);
    my $file_end = time();
    my $file_runtime = $file_end - $file_start;
    print LOG "file ".$filename." took ".$file_runtime." seconds!"."\n";
}

my $end_time = time();
my $run_time = $end_time - $start_time;
print LOG "run time: ".$run_time." seconds"."\n";
print LOG "finish: ".localtime()."\n";
close (LOG);

1 Ответ

0 голосов
/ 13 апреля 2020

Я провел некоторые измерения и обнаружил, что корпус, в котором находится HD, предназначен только для USB2. Это означает, что при скорости около 30 МБ / с он полностью насыщен, и инструменты windows показывают это. По скоростному пути больше нечего делать.

...