Come trovare le dimensioni di una partizione non montata su Linux?


14

Sto usando tune2fs, ma fornisce dati in blocchi e non riesco a ottenere il valore esatto della dimensione totale della partizione.

Ho anche usato fdisk -l /dev/mmcblk0p1, ma la dimensione che sto ottenendo da qui ha anche un valore diverso.

Come posso trovare la dimensione esatta della partizione?


8
Nota che tune2fs non stampa le dimensioni della partizione, stampa le dimensioni del filesystem . Un file system può essere più piccolo di una partizione (se non v'è spazio inutilizzato sulla partizione), può essere più grande di una partizione (nel caso in cui la partizione è stata in qualche modo troncato, ovviamente, il file system è danneggiato in quel caso, ma ancora è più grande di la partizione). Può anche comprendere più partizioni o addirittura essere "virtuale", ovvero non avere nemmeno un dispositivo di supporto (ad es. Sysfs, procfs, tmpfs).
Jörg W Mittag,

Risposte:


22

Il comando è:

blockdev --getsize64 /dev/mmcblk0p1

Fornisce il risultato in byte, come numero intero a 64 bit. Interroga la dimensione in byte di un dispositivo a blocchi , poiché il kernel vede la sua dimensione.

Il motivo, perché fdisk -l /dev/mmcblk0p1non ha funzionato, è che fdiskfa qualcosa di completamente diverso: legge nella tabella delle partizioni (= primo settore) del dispositivo a blocchi e stampa ciò che ha trovato . Non controlla nulla, dice solo cosa c'è nella tabella delle partizioni.

Non disturba nemmeno se la tabella delle partizioni è danneggiata o il dispositivo a blocchi non ne ha uno: stamperà un avviso che il checksum non va bene, ma stampa comunque ciò che trova, anche se i valori sono chiaramente non -senso.

Questo è quello che è successo nel tuo caso: /dev/mmcblk0p1 non ha una tabella delle partizioni. Come mostra il nome del dispositivo, è già la prima partizione del disco fisico /dev/mmcblk0. Questo disco contiene una tabella delle partizioni, su cui è stata eseguita una query fdisk -l /dev/mmcblk0, ha funzionato (supponendo che avesse una tabella delle partizioni msdos).


Il mio spazio di partizione è esattamente di 2 GB, ma blockdev e fdisk forniscono entrambi valori inferiori a quello in cui si trova lo spazio rimanente e si prega inoltre di dire al comando di recuperarne il valore
Sarthak_Bhutani,

@Sarthak_Bhutani Di quali informazioni hai bisogno non sono stampate fdisk -l /dev/mmcblk0? Dovrebbe indicare la dimensione di un blocco, il numero totale di blocchi sul dispositivo, la dimensione delle partizioni e anche il blocco iniziale e finale di ciascuna partizione. Puoi anche capire intervalli di blocchi che non sono assegnati a nessuna partizione da quelle informazioni.
BlackJack,

9

Prova lsblk, non richiede nemmeno il 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

Il -bparametro indica di generare la dimensione in byte.


Questo è uno strumento molto carino !!! Grazie! +1!
rmbianchi,

5

Per ottenere il valore esatto della dimensione totale dell'esecuzione della partizione:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size

2
Penso che dipenda anche dal fatto che la dimensione del settore sia 512 (che è la stragrande maggioranza dei casi oggi).
Peter - Ripristina Monica il

1
@peterh In realtà è insolito che un dispositivo a blocchi abbia ancora una dimensione del settore fisico di 512 in questi giorni, ma molte cose (non riesco a trovare informazioni precise su / sys / class / block) sono progettate per riportare in unità di 512 byte indipendentemente dalle dimensioni effettive del blocco.
Casuale 832,

0

La mia soluzione:

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

dov'è /dev/hda2la partizione che non è necessariamente montata. è testato con la versione tune2fs1.42.4

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.