Como obter o tamanho de um arquivo especial de bloco? [duplicado]

3

Eu preciso ser capaz de determinar o tamanho de um arquivo especial de bloco.

Por exemplo, dado o /dev/sda , preciso de um comando que forneça o tamanho do dispositivo. (Por tamanho eu quero dizer capacidade, uma vez que este é um dispositivo de armazenamento.)

Justificativa:

Eu posso armazenar informações no dispositivo com:

echo "12345" >/dev/sda  # needs to be run as root

(Não execute esse comando, a propósito ... a menos que você não se importe com seus dados.)

No entanto, preciso saber quantos dados posso armazenar no dispositivo e não sei como fazer isso.

    
por Nathan Osman 06.04.2011 / 06:23

4 respostas

1

Eu não acho que haja uma resposta geral entre plataformas. No Linux, as informações estão em /proc/partitions (apesar do nome, isso contém todos os (mais?) Dispositivos de bloco, não apenas partições no estilo PC).

awk '$4 == "sda" {print $3}' /proc/partitions
    
por 06.04.2011 / 09:14
5

blockdev fornece uma maneira de definir / obter atributos de dispositivo de bloco. Para obter o tamanho em bytes:

blockdev --getsize64 /dev/sda

Como alternativa, algumas informações estão disponíveis no diretório /sys/block/<device> , por exemplo, cat /sys/block/sda/size fornece o tamanho sda medido em blocos de 512 bytes. Veja /sys/block/sda/sda1/size para o tamanho da partição sda1.

Para tamanho sda em KiB

echo $[  $(cat /sys/block/sda/size) / 2 ]

Para tamanho sda em bytes

echo $[  $(cat /sys/block/sda/size) * 512 ]
    
por 06.04.2011 / 14:41
2

Analisar fdisk -l /dev/sda deve dar exatamente a você:

Disk /dev/sda: 68.7 GB, 68719476736 bytes
255 heads, 63 sectors/track, 8354 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bd83f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        8009    64325632   83  Linux
/dev/sda2            8009        8355     2780161    5  Extended
/dev/sda5            8009        8355     2780160   82  Linux swap / Solaris
    
por 06.04.2011 / 07:39
0

/proc/partitions tem os dados que você está procurando. É aqui que o fdisk obterá seus dados.

Por exemplo, no meu sistema

major minor  #blocks  name
   8     0  976762584 sda
   8     1    8385898 sda1
   8     2  968374102 sda2
   8    16  976762584 sdb
   8    17    8385898 sdb1
   8    18  968374102 sdb2
   8    32  976762584 sdc
   8    33    8385898 sdc1
   8    34  968374102 sdc2
   8    48  976762584 sdd
   8    49    8385898 sdd1
   8    50  968374102 sdd2
   9     2 2905122048 md2
    
por 06.04.2011 / 14:20