¿Cómo encontrar el tamaño de una partición desmontada en Linux?

14

Estoy usando tune2fs, pero proporciona datos en bloques y no puedo obtener el valor exacto del tamaño total de la partición.

También lo he usado fdisk -l /dev/mmcblk0p1, pero el tamaño que obtengo desde aquí también es un valor diferente.

¿Cómo puedo encontrar el tamaño exacto de la partición?

Sarthak_Bhutani
fuente
8
Tenga en cuenta que tune2fs no imprime el tamaño de la partición, imprime el tamaño del sistema de archivos . Un sistema de archivos puede ser más pequeño que una partición (si hay espacio sin usar en la partición), puede ser más grande que una partición (en caso de que la partición se haya truncado de alguna manera; obviamente el sistema de archivos está dañado en ese caso, pero aún así es más grande que la partición). También puede abarcar múltiples particiones, o incluso ser "virtual", es decir, ni siquiera tiene un dispositivo de respaldo (por ejemplo, sysfs, procfs, tmpfs).
Jörg W Mittag

Respuestas:

22

El comando es:

blockdev --getsize64 /dev/mmcblk0p1

Da el resultado en bytes, como un entero de 64 bits. Consulta el tamaño de byte de un dispositivo de bloque , ya que el núcleo ve su tamaño.

La razón, por qué fdisk -l /dev/mmcblk0p1no funcionó, fue que fdiskhace algo totalmente diferente: se lee en la tabla de particiones (= primer sector) del dispositivo de bloque e imprime lo que encontró . No verifica nada, solo dice lo que hay en la tabla de particiones.

Ni siquiera molesta si la tabla de particiones está dañada, o el dispositivo de bloque no tiene una: imprimirá una advertencia de que la suma de comprobación no está bien, pero aún imprime lo que se encuentra, incluso si los valores son claramente no -sentido.

Esto es lo que sucedió en su caso: /dev/mmcblk0p1 no tiene una tabla de particiones. Como muestra el nombre del dispositivo, ya es la primera partición del disco físico /dev/mmcblk0. Este disco contiene una tabla de particiones, si lo hubiera consultado fdisk -l /dev/mmcblk0, había funcionado (suponiendo que tuviera una tabla de particiones msdos).

peterh - Restablece a Monica
fuente
Mi espacio de partición es exactamente 2gb pero blockdev y fdisk ambos valores give menor que ¿dónde está el espacio restante y por favor diga comando para recuperar su valor
Sarthak_Bhutani
@Sarthak_Bhutani ¿Qué información necesita no está impresa fdisk -l /dev/mmcblk0? Debe indicarle el tamaño de un bloque, el número total de bloques en el dispositivo, el tamaño de las particiones y también el bloque inicial y final de cada partición. También puede averiguar los rangos de bloques que no están asignados a ninguna partición a partir de esa información.
BlackJack
9

Intenta lsblk, ni siquiera requiere 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

El -bparámetro le dice que muestre el tamaño en bytes.

heinrich5991
fuente
Esta es una herramienta muy buena !!! ¡Gracias! +1!
rmbianchi
5

Para obtener el valor exacto del tamaño total de la partición, ejecute:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
fuente
2
Creo que también depende de si el tamaño del sector es 512 (que es la gran mayoría de los casos en la actualidad).
peterh - Restablece a Monica el
1
@peterh En realidad, es inusual que un dispositivo de bloque aún tenga un tamaño de sector físico de 512 en estos días, pero muchas cosas (no puedo encontrar información definitiva sobre / sys / class / block) están diseñadas para informar en unidades de 512 bytes independientemente del tamaño real del bloque.
Random832
0

Mi solución:

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

¿Dónde /dev/hda2está la partición que no está necesariamente montada? se prueba con la tune2fsversión 1.42.4

usuario1916016
fuente