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


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 

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).


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

28
$ sudo hdparm -I /dev/sda | grep -i physical
Physical Sector size:                  4096 bytes

http://wayback.archive.org/web/20150921015457/https://nxadm.wordpress.com/2010/04/30/4096-physical-block-size-drives/


3
To powinna być zaakceptowana odpowiedź, ponieważ jest jedyną, która zapewnia rzeczywistą wartość fizyczną.
sjas

4
hdparm -I /dev/sda | grep Sectorjest ładniejszy, ponieważ pokaże jednocześnie zarówno fizyczne, jak i logiczne rozmiary, dla łatwego porównania.
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ć.


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 ...


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}'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.