Я не знаю ни о каком требовании что область подкачки быть непрерывным на диске в соответствии с Linux с LVM или иначе. Я никогда не принимал меры, чтобы моя подкачка LVs была непрерывна, и никогда не сталкивался ни с какой проблемой (возможно, что вся моя подкачка, LVs просто, оказалось, был непрерывен, я никогда не смотрел).
Linux поддерживает файлы подкачки, состоящие из нескольких несмежных участков, это было бы нечетно, чтобы иметь такое ограничение на объемы LVM. Я не могу найти ссылку на это ни в какой официальной документации или любом объясняющем, почему подкачка LVs должна быть непрерывной. Это имеет все признаки городской легенды.
Источник может лечь в HP-UX, какой LVM Linux частично вдохновлен, и который сделал (делает?) требуют, чтобы область подкачки была непрерывна. Я не знаю, что это когда-либо имело место на Linux.
Может быть воспринятый выигрыш в производительности, но со степенями 4 МБ, я очень сомневаюсь, что существует любой выигрыш в производительности, и я не могу найти сравнительный тест.
Если у Вас есть группы объема, которые охватывают по нескольким дискам, можно хотеть ограничить то, что PV подкачка идет LV. Но я не потребовал бы непрерывного объема.
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
(число, выраженное в кибибайтах).
Я обычно использую это:
% echo $((gb=$((mb=$((kb=1024))*kb))*kb))
Например:
% echo $((gb=$((mb=$((kb=1024))*kb))*kb))
1073741824
$(($sectors * $bs))
и$((sectors * bs))
POSIX, первый является более портативным. Более ранние версии спецификации POSIX сделали это неясным, был ли вторым POSIX или нет. Поведение для второго только указано, если переменные содержат литеральные константы, не вещи как(1+1)
– Stéphane Chazelas 09.01.2014, 15:13