Terminal pogryzł człowieka: pv

Nawet jeżeli ktoś nie żywi sympatii do linuksowego terminala, to potrafi wymienić co najmniej jedną czynność, którą łatwiej i wygodniej jest przeprowadzić w terminalu. Moim ulubionym zajęciem jest nagrywanie obrazów iso na pendrive’ach za pomocą programu dd. Szybko, łatwo, skutecznie (o ile dobrze wskaże się urządzenie wyjściowe) i tylko czasem może brakuje informacji, ile jeszcze taki proces nagrywania zajmie czasu, albo w który miejscu akurat się znajduje. I tu z pomocą przychodzi pv, którego skromna nazwa nie odzwierciedla miodności płynącej z kontrolowania przesyłania danych potokami w Linuksie.

Program pv znajdziemy we wszystkich popularnych dystrybucjach. Wg. opisu z instrukcji, pv „monitoruje postęp przesyłania danych przez potok (ang. pipe)”. I tyle. A co z tego wynika? Ano to, że dzięki tej prozaicznej funkcjonalności możemy odwiesić na kołku nudę i niepewność podczas np. klonowania partycji, dysków, tworzenia obrazów iso, nagrywania ich, itp, itd. Jedyne co musimy zrobić, to umieścić pv w potoku pomiędzy poleceniami, pomiędzy którymi chcemy monitorować przepływ danych. Program ma też możliwość odczytu ze standardowego wejścia (jak cat), co ułatwia np. wspomniane nagrywanie obrazów iso. Do tego dochodzi sporo przełączników, którymi możemy sprecyzować co i jak chcemy mieć wyświetlanie. Gdy nie podamy żadnych, pv aktywuje -pterb (p włącza pasek postępu, t pokazuje łączny czas, e próbuje ustawić ile czasu jeszcze pozostało do zakończenia, r wyświetli prędkość przesyłania danych, b zsumuje ilość przesłanych danych).

No dobrze, ale jak to wygląda w praktyce? Kilka przykładów z życia:

Monitorowanie postępu obliczania sumy kontrolnej obrazu iso:

$# pv nasze.iso | md5sum
 48MB 0:00:04 [85,7MB/s] [===>                                ] 12% ETA 0:00:27

Wykorzystaliśmy tutaj możliwość pv odczytu ze standardowego źródła. Ważna uwaga – ETA w tym przypadku wyliczy się prawidłowo, gdyż pv zna rozmiar obrazu podanego jako parametr. W innych przypadkach będziemy musieli (opcjonalnie) poinstruować program parametrem -s jaka ilość danych będzie przesyłana.

Nagrywanie iso:

$# pv nasze.iso | dd of=/dev/null bs=4M
 54GB 0:00:17 [96,7MB/s] [===================>                ] 58% ETA 0:00:11

Klonowanie dysku sda na sdb – UWAGA, TO ZEPSUJE DANE NA DYSKU SDB!

$# pv /dev/sda | dd of=/dev/sdb bs=64M

Tworzenie obrazu dysku:

$# dd if=/dev/sda | pv | dd of=/disc-image.img

I tak dalej, i tak dalej…
 

6 komentarzy

  1. pv /dev/sda | dd of=/disc-image.img

    jak się zrobi tak to będzie widoczny rozmiar i zostanie wyliczone ETA, chociaż nie sprawdzałem czy obraz się zrobi poprawnie,

  2. Dokładnie tak jak piszesz. Chciałem jednak pokazać inną kombinację użycia pv. W tym przypadku ETA też może zostać wyliczone, o ile podamy parametr -s rozmiar_obrazu.

  3. Znalazłem kolejny fajny programik:
    dfc
    wyświetla zużycie przestrzeni dysku w kolorach i nie tylko.Jest w repo Minta

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Post comment

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.