Ermitteln der Sektorgröße einer Partition


24

Ich beantwortete diese Frage unter der Annahme, dass die *.imgDatei eine Sektorgröße von hatte 512.

Wie frage ich ein Gerät oder das Image eines Geräts ab, um die richtige Sektorgröße zu finden?

Antworten:


26

fdisk -l (das ist ein niedrigeres L im Parameter) zeigt Ihnen unter anderem auch die Sektorgröße an.

$ sudo fdisk -l

Disk /dev/sda: 150.3 GB, 150323855360 bytes
255 heads, 63 sectors/track, 18275 cylinders, total 293601280 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
   /dev/sda1   *          63      208844      104391   83  Linux
   /dev/sda2          208845   209712509   104751832+  83  Linux

Dies zeigt, dass die Sektorgröße 512 Bytes beträgt.

BEARBEITEN: Neuere Versionen von fdiskzB fdisk(aus Paket util-linux 2.20.1) zeigen Ihnen auch die logischen und physischen Sektorgrößen an. Relevante Ausgabe von einem "WDC WD10EFRX 1 TB-Laufwerk":

Disk /dev/sdn: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Es waren also 4096 Bytes, keine 512 Bytes.
Hibou57

26

Gemäß der Dokumentation für die Warteschlange sysfs-Dateien :

# cat /sys/block/sda/queue/hw_sector_size
512

1
Dies funktioniert nicht für beliebige Bilddateien. Woher sollte der Kernel davon wissen?
Christian Pietsch

1
@ChristianPietsch beliebige Bilddateien werden in der Regel über Loop - Geräte montiert, so dass dies wird für sie arbeiten. Verwenden Sie loopNstattdessen sdX. Trotzdem ist es in gewisser Hinsicht ziemlich sinnlos, da Bilddateien eigentlich keine Sektoren haben und diese Informationen nur die Sektorgröße des aktuell eingebundenen Geräts angeben.
Ruslan

1

Man kann einfach den file(1)Befehl benutzen und selbst rechnen. Dies funktioniert auch, wenn Sie nur ein Image des FAT-Systems haben.

Beispielsweise:

$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
 code offset 0x58+2
 OEM-ID "mkfs.fat"
 sectors/cluster 64
 reserved sectors 64
 Media descriptor 0xf8
 sectors/track 63
 heads 255
 hidden sectors 147632128
 sectors 536870912 (volumes > 32 MB)
 FAT (32 bit)
 sectors/FAT 65536
 serial number 0x9f981691
 unlabeled

Diese Partition hat 64 Sektoren pro Cluster. Die Anzahl der Bytes in jedem Sektor beträgt 512, da dies die Standardeinstellung ist. Daher beträgt die Clustergröße 32 KB.

Beachten Sie, dass die Sektorgröße größer als 512 sein kann (FAT-Spezifikation beschränkt sie auf 4096, aber Sie können höher gehen). In diesem Fall wird in der Ausgabe ein zusätzliches Feld "Bytes / Sektor" angezeigt.

$ sudo mkfs.fat -S 4096 -s 16 /dev/sda5
mkfs.fat 4.1 (2017-01-24)

$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
 code offset 0x58+2
 OEM-ID "mkfs.fat"
 Bytes/sector 4096
 sectors/cluster 16
 Media descriptor 0xf8
 sectors/track 63
 heads 255
 hidden sectors 147632128
 sectors 67108864 (volumes > 32 MB)
 FAT (32 bit)
 sectors/FAT 4096
 serial number 0xb059d826
 label: unlabeled

Führen Sie den Abgleich erneut durch, 4096 Byte × 16 Sektoren = 64 KB pro Cluster.


0

Vielen Dank für die obigen Antworten zu fdisk, die die Größe des physischen Sektors anzeigt, und zu / sys path ... aber eine Anmerkung ... von Lucas im Buch Absolute FreeBSD .... Fast jede Festplatte wird über die Größe des Sektors lügen, also im Falle von Linux

/sys/block/sda/queue/hw_sector_size

wird, soweit ich das verstehe, immer 512 anzeigen, um eine bessere Leistung zu erzielen, ist es gut, die tatsächliche physische Sektorgröße zu berücksichtigen, die wirklich in der Hardwarelogik verwendet wird. Es wurde von fdisk gezeigt und ist in vorhanden

cat /sys/block/sdc/queue/physical_block_size 
4096
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.