Eu trabalho em TI. Às vezes, somos solicitados a obter dados de unidades que falharam. Temos vários adaptadores SATA para USB, ATA para USB, etc. para esta tarefa. Mas, às vezes, eles relatam o tamanho de bloco errado para o computador (ou talvez não estejam relatando nenhum tamanho de bloco, e meu laptop Linux está apenas assumindo o tamanho errado). Como digo ao kernel para usar um tamanho de bloco de 512 bytes quando ele deseja usar um tamanho de bloco de 4096 bytes ou vice-versa?
Estou executando o Fedora, versão do kernel 5.2.11-100.fc29.x86_64, se isso faz alguma diferença.
Aqui estão alguns dados extras que me pediram (dispositivo 16 (sdb) é o Coolmax e 19 (sdd) é o StarTech):
$ sudo lsusb | grep JMicron
Bus 001 Device 016: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
Bus 001 Device 019: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
$ cat /sys/block/sdb/queue/logical_block_size
4096
$ cat /sys/block/sdd/queue/logical_block_size
4096
$ cat /sys/block/sdb/queue/physical_block_size
4096
$ cat /sys/block/sdd/queue/physical_block_size
4096
$ sudo sg_readcap /dev/sdb
Read Capacity results:
Last logical block address=366284645 (0x15d50f65), Number of blocks=366284646
Logical block length=4096 bytes
Hence:
Device size: 1500301910016 bytes, 1430799.4 MiB, 1500.30 GB
$ sudo sg_readcap /dev/sdd
Read Capacity results:
Last logical block address=122096645 (0x7470c05), Number of blocks=122096646
Logical block length=4096 bytes
Hence:
Device size: 500107862016 bytes, 476940.0 MiB, 500.11 GB
$ sudo sg_readcap -16 /dev/sdb
Read Capacity results:
Protection: prot_en=0, p_type=0, p_i_exponent=0
Logical block provisioning: lbpme=0, lbprz=0
Last logical block address=2930277167 (0xaea87b2f), Number of logical blocks=2930277168
Logical block length=512 bytes
Logical blocks per physical block exponent=0
Lowest aligned logical block address=0
Hence:
Device size: 1500301910016 bytes, 1430799.4 MiB, 1500.30 GB
$ sudo sg_readcap -16 /dev/sdd
Read Capacity results:
Protection: prot_en=0, p_type=0, p_i_exponent=0
Logical block provisioning: lbpme=0, lbprz=0
Last logical block address=976773167 (0x3a38602f), Number of logical blocks=976773168
Logical block length=512 bytes
Logical blocks per physical block exponent=0
Lowest aligned logical block address=0
Hence:
Device size: 500107862016 bytes, 476940.0 MiB, 500.11 GB
Você pode usar
losetup
para criar um dispositivo de loop com um tamanho de setor lógico diferente.Assim, por exemplo:
Alterando o dispositivo de loop já existente:
No entanto, alguns adaptadores USB também têm outras esquisitices, como alguns que não dão acesso à capacidade total da unidade, como algumas pontes USB têm recursos de criptografia ou RAID, portanto, podem reservar alguns setores para metadados.
Portanto, se possível, é preferível usar hardware que faça o que você deseja, sem soluções alternativas.