Я использую tune2fs, но он дает данные в блоках, и я не могу получить точное значение общего размера раздела.
Я тоже пользовался fdisk -l /dev/mmcblk0p1
, но размер получаемый отсюда тоже другое значение.
Как я могу найти точный размер раздела?
Я использую tune2fs, но он дает данные в блоках, и я не могу получить точное значение общего размера раздела.
Я тоже пользовался fdisk -l /dev/mmcblk0p1
, но размер получаемый отсюда тоже другое значение.
Как я могу найти точный размер раздела?
Ответы:
Команда:
blockdev --getsize64 /dev/mmcblk0p1
Это дает результат в байтах, как 64-битное целое число. Он запрашивает размер в байтах в виде блочного устройства , так как ядро видеть его размер.
Причина, по которой fdisk -l /dev/mmcblk0p1
это не сработало, заключалась в том, что это fdisk
делает нечто совершенно иное: он читает в таблице разделов (= первый сектор) блочного устройства и печатает найденное . Он ничего не проверяет, только говорит, что находится в таблице разделов.
Он даже не беспокоится о том, повреждена ли таблица разделов или нет у блочного устройства: он выведет предупреждение о том, что контрольная сумма не в порядке, но он по-прежнему печатает найденные данные, даже если значения явно не соответствуют -смысл.
Это то, что произошло в вашем случае: /dev/mmcblk0p1
не имеет таблицы разделов. Как видно из названия устройства, это уже первый раздел физического диска /dev/mmcblk0
. Этот диск содержит таблицу разделов, если бы вы запросили его fdisk -l /dev/mmcblk0
, он работал (при условии, что у него есть таблица разделов msdos).
fdisk -l /dev/mmcblk0
? В нем должен быть указан размер одного блока, общее количество блоков на устройстве, размер разделов, а также начальный и конечный блоки каждого раздела. Вы также можете определить диапазоны блоков, которые не назначены ни одному разделу из этой информации.
Попробуйте 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
Параметр указывает ему выход размер в байтах.
Чтобы получить точное значение общего размера раздела, выполните:
awk '{print $1*512}' /sys/class/block/mmcblk0p1/size
Мое решение:
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