Jeśli chodzi o wynik końcowy, zrobią to samo. Różnica polega na sposobie ddprzetwarzania danych. W rzeczywistości oba przykłady są pod tym względem ekstremalne: bsparametr określa, ddile danych powinien buforować w pamięci przed wysłaniem.
Zasadniczo pierwsze polecenie spróbuje odczytać 2 GB w dwóch porcjach po 1 GB, a drugie spróbuje odczytać całe 2 GB za jednym razem, a następnie wyśle je do aapliku.
Rezultat będzie taki sam, ale w pierwszym przypadku ddzapisze dwa bloki 1 GB, a w drugim bloku 2 GB. Różnica polega na tym, że ddzachowuje skopiowany blok w pamięci. Będziesz potrzebował 1 GB pamięci RAM w pierwszym przypadku i 2 GB w drugim.
Moim zdaniem nie ma potrzeby używania tak dużych bloków. Możesz wykonać kilka testów, ale w moim przypadku osiągam większą prędkość przy znacznie mniejszych blokach (<1 MB)
Użyty rozmiar bloku powinien odpowiadać najlepszym ustawieniom prędkości dla urządzenia źródłowego i docelowego.
Różnicę najlepiej zobaczyć, gdy spróbujesz skopiować urządzenie niskiego napięcia. Zastosowanie bardzo małego rozmiaru BS zakłóci proces odczytu niepotrzebny. Użycie bardzo dużego rozmiaru BS doprowadzi do długiego oczekiwania podczas zapisu.
Ponieważ standardowe LV składają się zwykle z 4 MB fragmentów, co jest również dobrym rozmiarem dla fizycznego dostępu do dysku, do tego używam bs = 4M.
Spróbuj eksperymentować z 16K lub 256M - zauważysz różnicę - i obserwuj wskaźnik dysku podczas kopiowania ...
Kary dla małych lub dużych bloków są nieco równoważone przez buforowanie wykonywane przez jądro. Zobacz tutaj, aby zobaczyć mini-test.
Gilles „SO- przestań być zły”
@Gilles Nie pamiętam liczb w moich testach, ale były one znacznie bardziej dramatyczne niż twoje. Jakiej fizycznej konfiguracji dysku twardego użyłeś w swoim teście? Mój był na sprzętowej macierzy RAID 5 rozłożonej na 5 dyskach (SAS 15k) o 128 KB. rozmiar paska.
Nils
Dyski SATA, bez RAID, w przeciwnym razie bezczynna maszyna. Nie pamiętam dokładnych specyfikacji.
/dev/urandom
, nie/dev/random
. Zobacz security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...Odpowiedzi:
Jeśli chodzi o wynik końcowy, zrobią to samo. Różnica polega na sposobie
dd
przetwarzania danych. W rzeczywistości oba przykłady są pod tym względem ekstremalne:bs
parametr określa,dd
ile danych powinien buforować w pamięci przed wysłaniem.Zasadniczo pierwsze polecenie spróbuje odczytać 2 GB w dwóch porcjach po 1 GB, a drugie spróbuje odczytać całe 2 GB za jednym razem, a następnie wyśle je do
aa
pliku.źródło
Rezultat będzie taki sam, ale w pierwszym przypadku
dd
zapisze dwa bloki 1 GB, a w drugim bloku 2 GB. Różnica polega na tym, żedd
zachowuje skopiowany blok w pamięci. Będziesz potrzebował 1 GB pamięci RAM w pierwszym przypadku i 2 GB w drugim.Moim zdaniem nie ma potrzeby używania tak dużych bloków. Możesz wykonać kilka testów, ale w moim przypadku osiągam większą prędkość przy znacznie mniejszych blokach (<1 MB)
źródło
Pierwszy zajmie 1G pamięci, wypełni dane danymi z pliku wejściowego i wyśle dwa razy.
Drugi zajmie 2G pamięci, wypełni dane danymi z pliku wejściowego i wyśle je.
źródło
Użyty rozmiar bloku powinien odpowiadać najlepszym ustawieniom prędkości dla urządzenia źródłowego i docelowego.
Różnicę najlepiej zobaczyć, gdy spróbujesz skopiować urządzenie niskiego napięcia. Zastosowanie bardzo małego rozmiaru BS zakłóci proces odczytu niepotrzebny. Użycie bardzo dużego rozmiaru BS doprowadzi do długiego oczekiwania podczas zapisu.
Ponieważ standardowe LV składają się zwykle z 4 MB fragmentów, co jest również dobrym rozmiarem dla fizycznego dostępu do dysku, do tego używam bs = 4M.
Spróbuj eksperymentować z 16K lub 256M - zauważysz różnicę - i obserwuj wskaźnik dysku podczas kopiowania ...
źródło