Jak znaleźć rozmiar odczytu bloku sprzętu dla mojego dysku twardego?

47

Próbuję ustalić optymalny rozmiar dużej kopii z dysku twardego za pomocą dd. Próbuję dowiedzieć się, jaki najlepszy rozmiar bloku to użyć, a moim zdaniem byłby to rozmiar bloku sprzętowego dla tego napędu.

Płomień
źródło
1
@Sepero dostarczył jedyną prawdziwą odpowiedź.
sjas

Odpowiedzi:

44

Polecenie lsblk jest do tego świetne:

lsblk -o NAME,PHY-SeC

Wyniki:

NAME   PHY-SEC 
sda        512 
├─sda1     512 
├─sda2     512 
└─sda5     512 
Thomas Bratt
źródło
3
Czy rozróżnia rozmiar logiczny od rozmiaru fizycznego?
CMCDragonkai
2
Nie zapewni rzeczywistego rozmiaru fizycznego.
sjas
7
Działa dla mnie, PHY-SEC pokazuje prawidłowy fizyczny, a LOG-SEC pokazuje logiczny rozmiar.
soger
31

Linux ujawnia rozmiar sektora fizycznego w plikach /sys/block/sdX/queue/physical_block_size. Chociaż, aby uzyskać najlepszą wydajność, prawdopodobnie powinieneś zrobić małe testy z różnymi rozmiarami i miarą. Mogę nie znaleźć się jasną odpowiedź na to stosując dokładnie fizyczny rozmiar bloku by uzyskać optymalny wynik (choć zakładam, że nie może być zły wybór).

hlovdal
źródło
2
Mam system Debian Lenny (jądro 2.6.26), który wyświetla tylko rozmiar hw_sector_size w tej lokalizacji, oraz nowszy system Ubuntu Karmic (jądro 2.6.31), który zapewnia oba te elementy. więc jest to w pewnym stopniu zależne od używanego jądra.
quack quixote
Nie zapewni rzeczywistego rozmiaru fizycznego.
sjas
@sjas Czy możesz rozwinąć? Skąd ty to wiesz?
Hashim
1
@Hashim przetestowałem niektóre stare dyski twarde, w których niektóre miały 512b, a inne 4k wielkości sektora. superuser.com/a/426015/145072 to rozwiązanie, które faktycznie działało. wszystko inne hdparmprawdopodobnie cię okłamie.
sjas
7

Mój nie ma być całkowitą odpowiedzią, ale mam nadzieję, że to też pomoże.

Oto coś z http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html


3 - Określ odpowiedni rozmiar bloku

W celu szybszego tworzenia kopii zapasowej może pomóc ustalić optymalny rozmiar bloku urządzenia dyskowego, którego kopię zapasową chcesz wykonać. Zakładając, że masz zamiar wykonać kopię zapasową / dev / sda, oto jak możesz użyć polecenia fdisk, aby określić najlepszy rozmiar bloku:

rescuecd#/> /sbin/fdisk -l /dev/sda | grep Units

Units = cylinders of 16065 * 512 = 8225280 bytes

Zauważ, że wyjście fdisk mówi „cylindry 16065 * 512”. Oznacza to, że na dysku jest 512 bajtów na blok. Można znacznie poprawić szybkość tworzenia kopii zapasowej, zwiększając rozmiar bloku o wielokrotność od 2 do 4. W takim przypadku optymalny rozmiar bloku może wynosić 1k (512 * 2) lub 2k (512 * 4). BTW, chciwość i użycie bloku o wielkości 5k (512 * 10) lub czegoś nadmiernego nie pomoże; ostatecznie system będzie wąskim gardłem w samym urządzeniu i nie będziesz w stanie wycisnąć żadnej dodatkowej wydajności z procesu tworzenia kopii zapasowej. (podkreślenie dodane)


Podejrzewam, że różnica w wydajności między prawie optymalnym a optymalnym rozmiarem bloku dla danej konfiguracji jest znikoma, chyba że zestaw danych jest ogromny. Rzeczywiście, użytkownik FixUnix (post z 2007 roku) twierdził, że jego optymalne czasy były tylko 5% szybsze niż nieoptymalne. Być może możesz wycisnąć nieco większą wydajność, używając wielokrotności rozmiaru „klastra” lub rozmiaru bloku systemu plików.

Oczywiście, jeśli przesuniesz się zbyt daleko w dowolną stronę optymalnego rozmiaru bloku, napotkasz problemy.

Najważniejsze jest to, że prawdopodobnie uzyskasz tylko około 5% wydajności (tj. 3 minuty na godzinę) przy absolutnie optymalnym rozmiarze bloku, więc zastanów się, czy warto poświęcić swój czas i wysiłek na dalsze badania. Dopóki trzymasz się z dala od ekstremalnych wartości, nie powinieneś cierpieć.

Mark C.
źródło
1
jakiś powód używania echo "p" | /sbin/fdisk /dev/sda...zamiast /sbin/fdisk -l /dev/sda...? drugi będzie czystszy i nie będzie próbował dokonywać żadnych zmian.
szarlatan
Najlepiej zapytaj Marka Kolicha (link). Tworzył kopię zapasową, a ja zacytowałem tylko część jego artykułu.
Mark C
1
@ MarkC Używa linkowany artykuł /sbin/fdisk -l /dev/sda | grep Units. Mogło to ulec zmianie w ciągu ostatnich dwóch lat. W każdym razie zaktualizowałem twoją odpowiedź.
Bob
2
IMO jest to najbardziej użyteczna odpowiedź głównie ze względu na ostatni pogrubiony akapit. Linux bardzo ciężko pracuje nad optymalizacją dostępu do dysku, więc dopóki używasz odpowiedniego harmonogramu io i ustawień brudnego bufora dla swojego dysku, rozmiar bloku 8192 bajtów powinien być odpowiedni dla każdej sytuacji.
soger
4

Każdy transfer dysku generuje przerwanie, które procesor musi obsłużyć. Typowy dysk 50 Mb / s będzie chciał generować 100 000 z nich co sekundę przy rozmiarze bloku 512b Normalny procesor poradziłby sobie z dziesiątkami tysięcy takich bloków, dlatego większy (2 ^ x) rozmiar bloku byłby bardziej przydatny (4k jako domyślny rozmiar bloku FS w większości systemy do 64k ISA DMA) byłyby bardziej praktyczne ...

ZaB
źródło
Czy możesz to wyjaśnić?
sjas
1
@Sjas Mówi, że najwyraźniej każdy sektor jest przesyłany osobno z powiązanym „przerwaniem”, które procesor musi obsłużyć. Większy rozmiar bloku oznacza mniej przerwań (a zatem mniej użytych cykli procesora) dla tej samej ilości danych.
Mark C,
1

Dodatkowo możesz przejrzeć dane wyjściowe, lshwaby zweryfikować inne wyniki (a także dlatego, że wydaje się, że nie mam hdparmdostępnych w mojej dystrybucji). Może to pomóc w zawężeniu:

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
Widok eliptyczny
źródło