Comment augmenter la taille du fichier d'échange sans le supprimer dans le terminal?

59

Y a-t-il un moyen d'augmenter mon "fichier d'échange" existant sans avoir à le détruire et à le recréer? Je souhaite augmenter mon espace d'échange de 1 Go à 2 Go. Actuellement, il est configuré comme tel:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        1048572 736640  -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov  9  2016 /swapfile

J'utilise Ubuntu 14.04.

Dave
la source
Combien de RAM avez-vous? La 2G est-elle suffisante? Je pense que vous devrez swapoffcréer un nouveau fichier / fichier d'échange mkswap, etswapon -a
heynnema
1
Ajoutez un nouveau fichier d'échange, suivez les instructions de la question ci-dessus. vous pouvez avoir 2 fichiers d'échange;)
Ravexina
1
@Ravexina, une question de débutant peut-être, mais pourquoi voudrais-je ajouter un nouveau fichier d'échange plutôt que d'augmenter la taille du fichier existant? Ou n'est-il pas possible d'augmenter un fichier d'échange existant?
Dave
@ Dave C'est également possible, car vous savez peut-être que nous pouvons le faire swapoffensuite ddet mkswapfinalement swapon. Je pensais que tu ne voulais pas toucher à ton dossier.
Ravexina
2
@Ravexina poster que comme réponse
Sergiy Kolodyazhnyy

Réponses:

68

Commencez par désactiver le fichier d'échange:

sudo swapoff /swapfile

Augmentons maintenant la taille du fichier d'échange:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

La commande ci-dessus ajoutera 1 Go de zéro octet à la fin de votre fichier d'échange.

Configurez le fichier en tant que "fichier d'échange":

sudo mkswap /swapfile

activer l'échange:

sudo swapon /swapfile
Ravexina
la source
3
sudo fallocate -l 2G /swapfileest probablement plus sûr que dd (bien qu'il ne conserve pas le fichier d'échange d'origine), et il nécessite également un fichier sudo chmod 600 /swapfile.
Heynnema
7
@heynnema Ne crée pas de fallocatefichiers fragmentés ? La swaponpage de manuel indique que les fichiers d'échange clairsemés sont problématiques (en mentionnant spécifiquement fallocate).
muru
3
@heynnema Non, la mkswappage de manuel indique également que les fichiers ne doivent contenir aucun trou.
muru
1
@muru suppose que je me trompe :-) Chaque fois que je lisais comment créer un fichier / swap à partir du 17.04, ils utilisaient fallocate. Je suppose que nous devrons juste utiliser "destructeur de disque"!
heynnema
1
@heynnema: vous pouvez utiliser fallocatepour préallouer de l'espace disque, puis ddpour combler les trous avec des zéros.
David Foerster
40

Vous devez ajouter un nouveau fichier d'échange au lieu de redimensionner l'existant, car cela ne vous coûte rien de le faire . Pour redimensionner un fichier d'échange, vous devez d'abord le désactiver, ce qui supprime le contenu de l'échange dans la RAM, ce qui augmente la pression sur celle-ci et peut même invoquer le tueur de MOO (sans parler du fait que vous pouvez forcer vos disques pendant plusieurs minutes). Plusieurs fichiers d'échange ne sont pas un problème, il est très facile de configurer un autre fichier d'échange. Redimensionner un fichier d'échange plutôt que d'en ajouter un ne présente pratiquement aucun avantage.

dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file
muru
la source
Le sudo chmod 600 /some/filerequis, ou non?
heynnema
1
Et count=1Kdonne un fichier 1G? le compte est en taille de bloc, oui? Et cela peut être 512/4096? Ou est-ce que mes calculs sont faux?
heynnema
3
+1 Cette approche facilite également la déconnexion de l'un des fichiers d'échange si vous décidez par la suite que vous avez besoin de récupérer de l'espace disque.
joeytwiddle
2
Cela doit vraiment être marqué comme la bonne réponse. Wow, bravo!
Beshoy Girgis
1
@muru est ce supposé être une solution permanente? J'ai exécuté ces commandes le 30 avril, mais au cours du mois de mai, mon deuxième fichier d'échange était parti. Je n'ai pas effacé mais c'était parti
Christopher Rucinski
13

Vous pouvez créer un autre fichier d'échange comme je l'ai fait:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Vérifiez qu'il fonctionne avec sudo swapon --show
    Pour le rendre permanent, ajoutez un fichier à sa fstabsaisie:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
borekon
la source
S'il vous plaît noter que fallocatedevrait être utilisé un peu pour créer le fichier, car il crée un fichier de rechange. voirman mkswap
Charles Green
@CharlesGreen cela a fonctionné comme je l'ai écrit, donc cela devrait fonctionner pour presque tout le monde.
borekon
Je voudrais lire man mkswap, surtout le dernier paragraphe avant "Environnement"
Charles Green
1
a travaillé sur NanoPi Neo avec Armbian v 5.65
BiTinerary
5

J'ai de bons résultats sur mon Ubuntu 17.04 en suivant les conseils d'Arian Acosta de blogpost . Ici, vous pouvez remplacer la 4G sudo fallocate -l 4G /swapfilepar la quantité de gigaoctets de votre choix. Par exemple sudo fallocate -l 2G /swapfilepour TS.

En règle générale, la taille recommandée pour un fichier d'échange est 2 fois la quantité de RAM, mais vous pouvez la rendre aussi grande que nécessaire. N'oubliez pas que cela ne remplace pas la mémoire, car les performances sont bien pires car tout est stocké sur le disque.

J'ai créé un script bash simple qui incrémente le fichier d'échange à 4 Go et l'a testé sur Ubuntu 16.04.

Cela peut être exécuté ligne par ligne ou un script bash, mais je l’utilise pour réaliser des installations sans tête.

#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only  ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"
Denis Trofimov
la source
3
Vous devriez avoir ajouté un argument au script, qui correspond à la quantité de SWAP à ajouter et enfin à ajouter à fstab. Mais
quand
0

Réponse générale à "comment redimensionner un fichier d'échange":

De Bogdan Cornianu, ici: https://bogdancornianu.com/change-swap-size-in-ubuntu/

[DEVIS (PRESQUE VERBATIM, avec juste quelques-uns de mes ajouts de commentaires) DÉBUT]

Dans l'exemple suivant, nous allons étendre l'espace de swap disponible dans le fichier / swapfile de 4 GiB à 8 GiB.

  1. Désactiver tous les processus d'échange

    sudo swapoff -a
    
  2. Redimensionner le swap

    sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    

    if= fichier d'entrée = fichier de
    ofsortie
    bs= taille du bloc; Ici, 1Gsignifie 1 gibibyte, ou GiB, qui, selon man ddest G = 1024 * 1024 * 1024 octets
    count= multiplicateur de blocs

  3. Rendre le fichier utilisable comme swap

    sudo mkswap /swapfile
    
  4. Activer le fichier d'échange

    sudo swapon /swapfile
    
  5. Vérifiez la quantité de swap disponible

    grep SwapTotal /proc/meminfo
    

[QUOTE END]

Gabriel Staples
la source