Como o instalador calcula o tamanho da partição swap a ser criada? Presumivelmente, é baseado no tamanho da RAM instalada, mas isso depende de quanta RAM?
Como o instalador calcula o tamanho da partição swap a ser criada? Presumivelmente, é baseado no tamanho da RAM instalada, mas isso depende de quanta RAM?
Respostas:
Na verdade, não há dphys-swapfile
programa em um CD de instalação padrão do Ubuntu e não é usado para calcular o tamanho da troca .
O que acontece é que o ubiquity
instalador usa os partman-auto
scripts e arquivos de configuração (chamados de receitas ) para determinar os tamanhos de todas as partições. Funciona assim:
/proc/meminfo
).Detalhes:
Um arquivo de receita pode ficar assim:
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{ } .
O algoritmo para calcular os tamanhos:
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;
}
}
}
Para mais informações, consulte:
Isso vai ser bastante técnico, mas foi divertido descobrir, então aqui vai ...
dphys-swapfile
e aqui está o código fonte . A opção setup
é usada para configurá-lo:setup - informa ao dphys-swapfile para calcular o tamanho ideal do arquivo de troca e (re) gere um arquivo de troca apropriado. O padrão é 2 vezes o tamanho da RAM. Isso pode ser chamado no momento da inicialização, para que o arquivo permaneça sempre o tamanho certo para a RAM atual ou execute manualmente sempre que o tamanho da RAM tiver mudou.
dphys-swapfile
há uma configuração conf_swapsize
para um tamanho predefinido (em Natty, isso está vazio):tamanho que queremos forçar, o padrão (vazio) fornece 2 * RAM CONF_SWAPSIZE =
e um cenário para uma swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
O tamanho real é calculado um pouco mais adiante:
if ["$ {CONF_SWAPSIZE}" = ""]; então # calcular tamanho ideal automático eco -n "tamanho da computação" # este parece ser o mais próximo do tamanho físico da RAM, falta cerca de 60k KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' '" # make MBytes arredondados será exatamente 1 a menos, então adicione 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # padrão, sem substituir o arquivo de configuração, swap = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" fi
Como você pode ver, a maneira como eles o calculam neste pacote depende do tamanho de e /proc/kcore
, em seguida, é dividido por 1048576, +1 para arredondá-lo e multiplicado pelo fator de troca. Da minha máquina:
Portanto, o padrão para este sistema seria 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.