Znajdowanie rozmiaru sektora partycji


24

Odpowiedziałem na to pytanie , zakładając, że *.imgplik ma rozmiar sektora wynoszący 512.

Jak wysłać zapytanie do urządzenia lub jego obrazu, aby znaleźć właściwy rozmiar sektora?

Odpowiedzi:


26

fdisk -l (to jest niższe L w parametrze) pokaże Ci, między innymi, także rozmiar sektora.

$ 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

To pokazuje, że rozmiar sektora wynosi 512 bajtów.

EDYCJA: Nowsze wersje fdisknp. fdisk(Z pakietu util-linux 2.20.1) pokażą również logiczny i fizyczny rozmiar sektora. Na przykład odpowiednie dane wyjściowe z „napędu WDC WD10EFRX 1 TB”:

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

Zatem było to 4096 bajtów, a nie 512 bajtów.
Hibou57

26

Zgodnie z dokumentacją plików sysfs kolejki :

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

1
To nie zadziała w przypadku dowolnych plików obrazów. Skąd jądro powinno o nich wiedzieć?
Christian Pietsch,

1
@ChristianPietsch arbitralne pliki obrazów są zwykle montowane za pośrednictwem urządzeń pętlowych, więc to będzie dla nich działać. Pamiętaj tylko, aby użyć loopNzamiast sdX. Jest to jednak w pewnym sensie bezcelowe, ponieważ pliki obrazów tak naprawdę nie mają żadnych sektorów, a te informacje pokażą tylko rozmiar sektora aktualnie zamontowanego urządzenia.
Ruslan

1

Można po prostu użyć file(1)polecenia i samodzielnie wykonać matematykę. Działa to nawet wtedy, gdy masz tylko obraz systemu FAT.

Na przykład:

$ 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

Ta partycja ma 64 sektory na klaster. Liczba bajtów w każdym sektorze wynosi 512, ponieważ jest to wartość domyślna, dlatego rozmiar klastra wynosi 32 KB.

Zauważ, że rozmiar sektora może być większy niż 512 (specyfikacja FAT ogranicza go do 4096, ale możesz przejść wyżej). Kiedy tak się stanie, zobaczysz dodatkowe pole „Bajty / sektor” na wyjściu.

$ 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

Wykonaj dopasowanie ponownie, 4096 bajtów × 16 sektorów = 64 KiB na klaster.


0

dzięki powyższym odpowiedziom, o fdisk pokazującym fizyczny rozmiar sektora i o ścieżce / sys ... ale jedna uwaga ... autorstwa Lucasa w książce Absolute FreeBSD .... prawie każdy dysk twardy będzie dotyczył wielkości sektora, więc w przypadku Linuksa

/sys/block/sda/queue/hw_sector_size

zawsze, o ile rozumiem, pokaże 512 dla lepszej wydajności dobrze jest wziąć pod uwagę rozmiar sektora fizycznego, rzeczywisty, który jest naprawdę używany w logice sprzętowej. Pokazane przez fdisk i obecne w

cat /sys/block/sdc/queue/physical_block_size 
4096
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.