Как узнать размер размонтированного раздела в Linux?

14

Я использую tune2fs, но он дает данные в блоках, и я не могу получить точное значение общего размера раздела.

Я тоже пользовался fdisk -l /dev/mmcblk0p1, но размер получаемый отсюда тоже другое значение.

Как я могу найти точный размер раздела?

Sarthak_Bhutani
источник
8
Обратите внимание, что tune2fs не печатает размер раздела, а печатает размер файловой системы . Файловая система может быть меньше, чем раздел (если на разделе есть неиспользуемое пространство), она может быть больше, чем раздел (в случае, если раздел был каким-то образом усечен; очевидно, файловая система в этом случае повреждена, но все же это это больше , чем раздел). Он также может охватывать несколько разделов или даже быть «виртуальным», то есть даже не иметь резервного устройства (например, sysfs, procfs, tmpfs).
Йорг Миттаг,

Ответы:

22

Команда:

blockdev --getsize64 /dev/mmcblk0p1

Это дает результат в байтах, как 64-битное целое число. Он запрашивает размер в байтах в виде блочного устройства , так как ядро видеть его размер.

Причина, по которой fdisk -l /dev/mmcblk0p1это не сработало, заключалась в том, что это fdiskделает нечто совершенно иное: он читает в таблице разделов (= первый сектор) блочного устройства и печатает найденное . Он ничего не проверяет, только говорит, что находится в таблице разделов.

Он даже не беспокоится о том, повреждена ли таблица разделов или нет у блочного устройства: он выведет предупреждение о том, что контрольная сумма не в порядке, но он по-прежнему печатает найденные данные, даже если значения явно не соответствуют -смысл.

Это то, что произошло в вашем случае: /dev/mmcblk0p1 не имеет таблицы разделов. Как видно из названия устройства, это уже первый раздел физического диска /dev/mmcblk0. Этот диск содержит таблицу разделов, если бы вы запросили его fdisk -l /dev/mmcblk0, он работал (при условии, что у него есть таблица разделов msdos).

Петер - Восстановить Монику
источник
Мое пространство разделов составляет ровно 2 ГБ, но blockdev и fdisk оба дают значения меньше, чем то, где находится оставшееся пространство, и, пожалуйста, также сообщите команде, чтобы получить его значение
Sarthak_Bhutani
@Sarthak_Bhutani Какая информация вам не нужна fdisk -l /dev/mmcblk0? В нем должен быть указан размер одного блока, общее количество блоков на устройстве, размер разделов, а также начальный и конечный блоки каждого раздела. Вы также можете определить диапазоны блоков, которые не назначены ни одному разделу из этой информации.
Блэкджек,
9

Попробуйте lsblk, он даже не требует 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

-bПараметр указывает ему выход размер в байтах.

heinrich5991
источник
Это очень хороший инструмент !!! Благодарность! +1!
Rmbianchi
5

Чтобы получить точное значение общего размера раздела, выполните:

awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
GAD3R
источник
2
Я думаю, что это также зависит от того, равен ли размер сектора 512 (что в подавляющем большинстве случаев сегодня).
Петер - Восстановить Монику
1
@peterh В наши дни блочное устройство по-прежнему имеет размер физического сектора 512, но многие вещи (я не могу найти определенную информацию в / sys / class / block) предназначены для отчета в единицах по 512 байт. независимо от фактического размера блока.
Random832
0

Мое решение:

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/hda2раздел, который не обязательно смонтирован. протестировано с tune2fsверсией 1.42.4

user1916016
источник