Localizando o tamanho do setor de uma partição

24

Eu respondi a essa pergunta , assumindo que o *.imgarquivo tivesse um tamanho de setor 512.

Como faço para consultar um dispositivo, ou a imagem de um dispositivo, para encontrar o tamanho correto do setor?

Stefan
fonte

Respostas:

26

fdisk -l (menor L no parâmetro) mostrará, entre outras informações, o tamanho do setor também.

$ 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

Isso mostra que o tamanho do setor é de 512 bytes.

EDIT: As versões mais recentes de fdisk, por exemplo, fdisk(do pacote util-linux 2.20.1), também mostrarão os tamanhos do setor lógico e físico. Por exemplo, saída relevante de uma "unidade WDC WD10EFRX 1TB":

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
Patkos Csaba
fonte
Portanto, eram 4096 bytes, não 512 bytes.
precisa saber é o seguinte
26

De acordo com a documentação para os arquivos sysfs da fila :

# cat /sys/block/sda/queue/hw_sector_size
512
Anthony Ananich
fonte
11
Isso não funcionará para arquivos de imagem arbitrários. Como o kernel deve saber sobre eles?
Christian Pietsch
11
@ChristianPietsch arquivos de imagem arbitrárias são normalmente montados através de dispositivos de loop, de modo que este irá trabalhar para eles. Apenas certifique-se de usar em loopNvez de sdX. Ainda assim, é inútil em certo sentido, já que os arquivos de imagem realmente não possuem setores, e essas informações apenas informam o tamanho do setor do dispositivo atualmente montado.
Ruslan
1

Pode-se apenas usar o file(1)comando e fazer as contas ele mesmo. Isso funciona mesmo que você tenha apenas uma imagem do sistema FAT.

Por exemplo:

$ 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

Esta partição possui 64 setores por cluster. O número de bytes em cada setor é 512, como é o padrão, portanto, o tamanho do cluster é 32 KB.

Observe que o tamanho do setor pode ser maior que 512 (a especificação FAT o limita a 4096, mas você pode ir mais alto). Quando isso acontece, você verá um campo "Bytes / setor" adicional na saída.

$ 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

Faça a correspondência novamente, 4096 bytes × 16 setores = 64 KiB por cluster.

Tankman 六四
fonte
0

obrigado acima das respostas, sobre o fdisk mostrando o tamanho do setor físico e o caminho sobre / sys ... mas uma nota ... de Lucas no livro Absolute FreeBSD .... quase todo disco rígido fica sobre o tamanho do setor, por isso, no caso do linux

/sys/block/sda/queue/hw_sector_size

sempre, pelo que entendi, mostrará 512 para obter melhor desempenho; é bom levar em consideração o tamanho do setor físico, real, realmente usado na lógica de hardware. Mostrado pelo fdisk, e presente em

cat /sys/block/sdc/queue/physical_block_size 
4096
Hex
fonte