Como encontrar o tamanho de uma partição desmontada no Linux?

14

Estou usando o tune2fs, mas ele fornece dados em blocos e não consigo obter o valor exato do tamanho total da partição.

Eu também usei fdisk -l /dev/mmcblk0p1, mas o tamanho que estou recebendo daqui também é um valor diferente.

Como posso encontrar o tamanho exato da partição?

Sarthak_Bhutani
fonte
8
Observe que o tune2fs não imprime o tamanho da partição, mas sim o tamanho do sistema de arquivos . Um sistema de arquivos pode ser menor que uma partição (se houver espaço não utilizado na partição), pode ser maior que uma partição (caso a partição tenha sido de alguma forma truncada; obviamente o sistema de arquivos está corrompido nesse caso, mas ainda é maior que a partição). Também pode abranger várias partições ou até ser "virtual", ou seja, não possui um dispositivo de suporte (por exemplo, sysfs, procfs, tmpfs).
Jörg W Mittag 28/09

Respostas:

22

O comando é:

blockdev --getsize64 /dev/mmcblk0p1

Ele fornece o resultado em bytes, como um número inteiro de 64 bits. Ele consulta o tamanho de byte de um dispositivo de bloco , conforme o kernel vê seu tamanho.

O motivo, por fdisk -l /dev/mmcblk0p1que não funcionou, é que fdiskfaz algo totalmente diferente: lê na tabela de partição (= primeiro setor) do dispositivo de bloco e imprime o que encontrou . Ele não verifica nada, apenas diz o que está na tabela de partições.

Nem sequer se incomoda se a tabela de partição está danificada ou se o dispositivo de bloco não possui uma: ele imprimirá um aviso de que a soma de verificação não está correta, mas ainda imprime o que foi encontrado, mesmo que os valores não sejam claramente -sentido.

Foi o que aconteceu no seu caso: /dev/mmcblk0p1 não possui uma tabela de partição. Como o nome do dispositivo mostra, ele já é a primeira partição do disco físico /dev/mmcblk0. Este disco contém uma tabela de partições, se você a consultou fdisk -l /dev/mmcblk0, funcionou (supondo que tivesse uma tabela de partições msdos).

peterh - Restabelecer Monica
fonte
Meu espaço partição é exatamente 2gb mas blockdev e fdisk ambos os valores elasticidade menor do que onde está o espaço restante e, por favor também informar comando para recuperar seu valor
Sarthak_Bhutani
@Sarthak_Bhutani Quais informações de que você precisa não são impressas fdisk -l /dev/mmcblk0? Ele deve informar o tamanho de um bloco, o número total de blocos no dispositivo, o tamanho das partições e também o bloco inicial e final de cada partição. Você também pode descobrir intervalos de blocos que não estão atribuídos a nenhuma partição a partir dessas informações.
BlackJack 29/09
9

Tente lsblk, nem sequer requer root:

$ lsblk -b
NAME    MAJ:MIN RM        SIZE RO TYPE MOUNTPOINT
xvda    202:0    0 34359738368  0 disk 
├─xvda1 202:1    0  1676673024  0 part [SWAP]
└─xvda2 202:2    0 32682016768  0 part /var/spool

O -bparâmetro diz para ele exibir o tamanho em bytes.

heinrich5991
fonte
Esta é uma ferramenta muito boa !!! Obrigado! +1!
Rbianchi # 23/18
5

Para obter o valor exato do tamanho total da partição, execute:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
fonte
2
Eu acho que depende também se o tamanho do setor é 512 (que é a grande maioria dos casos hoje).
peterh - Restabelece Monica
1
@peterh Na verdade, é incomum um dispositivo de bloco ainda ter um tamanho de setor físico de 512 atualmente, mas muitas coisas (não consigo encontrar informações definidas em / sys / class / block) são projetadas para relatar em unidades de 512 bytes independentemente do tamanho real do bloco.
Random832
0

Minha solução:

part_dev='/dev/hda2'

total_block=`tune2fs -l $part_dev | awk '/Block count/ {print $3}'`
block_size=`tune2fs -l $part_dev | awk '/Block size/ {print $3}'`

total_size=$(($total_block* $block_size))

echo $total_size

onde /dev/hda2é a partição que não é necessariamente montada. é testado com a tune2fsversão 1.42.4

user1916016
fonte