Jak znaleźć rozmiar odmontowanej partycji w systemie Linux?

14

Korzystam z tune2fs, ale daje dane w blokach i nie mogę uzyskać dokładnej wartości całkowitego rozmiaru partycji.

Użyłem również fdisk -l /dev/mmcblk0p1, ale rozmiar, który otrzymuję stąd, ma również inną wartość.

Jak znaleźć dokładny rozmiar partycji?

Sarthak_Bhutani
źródło
8
Zauważ, że tune2fs nie drukuje rozmiaru partycji, tylko rozmiar systemu plików . System plików może być mniejszy niż partycja (jeśli na partycji jest nieużywane miejsce), może być większy niż partycja (w przypadku, gdy partycja została w jakiś sposób obcięta; oczywiście system plików jest w tym przypadku uszkodzony, ale nadal jest większy niż partycja). Może również obejmować wiele partycji, a nawet być „wirtualny”, tzn. Nawet nie mieć urządzenia wspierającego (np. Sysfs, procfs, tmpfs).
Jörg W Mittag

Odpowiedzi:

22

Polecenie to:

blockdev --getsize64 /dev/mmcblk0p1

Podaje wynik w bajtach jako 64-bitową liczbę całkowitą. To odpytuje rozmiar bajtów o urządzenia blokowego , jak jądro zobaczyć jego rozmiar.

Powodem, dlaczego fdisk -l /dev/mmcblk0p1nie zadziałało, było to, że fdiskrobi coś zupełnie innego: czyta w tablicy partycji (= pierwszy sektor) urządzenia blokowego i drukuje to, co znalazł . Nic nie sprawdza, mówi tylko to, co jest w tablicy partycji.

Nawet nie przeszkadza, jeśli tablica partycji jest uszkodzona lub urządzenie blokowe jej nie ma: wyświetli ostrzeżenie, że suma kontrolna nie jest poprawna, ale nadal drukuje znalezione dane, nawet jeśli wartości są wyraźnie inne -sens.

Tak stało się w twoim przypadku: /dev/mmcblk0p1 nie ma tablicy partycji. Jak pokazuje nazwa urządzenia, jest to już pierwsza partycja dysku fizycznego /dev/mmcblk0. Ten dysk zawiera tablicę partycji, gdybyś ją zapytał fdisk -l /dev/mmcblk0, działał (zakładając, że ma tablicę partycji msdos).

peterh - Przywróć Monikę
źródło
Moje miejsce na partycję ma dokładnie 2 GB, ale zarówno blockdev, jak i fdisk dają wartości mniejsze niż to, gdzie jest pozostała przestrzeń, i proszę również powiedzieć komendę, aby odzyskała swoją wartość
Sarthak_Bhutani
@Sarthak_Bhutani Których informacji nie potrzebujesz fdisk -l /dev/mmcblk0? Powinien podać rozmiar jednego bloku, całkowitą liczbę bloków na urządzeniu, rozmiar partycji, a także blok początkowy i końcowy każdej partycji. Na podstawie tych informacji możesz także ustalić zakresy bloków, które nie są przypisane do żadnej partycji.
BlackJack
9

Spróbuj lsblk, nawet nie wymaga rootowania:

$ 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

-bParametr informuje go do wyjścia rozmiar w bajtach.

heinrich5991
źródło
To bardzo miłe narzędzie !!! Dzięki! +1!
rmbianchi
5

Aby uzyskać dokładną wartość całkowitego rozmiaru partycji:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
źródło
2
Myślę, że zależy to również od tego, czy wielkość sektora wynosi 512 (co stanowi dziś przeważającą większość przypadków).
peterh - Przywróć Monikę
1
@peterh W rzeczywistości urządzenia blokowe mają obecnie rozmiar sektora fizycznego wynoszący 512 obecnie, ale wiele rzeczy (nie mogę znaleźć konkretnych informacji na temat / sys / class / block) jest zaprojektowanych do raportowania w jednostkach 512 bajtów niezależnie od rzeczywistego rozmiaru bloku.
Random832
0

Moje rozwiązanie:

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

gdzie /dev/hda2jest partycja, która niekoniecznie jest zamontowana. jest testowany z tune2fswersją 1.42.4

użytkownik1916016
źródło