Wie finde ich die Hardwareblock-Lesegröße für meine Festplatte?

47

Ich versuche, mit dd die optimale Größe für eine große Kopie von meiner Festplatte zu ermitteln. Ich versuche herauszufinden, welche Blockgröße für die Verwendung am besten geeignet ist. Ich gehe davon aus, dass dies die Hardware-Blockgröße für dieses Laufwerk ist.

Flamme
quelle
1
@Sepero lieferte die einzig wahre Antwort.
So

Antworten:

44

Der Befehl lsblk ist hierfür hervorragend geeignet :

lsblk -o NAME,PHY-SeC

Die Ergebnisse:

NAME   PHY-SEC 
sda        512 
├─sda1     512 
├─sda2     512 
└─sda5     512 
Thomas Bratt
quelle
3
Unterscheidet es zwischen logischer und physischer Größe?
CMCDragonkai
2
Gibt nicht die tatsächliche physische Größe an.
Sjas
7
Funktioniert für mich, PHY-SEC zeigt die richtige physikalische und LOG-SEC zeigt die logische Größe.
Soger
31

Linux legt die physische Sektorgröße in Dateien offen /sys/block/sdX/queue/physical_block_size. Um die bestmögliche Leistung zu erzielen, sollten Sie jedoch einige Tests mit unterschiedlichen Größen und Maßen durchführen. Ich konnte nicht finden , eine klare Antwort , dass genau die physikalische Blockgröße würde das optimale Ergebnis erhalten (obwohl ich es annehmen kann keine schlechte Wahl sein).

hlovdal
quelle
2
Ich habe ein Debian-Lenny-System (2.6.26-Kernel), das nur eine hw_sector_size an diesem Ort verfügbar macht , und ein neueres Ubuntu-Karmic-System (2.6.31-Kernel), das beides bietet. Das hängt also ein wenig vom verwendeten Kernel ab.
Quack Quijote
Gibt nicht die tatsächliche physische Größe an.
Sjas
@sjas Könnten Sie erweitern? Woher weißt du das?
Hashim
1
@Hashim Ich habe einige alte Festplatten getestet, bei denen einige 512b und einige 4k Sektoren hatten. superuser.com/a/426015/145072 ist die Lösung, die tatsächlich funktioniert hat. alles andere hdparmwird dich wahrscheinlich anlügen.
So
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/

Sepero
quelle
3
Dies sollte die akzeptierte Antwort sein, da dies die einzige ist, die den tatsächlichen physikalischen Wert liefert.
So
4
hdparm -I /dev/sda | grep Sectorist schöner, da es sowohl physikalische als auch logische Größen gleichzeitig anzeigt, um einen einfachen Vergleich zu ermöglichen.
So
7

Meins soll keine vollständige Antwort sein, aber ich hoffe, es hilft auch.

Hier ist etwas von http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html


3 - Bestimmen Sie die geeignete Blockgröße

Für eine schnellere Sicherung kann es hilfreich sein, die optimale Blockgröße des zu sichernden Plattengeräts festzulegen. Angenommen, Sie möchten / dev / sda sichern, dann können Sie mit dem Befehl fdisk die beste Blockgröße ermitteln:

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

Units = cylinders of 16065 * 512 = 8225280 bytes

Beachten Sie, dass die fdisk-Ausgabe "cylinder of 16065 * 512" anzeigt. Dies bedeutet, dass sich 512 Bytes pro Block auf der Festplatte befinden. Sie können die Geschwindigkeit der Sicherung erheblich verbessern, indem Sie die Blockgröße um ein Vielfaches von 2 bis 4 erhöhen. In diesem Fall beträgt die optimale Blockgröße möglicherweise 1 KB (512 * 2) oder 2 KB (512 * 4). Übrigens hilft es nicht, gierig zu werden und eine Blockgröße von 5k (512 * 10) oder etwas übermäßigem zu verwenden. Schließlich wird das System Engpässe am Gerät selbst verursachen und Sie können keine zusätzliche Leistung aus dem Sicherungsprozess herausholen. (Betonung hinzugefügt)


Ich vermute, dass der Unterschied in der Leistung zwischen einer nahezu optimalen und einer optimalen Blockgröße für eine bestimmte Konfiguration vernachlässigbar ist, es sei denn, der Datensatz ist enorm. Ein Benutzer bei FixUnix (Beitrag von 2007) gab an, dass seine optimalen Zeiten nur 5% schneller waren als die suboptimalen. Vielleicht können Sie die Effizienz ein wenig steigern, indem Sie ein Vielfaches der "Cluster" - oder Dateisystemblockgröße verwenden.

Wenn Sie sich zu weit von der optimalen Blockgröße entfernen, treten natürlich Probleme auf.

Unter dem Strich werden Sie mit der absolut optimalen Blockgröße wahrscheinlich nur etwa 5% an Leistung (dh 3 Minuten pro Stunde) gewinnen. Überlegen Sie also, ob es Ihre Zeit und Mühe wert ist, weiter zu recherchieren. Solange Sie sich von Extremwerten fernhalten, sollten Sie nicht leiden.

Mark C
quelle
1
einen Grund für die Verwendung echo "p" | /sbin/fdisk /dev/sda...anstelle von /sbin/fdisk -l /dev/sda...? Der zweite ist sauberer und versucht nicht, Änderungen vorzunehmen.
Quack Quijote
Am besten fragst du Mark Kolich (verlinkt). Er hat ein Backup erstellt, und ich habe nur einen Teil seines Artikels zitiert.
Mark C
1
@MarkC Der verlinkte Artikel verwendet /sbin/fdisk -l /dev/sda | grep Units. Es könnte in den letzten zwei Jahren geändert worden sein. Auf jeden Fall habe ich deine Antwort aktualisiert.
Bob
2
IMO ist dies die nützlichste Antwort, hauptsächlich wegen des letzten fettgedruckten Absatzes. Linux arbeitet sehr hart daran, den Festplattenzugriff zu optimieren. Solange Sie die entsprechenden Einstellungen für den io-Scheduler und den Dirty-Buffer für Ihre Festplatte verwenden, sollte eine Blockgröße von 8192 Byte für jede Situation in Ordnung sein.
Soger
4

Jede Datenträgerübertragung generiert einen Interrupt, den der Prozessor verarbeiten muss. Typische 50-MBit / s-Datenträger möchten 100.000 davon pro Sekunde bei einer Blockgröße von 512 KBit / s erzeugen. Ein normaler Prozessor würde Zehntausende davon verarbeiten. Eine größere (2-fache) Blockgröße wäre daher praktischer (4 KBit / s als Standard-FS-Blockgröße in den meisten Fällen) Systeme bis 64k ISA DMA-Größe) wären praktischer ...

ZaB
quelle
Könnten Sie das klarstellen?
Sjas
1
@Sjas Anscheinend sagt er oder sie, dass jeder Sektor separat mit einem zugeordneten "Interrupt" übertragen wird, den der Prozessor behandeln muss. Eine größere Blockgröße bedeutet weniger Interrupts (und damit weniger CPU-Zyklen) für dieselbe Datenmenge.
Mark C
1

Darüber hinaus können Sie die Ausgabe von lshwdurchsehen, um andere Ergebnisse zu überprüfen (und auch, weil hdparmmeine Distribution anscheinend nicht verfügbar ist). Dies kann dazu beitragen, sie einzugrenzen:

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
Elliptische Ansicht
quelle