Ich beantwortete diese Frage unter der Annahme, dass die *.img
Datei 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?
Ich beantwortete diese Frage unter der Annahme, dass die *.img
Datei 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:
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 fdisk
zB 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
Gemäß der Dokumentation für die Warteschlange sysfs-Dateien :
# cat /sys/block/sda/queue/hw_sector_size
512
loopN
stattdessen 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.
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.
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