Как установщик вычисляет что размер раздела подкачки создать? По-видимому, это основано на установленном размере RAM, но это зависит от сколько RAM?
На самом деле существует нет dphys-swapfile
программа на установочном CD Ubuntu по умолчанию и это не используется для вычисления размера подкачки.
То, что происходит, то, что ubiquity
установщик использует partman-auto
сценарии и конфигурационные файлы (названный рецептами) для определения размеров всех разделов. Это работает как это:
/proc/meminfo
).Подробнее:
Файл рецепта может быть похожим на это:
1 1 1 free
$iflabel{ gpt }
method{ biosgrub } .
500 10000 -1 $default_filesystem
$lvmok{ }
method{ format }
format{ }
mountpoint{ / } .
96 512 300% linux-swap
$lvmok{ }
method{ swap }
format{ } .
Алгоритм для вычисления размеров:
for(i=1;i<=N;i++) {
factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
minsum = min[1] + min[2] + ... + min[N];
factsum = factor[1] + factor[2] + ... + factor[N];
ready = TRUE;
for(i=1;i<=N;i++) {
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
if (x != min[i]) {
ready = FALSE;
min[i] = x;
}
}
}
Поскольку больше видит:
Это будет довольно техническим, но было забавой узнать, таким образом, здесь идет...
dphys-swapfile
и вот Исходный код. Опция setup
используется для установки его:setup - tells dphys-swapfile to compute the optimal swap file size and (re-)generate an fitting swap file. Default it 2 times RAM size. This can be called at boot time, so the file allways stays the right size for current RAM, or run by hand whenever RAM size has changed.
dphys-swapfile
установка conf_swapsize
для предопределенного размера (в Аккуратном это пусто):size we want to force it to be, default (empty) gives 2*RAM CONF_SWAPSIZE=
и установка для a swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
Фактический размер вычисляется немного далее на:
if [ "${CONF_SWAPSIZE}" = "" ] ; then # compute automatic optimal size echo -n "computing size, " # this seems to be the nearest to physical RAM size, lacks about 60k KCORESIZE="`ls -l /proc/kcore | awk '{ print $5 }'`" # make MBytes which rounded down will be exactly 1 too few, so add 1 MEMSIZE="`expr "${KCORESIZE}" / 1048576 + 1`" # default, without config file overwriding, swap=2*RAM CONF_SWAPSIZE="`expr "${MEMSIZE}" '*' "${SWAPFACTOR}"`" fi
Поскольку Вы видите способ, которым они вычисляют, он в этом пакете зависит от размера /proc/kcore
, затем разделен на 1048576, +1 для округления его и затем умножается на swapfactor. От моей машины:
Таким образом, значение по умолчанию для этой системы было бы 1065349120 / 1048576 = 1015+1 = 1016 * 2 = 2 032 мегабайта.