Як знайти розмір відремонтованого розділу в Linux?


14

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

Я також використовував fdisk -l /dev/mmcblk0p1, але розмір, який я отримую звідси, також має інше значення.

Як я можу знайти точний розмір розділу?


8
Зауважте, що tune2fs не друкує розмір розділу, він друкує розмір файлової системи . Файлова система може бути меншою за розділ (якщо на розділі є невикористаний простір), вона може бути більшою, ніж розділ (у випадку, якщо розділ якимось чином урізаний; очевидно, файлова система у цьому випадку пошкоджена, але все ж більша, ніж перегородку). Він також може охоплювати декілька розділів або навіть бути "віртуальним", тобто навіть не мати резервного пристрою (наприклад, sysfs, procfs, tmpfs).
Jörg W Mittag

Відповіді:


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? Він повинен повідомити вам розмір одного блоку, загальну кількість блоків на пристрої, розмір розділів, а також блок початку та кінця кожного розділу. Ви також можете визначити діапазони блоків, які не призначені жодному розділу з цієї інформації.
BlackJack

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Параметр вказує йому вихід розмір в байтах.


Це дуже приємний інструмент !!! Спасибі! +1!
rmbianchi

5

Щоб отримати точне значення загального розміру запуску розділу:

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

2
Я думаю, що це також залежить від того, чи буде розмір сектору 512 (що є переважною більшістю випадків сьогодні).
peterh

1
@peterh Насправді незвично, що блоковий пристрій досі має розмір фізичного сектору 512, але багато речей (я не можу знайти певної інформації про / sys / class / block) призначені для звітування в одиницях із 512 байтів незалежно від фактичного розміру блоку.
Випадково832

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.