Как я могу найти фактический (dd) размер диска флэш-памяти?

Я не знаю ни о каком требовании что область подкачки быть непрерывным на диске в соответствии с Linux с LVM или иначе. Я никогда не принимал меры, чтобы моя подкачка LVs была непрерывна, и никогда не сталкивался ни с какой проблемой (возможно, что вся моя подкачка, LVs просто, оказалось, был непрерывен, я никогда не смотрел).

Linux поддерживает файлы подкачки, состоящие из нескольких несмежных участков, это было бы нечетно, чтобы иметь такое ограничение на объемы LVM. Я не могу найти ссылку на это ни в какой официальной документации или любом объясняющем, почему подкачка LVs должна быть непрерывной. Это имеет все признаки городской легенды.

Источник может лечь в HP-UX, какой LVM Linux частично вдохновлен, и который сделал (делает?) требуют, чтобы область подкачки была непрерывна. Я не знаю, что это когда-либо имело место на Linux.

Может быть воспринятый выигрыш в производительности, но со степенями 4 МБ, я очень сомневаюсь, что существует любой выигрыш в производительности, и я не могу найти сравнительный тест.

Если у Вас есть группы объема, которые охватывают по нескольким дискам, можно хотеть ограничить то, что PV подкачка идет LV. Но я не потребовал бы непрерывного объема.

5
10.01.2014, 00:28
2 ответа

Используя sgdisk

Можно использовать sgdisk распечатать подробную информацию:

sgdisk --print <device>

[…]
Disk /dev/sdb: 15691776 sectors, 7.5 GiB
Logical sector size: 512 bytes
[…]

При умножении количества секторов с размером сектора, Вы получаете точное количество байта, которое должно соответствовать выводу dd.

Используя /sys непосредственно

Можно также получить те числа непосредственно от /sys:

Количество секторов: /sys/block/<device>/size
Размер сектора: /sys/block/<device>/queue/logical_block_size

Вот способ вычислить размер:

sectors=$(cat /sys/block/sdb/size)
bs=$(cat /sys/block/sdb/queue/logical_block_size)
echo $(( $sectors * $bs ))        --- OR ---        echo "$sectors * $bs" | bc

Используя udisks

udisks производит информацию непосредственно. Об этом сообщают как size:

udisks --show-info <device> | grep size

Используя blockdev

blockdev --getsize64 <device>

От /proc/partitions

grep ' sdb$' /proc/partitions

(число, выраженное в кибибайтах).

13
27.01.2020, 20:33
  • 1
    Оба $(($sectors * $bs)) и $((sectors * bs)) POSIX, первый является более портативным. Более ранние версии спецификации POSIX сделали это неясным, был ли вторым POSIX или нет. Поведение для второго только указано, если переменные содержат литеральные константы, не вещи как (1+1) –  Stéphane Chazelas 09.01.2014, 15:13
  • 2
    Со всеми добавлениями различных методов это превращается в потрясающий канонический ответ IMO. @Alex, я обычно совет, ожидающий, по крайней мере, день или поэтому прежде, чем принять ответ, но я, конечно, не отклоняю Marco представитель этого для записи объема ответа. –  a CVn 09.01.2014, 15:44

Я обычно использую это:

% echo $((gb=$((mb=$((kb=1024))*kb))*kb))

Например:

% echo $((gb=$((mb=$((kb=1024))*kb))*kb))
1073741824
0
27.01.2020, 20:33

Теги

Похожие вопросы