fdisk com a opção '-l' - como ela obtém informações sobre o dispositivo?

0

Estou experimentando um dispositivo definido por software, tentando forçá-lo a trabalhar com tamanho de bloco = 512 bytes, mas parece que o Linux não quer isso.

Eu forcei o dispositivo a reportar números mínimos de blocos para o comando SCSI INQUIRY :

hekto@ubuntu3:~$ sudo sg_inq -p 0xb0 /dev/sde
VPD INQUIRY: Block limits page (SBC)
  Maximum compare and write length: 255 blocks
  Optimal transfer length granularity: 1 blocks
  Maximum transfer length: 1 blocks
  Optimal transfer length: 1 blocks
  Maximum prefetch transfer length: 0 blocks
  Maximum unmap LBA count: 0
  Maximum unmap block descriptor count: 0
  Optimal unmap granularity: 0
  Unmap granularity alignment valid: 0
  Unmap granularity alignment: 0
  Maximum write same length: 0x0 blocks
  Maximum atomic transfer length: 0
  Atomic alignment: 0
  Atomic transfer length granularity: 0

Mas o fdisk -l ainda informa o tamanho do bloco físico = 4096:

hekto@ubuntu3:~$ sudo fdisk -l /dev/sde

Disk /dev/sde: 5 MB, 5120000 bytes
1 heads, 10 sectors/track, 1000 cylinders, total 10000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes  <== see here
I/O size (minimum/optimal): 4096 bytes / 524288 bytes.  <== and here  

De onde vêm esses números (veja acima)?

SO: Ubuntu 14.04.5 LTS com kernel 3.19.0-78-genérico

(trabalhando como máquina virtual no VMware Fusion 8.5.8 no MacBook)

    
por HEKTO 26.09.2017 / 19:24

1 resposta

1

Eu sugeri usar strace (1) para entender o syscalls(2) feito pelo comando fdisk , ou seja, para executar como root:

  strace fdisk -l /dev/sde

você descobriu que usa alguns ioctl como BLKIOMIN e BLKPBSZGET

Eu não sei como o kernel calcula esses parâmetros; talvez leia sd (4) .

    
por 26.09.2017 / 21:23