The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Скрипт для определения скорости копирования"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Скрипт для определения скорости копирования"  +/
Сообщение от Константин email(??) on 08-Май-13, 14:41 
Доброго дня всем !

Делаю скрипт, чтобы определить скорость клонирования съемного диска в образ. Использую стандартную утилиту dd. Сделал графический интерфейс на Perl-Tk.
Просто вызываю команду в скрипте на перле system "dd if=$source of=$dest &" и начинаю считывать и сравнивать каждую секунду размер файла $dest с размером исходного $source. Из разницы размеров и промежутке прошедшего времени вычисляю скорость. Когда оба размера равны,вывожу что файл-образ создан.

Алгоритм работает, но он не совершенен в том плане, что если я буду еще и архивировать на лету образ, или проверять хэш, то алгорит не будет работать.

Ищу замену этому алгоритму. Из программы AIR я нашел такой вариант:

Первой командой файл источник пропускается через функцию counter, где высчитывается скорость передачи данных, потом данные записываются в именованный канал (fifo.file)

А второй командой данные из fifo.file записываются в $dest.

dd if=$source  2>> /log.log | /counter 2>> /buffer.log | tee /fifo.file | md5sum > /hash.log 2>&1;

dd if=/fifo.file 2>> /log.log of=$dest  >> /log.log 2>&1;

Проблема в том что эти команды не работают. Все прекращается когда первые 10 Мб данных передаются в файл счетчик /counter.

Подскажите в чем может быть проблема?

код файла /counter

my ($bytes_read, $count, $megs, $gigs);
my ($start_time, $stop_time, $mid_time, $total_time, $mb_sec);
my ($buffer, $buffer_size);

if ($ARGV[0]) {
    $buffer_size = $ARGV[0];
    print STDERR "buffer_size=$buffer_size\n";
} else {
    $buffer_size = 10485760; # 10MB
}
$count = 0;
$megs = 0;
$gigs = 0;

$start_time = time();

while($bytes_read = read(STDIN,$buffer,$buffer_size)) {
    $count = $count + $bytes_read;
    $megs = $count / 1024 / 1024;
    $gigs = $megs / 1024;
    $mid_time = time();
    $total_time = $mid_time - $start_time;
        if ($total_time == 0) {
                $total_time = 1;
        }
    $mb_sec = $megs / $total_time;
    printf (STDERR "Progress: %.2fMB (%.2fGB)\tAvg. Throughput: %.2fMB/sec\n",$megs,$gigs,$mb_sec);
    print STDOUT $buffer;
}

$stop_time = time();
$total_time = $stop_time - $start_time;
if ($total_time == 0) {
        $total_time = 1;
}
$mb_sec = $megs / $total_time;

printf (STDERR "Finished: %.2fMB (%.2fGB)\tAvg. Throughput: %.2fMB/sec\n",$megs,$gigs,$mb_sec);

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Скрипт для определения скорости копирования"  +/
Сообщение от тень_pavel_simple on 08-Май-13, 20:19 
>[оверквотинг удален]
>  printf (STDERR "Progress: %.2fMB (%.2fGB)\tAvg. Throughput: %.2fMB/sec\n",$megs,$gigs,$mb_sec);
>  print STDOUT $buffer;
> }
> $stop_time = time();
> $total_time = $stop_time - $start_time;
> if ($total_time == 0) {
>         $total_time = 1;
> }
> $mb_sec = $megs / $total_time;
> printf (STDERR "Finished: %.2fMB (%.2fGB)\tAvg. Throughput: %.2fMB/sec\n",$megs,$gigs,$mb_sec);

man dd usr1

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Скрипт для определения скорости копирования"  +/
Сообщение от Константин email(??) on 14-Май-13, 10:18 
> man dd usr1

Спасибо, пробую посылать сигналы для работающего dd. $killall -USR1 dd. Но как мне теперь результат записать в файл? Код $killall -USR1 dd > ./file не работает, в файл ничего не пишется.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Скрипт для определения скорости копирования"  +/
Сообщение от pavlinux (ok) on 13-Май-13, 20:05 
> Делаю скрипт, чтобы определить скорость клонирования съемного диска в образ.

http://www.cyberciti.biz/faq/linux-unix-dd-command-show-prog.../

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру