Comment trouver la taille d'une partition non montée sur Linux?

14

J'utilise tune2fs, mais il donne des données en blocs et je ne peux pas obtenir la valeur exacte de la taille totale de la partition.

J'ai également utilisé fdisk -l /dev/mmcblk0p1, mais la taille que j'obtiens d'ici est également une valeur différente.

Comment trouver la taille exacte de la partition?

Sarthak_Bhutani
la source
8
Notez que tune2fs n'imprime pas la taille de la partition, il imprime la taille du système de fichiers . Un système de fichiers peut être plus petit qu'une partition (s'il y a de l'espace inutilisé sur la partition), il peut être plus grand qu'une partition (dans le cas où la partition a été en quelque sorte tronquée; évidemment, le système de fichiers est corrompu dans ce cas, mais il est toujours plus grand que la partition). Il peut également s'étendre sur plusieurs partitions, ou même être "virtuel", c'est-à-dire ne pas même avoir de support (par exemple sysfs, procfs, tmpfs).
Jörg W Mittag

Réponses:

22

La commande est:

blockdev --getsize64 /dev/mmcblk0p1

Il donne le résultat en octets, sous la forme d'un entier 64 bits. Il interroge la taille en octets d'un périphérique de bloc , car le noyau voit sa taille.

La raison, pourquoi cela fdisk -l /dev/mmcblk0p1n'a pas fonctionné, était que cela fdiskfait une chose totalement différente: il lit dans la table de partition (= premier secteur) du périphérique de bloc, et imprime ce qu'il a trouvé . Il ne vérifie rien, dit seulement ce qui est dans la table de partition.

Cela ne dérange même pas si la table de partition est endommagée, ou le périphérique de bloc n'en a pas: il affichera un avertissement que la somme de contrôle n'est pas correcte, mais il imprime toujours ce qui est trouvé, même si les valeurs sont clairement non -sens.

C'est ce qui s'est passé dans votre cas: /dev/mmcblk0p1 n'a pas de table de partition. Comme le nom du périphérique l'indique, il s'agit déjà de la première partition du disque physique /dev/mmcblk0. Ce disque contient une table de partition, si vous l'aviez interrogé fdisk -l /dev/mmcblk0, il avait fonctionné (en supposant qu'il avait une table de partition msdos).

peterh - Réintégrer Monica
la source
Mon espace de partition est exactement de 2 Go mais blockdev et fdisk donnent tous deux des valeurs inférieures à celle où se trouve l'espace restant et veuillez également indiquer à la commande de récupérer sa valeur
Sarthak_Bhutani
@Sarthak_Bhutani Quelles informations dont vous avez besoin ne sont pas imprimées fdisk -l /dev/mmcblk0? Il devrait vous indiquer la taille d'un bloc, le nombre total de blocs sur le périphérique, la taille des partitions et également le bloc de début et de fin de chaque partition. Vous pouvez également déterminer les plages de blocs qui ne sont attribuées à aucune partition à partir de ces informations.
BlackJack
9

Essayez lsblk, il n'a même pas besoin de 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

Le -bparamètre lui indique de sortir la taille en octets.

heinrich5991
la source
Ceci est un très bel outil !!! Merci! +1!
rmbianchi
5

Pour obtenir la valeur exacte de la taille totale de l'exécution de la partition:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
la source
2
Je pense que cela dépend aussi si la taille du secteur est de 512 (ce qui est la grande majorité des cas aujourd'hui).
peterh
1
@peterh Il est en fait inhabituel pour un périphérique de bloc d'avoir toujours une taille de secteur physique de 512 de nos jours, mais beaucoup de choses (je ne trouve pas d'informations précises sur / sys / class / block) sont conçues pour rapporter en unités de 512 octets quelle que soit la taille réelle du bloc.
Random832
0

Ma solution:

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

/dev/hda2est la partition qui n'est pas nécessairement montée. il est testé avec la version tune2fs1.42.4

user1916016
la source