Comment l'installateur calcule-t-il la taille de la partition d'échange à créer? Vraisemblablement, il est basé sur la taille installée de RAM, mais cela dépend-il de la quantité de RAM?
En fait, il n'y a pas de programme dphys-swapfile
sur un CD d'installation Ubuntu par défaut et il n'est pas utilisé pour calculer la taille swap.
Le programme d’installation ubiquity
utilise les scripts partman-auto
et les fichiers de configuration (appelés recettes ) pour déterminer la taille de tous les fichiers. partitions. Cela fonctionne comme ceci:
/proc/meminfo
).Détails:
Un fichier de recette peut ressembler à ceci:
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{ } .
L'algorithme pour calculer les tailles:
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;
}
}
}
Pour plus voir:
Cela va être plutôt technique, mais c'était amusant de le découvrir alors voilà ...
dphys-swapfile
et voici le Code source . L'option setup
est utilisée pour la configurer:setup - indique à dphys-swapfile de calculer la taille optimale du fichier d'échange et à (re) générer un fichier d'échange approprié. Par défaut, il est 2 fois RAM taille. Ceci peut être appelé au démarrage, de sorte que le fichier conserve toujours la taille Correcte pour la RAM actuelle, ou s'exécute manuellement lorsque RAM la taille a Changé.
dphys-swapfile
se trouve un paramètre conf_swapsize
pour une taille prédéfinie (dans Natty, cela est vide):taille que nous voulons le forcer, défaut (vide) donne 2 * RAM CONF_SWAPSIZE =
et un réglage pour un swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
La taille réelle est calculée un peu plus loin sur:
if ["$ {CONF_SWAPSIZE}" = ""]; alors # calculera la taille optimale automatique echo -n "taille informatique", # cela semble être la plus proche de la taille physique RAM, manque environ 60 Ko KCORESIZE = "` ls -l/proc/kcore | awk '{print $ 5}' '" # Make Les méga-octets arrondis seront exactement 1 trop peu, ajoutez donc 1 MEMSIZE = "` expr "$ {KCORESIZE}"/1048576 + 1` " # Défaut, sans écrasement du fichier de configuration, swap = 2 * RAM CONF_SWAPSIZE =" `expr" $ { MEMSIZE} "'*'" $ {SWAPFACTOR} "` " Fi
Comme vous pouvez le constater, leur calcul dans ce package dépend de la taille de /proc/kcore
, puis est divisé par 1048576, +1 pour le arrondir, puis multiplié par swapfactor. De ma machine:
La valeur par défaut de ce système serait donc 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 Mo.