¿Cómo aumento el tamaño del archivo de intercambio sin eliminarlo en el terminal?

59

¿Hay alguna manera de aumentar mi "archivo de intercambio" existente sin tener que destruirlo y recrearlo? Me gustaría aumentar mi espacio de intercambio de 1GB a 2GB. Actualmente está configurado como tal:

$ 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

Estoy usando Ubuntu 14.04.

Dave
fuente
¿Cuánta RAM tienes? ¿Es suficiente 2G? Creo que tendrá que swapoffcrear un nuevo / mkswapswapon -a
archivo de intercambio
1
Agregue un nuevo archivo de intercambio, siga las instrucciones de la pregunta anterior. puede tener 2 archivos de intercambio;)
Ravexina
1
@Ravexina, quizás una pregunta para novatos, pero ¿por qué querría agregar un nuevo archivo de intercambio en lugar de aumentar el tamaño del archivo existente? ¿O no es posible aumentar un archivo de intercambio existente?
Dave
@Dave Eso también es posible, como sabrás que podemos swapoffentonces ddy mkswapfinalmente swapon. Pensé que no querías tocar tu archivo.
Ravexina
2
@Ravexina publica eso como respuesta
Sergiy Kolodyazhnyy

Respuestas:

67

Primero deshabilite el archivo de intercambio:

sudo swapoff /swapfile

Ahora aumentemos el tamaño del archivo de intercambio:

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

El comando anterior agregará 1GiB de cero bytes al final de su archivo de intercambio.

Configure el archivo como un "archivo de intercambio":

sudo mkswap /swapfile

habilitar el intercambio:

sudo swapon /swapfile
Ravexina
fuente
3
sudo fallocate -l 2G /swapfilees probablemente más seguro que dd (aunque no mantiene el archivo de intercambio original), y también necesita a sudo chmod 600 /swapfile.
heynnema
77
@heynnema ¿No crea fallocatearchivos dispersos? La página de swaponmanual dice que los archivos de intercambio dispersos son problemáticos (mencionando específicamente fallocate).
muru
3
@heynnema no, la página de mkswapmanual también dice que los archivos no deben contener ningún agujero.
muru
1
@muru supongo que estoy equivocado :-) Cada vez que leía cómo crear un / swapfile con el inicio de 17.04 usaban Falcocate. ¡Supongo que tendremos que usar "destructor de discos"!
heynnema
1
@heynnema: lo que podría hacer es usar fallocatepara preasignar espacio en disco y luego usar ddpara llenar los agujeros con ceros.
David Foerster
39

Debería agregar un nuevo archivo de intercambio en lugar de cambiar el tamaño del existente porque no le cuesta nada hacerlo . Para cambiar el tamaño de un archivo de intercambio, primero debe deshabilitarlo, lo que desaloja el contenido del intercambio a la RAM, lo que aumenta la presión sobre la RAM e incluso puede convocar al asesino OOM (sin mencionar que podría estar agotando sus discos durante varios minutos). Múltiples archivos de intercambio no son un problema, es trivialmente fácil de configurar otro archivo de intercambio. Literalmente, no hay ningún beneficio en cambiar el tamaño de un archivo de intercambio sobre agregar otro.

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
fuente
¿Es sudo chmod 600 /some/fileobligatorio o no?
heynnema
1
¿Y count=1Kda un archivo 1G? el recuento está en tamaño de bloque, ¿sí? ¿Y eso puede ser 512/4096? ¿O mis matemáticas están mal?
heynnema
3
+1 Este enfoque también facilita la desconexión de uno de los archivos de intercambio si luego decide que necesita recuperar el espacio en disco.
joeytwiddle
2
Esto realmente necesita ser marcado como la respuesta correcta. Wow, bravo!
Beshoy Girgis
1
@muru ¿se supone que esto es una solución permanente? Ejecuté estos comandos el 30 de abril, pero en algún momento del mes de mayo, mi segundo archivo de intercambio desapareció. No eliminé pero desapareció
Christopher Rucinski,
13

Puede crear otro archivo de intercambio como lo hice yo:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Verifique que funciona con sudo swapon --show
    Para que sea permanente, agregue un archivo al fstabarchivo que escribe:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Borekon
fuente
Tenga en cuenta que fallocatedebe usarse bit para crear el archivo, ya que crea un archivo sparce. verman mkswap
Charles Green
@CharlesGreen me funcionó como lo escribí, por lo que debería funcionar para casi cualquier persona.
Borekon
Sugeriría leer man mkswap, especialmente la última parrafo antes de "Medio ambiente"
Charles Green
1
trabajó en NanoPi Neo con Armbian v 5.65
BiTinerary
5

Tengo buenos resultados en mi Ubuntu 17.04 siguiendo los consejos de Arian Acosta del blog . Uno puede sustituir el 4G aquí sudo fallocate -l 4G /swapfilecon cualquier cantidad de gigabytes que desee. Por ejemplo sudo fallocate -l 2G /swapfilepara TS.

En términos generales, el tamaño recomendado para un archivo de intercambio es 2 veces la cantidad de RAM, pero puede hacerlo tan grande como lo necesite. Recuerde que esto no es un sustituto de la memoria porque el rendimiento es mucho peor ya que las cosas están almacenadas en el disco.

Creé un script bash simple que incrementa el archivo de intercambio a 4GB y lo probé en Ubuntu 16.04.

Esto se puede ejecutar línea por línea o un script bash, pero lo uso para hacer instalaciones sin cabeza.

#!/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
fuente
3
Debería haber agregado un argumento al script, que es la cantidad de SWAP que se agregará y finalmente agregarlo a fstab. Pero aún así, me gusta esto
LnxSlck
0

Respuesta general para "cómo cambiar el tamaño del archivo de intercambio":

Desde Bogdan Cornianu, aquí: https://bogdancornianu.com/change-swap-size-in-ubuntu/

[CITA (Casi VERBATIMO, con solo algunas de mis adiciones de comentarios) INICIO]

En el siguiente ejemplo, ampliaremos el espacio de intercambio disponible en / swapfile de 4 GiB a 8 GiB.

  1. Desactiva todos los procesos de intercambio

    sudo swapoff -a
    
  2. Cambiar el tamaño del intercambio

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

    if= archivo de entrada = archivo de
    ofsalida
    bs= tamaño de bloque; aquí, 1Grepresenta 1 gibibyte, o GiB, que, según man ddes G = 1024 * 1024 * 1024 bytes
    count= multiplicador de bloques

  3. Hacer el archivo utilizable como intercambio

    sudo mkswap /swapfile
    
  4. Activar el archivo de intercambio

    sudo swapon /swapfile
    
  5. Verifique la cantidad de intercambio disponible

    grep SwapTotal /proc/meminfo
    

[FIN DE LA COTIZACIÓN]

Gabriel Staples
fuente