man blockdev
--setbsz bytes
Set blocksize. Note that the block size is specific to the cur‐
rent file descriptor opening the block device, so the change of
block size only persists for as long as blockdev has the device
open, and is lost once blockdev exits.
Em bloco / ioctl.c :
case BLKBSZGET: /* get block device soft block size (cf. BLKSSZGET) */
return put_int(arg, block_size(bdev));
case BLKSSZGET: /* get block device logical block size */
return put_int(arg, bdev_logical_block_size(bdev));
case BLKPBSZGET: /* get block device physical block size */
return put_uint(arg, bdev_physical_block_size(bdev));
Portanto, o BSZ relatado por blockdev
não é nem de lógica nem de tamanho de bloco físico. É o "tamanho do bloco de software".
Olhando para este código, a parte sobre o tamanho do bloco de software sendo específico para o descritor de arquivo não parece fazer sentido. Também não quer definir isso com blockdev
, dado que nenhuma outra opção é documentada em termos de blocos (apenas setores de 512 bytes de tamanho fixo).
Em meus próprios testes, o que realmente acontece é que o BSZ é preservado enquanto o processo any mantém o dispositivo de bloco aberto. Parece que é redefinido no último fechamento ().
Parted ficou confuso com isso também há alguns anos
belay that. BLKBSZGET is the kernel's chosen block size it will use to access the device (for normal disks turns out this is 1k, for ata_ram this is 4k), which is not the underlying disk's logical block size. :-( So we will likely need another ioctl() to get the right value from the kernel, and BLKSSZGET may wind up being the disks's logical block size, while a new ioctl() exports the disk's physical sector size. ugh.
On Wed, Apr 09, 2003 at 06:53:17PM +0200, Rob van Nieuwkerk wrote:
I get 4096 with BLKBSZGET on several unmounted partitions on my system (RH 2.4.18-27.7.x kernel). Some give 1024 .. Maybe it is because I had them mounted first and unmounted them for the test ?
Essa seria a resposta mais provável. Quando você desmonta, eu não acredito O sistema de arquivos incomoda a set_blocksize (get_hardsect_size (dev)).