¿Por qué Linux usa una partición de intercambio en lugar de un archivo?


32

Me parece que un archivo de intercambio es más flexible.


1
Puede usar un archivo de intercambio en Linux. Lo estoy haciendo ahora mismo en varias máquinas. Sin embargo, no estoy usando nada especial, solo ext4 o ext4 en LVM. Sin cifrado ni nada complicado. Suspender e hibernar me ha funcionado muy bien, incluso en mi máquina NVMe.
Cory T

Respuestas:


32

Un archivo de intercambio es más flexible pero también más falible que una partición de intercambio. Un error del sistema de archivos podría dañar el archivo de intercambio. Un archivo de intercambio puede ser una molestia para el administrador, ya que el archivo no se puede mover ni eliminar. Un archivo de intercambio no se puede utilizar para la hibernación. Un archivo de intercambio fue un poco más lento en el pasado, aunque la diferencia es insignificante hoy en día.

La ventaja de un archivo de intercambio es que no tiene que decidir el tamaño de antemano. Sin embargo, en Linux, aún no puede cambiar el tamaño de un archivo de intercambio en línea: debe anular el registro, cambiar el tamaño y luego volver a registrar (o crear un archivo diferente y eliminar el antiguo). Por lo tanto, no hay tantos beneficios para un archivo de intercambio en Linux, en comparación con una partición de intercambio. Es principalmente útil cuando necesita temporalmente más memoria virtual, en lugar de como un dispositivo permanente.


44
En el pasado también hubo un beneficio de rendimiento. Pero creo que eso terminó cuando salió 2.6.
xenoterracide

Parece que esto realmente no responde la pregunta. ¿O me estoy perdiendo algo? La respuesta solo habla de archivos de intercambio, y no menciona particiones en absoluto. @Gilles fue intencional, ¿o acabas de hacer un error tipográfico?
Gabe.

1
@gabe: Estaba discutiendo archivos de intercambio en comparación con particiones. Esperemos que esto sea más claro ahora.
Gilles 'SO- deja de ser malvado'

1
Señalo aquí mis comentarios en la respuesta de Penz. La pérdida de rendimiento inducida por fs percibida en los archivos de intercambio es discutible.
ata

2
De acuerdo con Ubuntu Community Help Wiki help.ubuntu.com/community/SwapFaq Se necesita una partición de intercambio para la hibernación. Cita: "No puede usar un archivo de intercambio en un sistema de archivos activo". Y con respecto al rendimiento, parece que no hay diferencia a menos que el archivo sea escaso. serverfault.com/questions/25653/…
Erik Sjölund

28

Se puede preferir una partición de intercambio porque evita una dependencia en el sistema de archivos cuando todo lo que necesita es un grupo de memoria direccionable.

Pero nada le impide usar un archivo de intercambio en lugar de una partición de intercambio, o además de una partición de intercambio.

  • Crea el archivo:

    dd if=/dev/zero of=/extraswap bs=1M count=512
    
  • Inicialice el contenido del archivo:

    mkswap /extraswap
    
  • Úselo:

    swapon /extraswap
    
  • A ver si funcionó:

    free -m
    

Para comenzar a usar el archivo de intercambio siempre en el arranque, edite / etc / fstab y agregue

/extraswap           swap          swap    defaults    0 0

[1] http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/custom-guide/s1-swap-adding.html


55
Alias ​​útil que he estado usando siempre para permitirme escribir moreswapuna terminal si de repente necesito espacio de intercambio adicional:alias moreswap='swapfile=`mktemp /tmp/swapXXXX` && sudo touch $swapfile && sudo dd bs=512 count=1M if=/dev/zero | tee $swapfile | pv -s 512M && sudo mkswap $swapfile && sudo swapon $swapfile'
Michael Mrozek

Esta es una buena información, pero no responde la pregunta.
lesmana

66
Además, el bit en la sobrecarga del sistema de archivos es incorrecto. Contrariamente a la creencia común, no hay gastos generales en el uso de archivos de intercambio. Andrew Morton da la explicación simple aquí . Esa es una de las razones por las que usar un administrador de intercambio dinámico basado en archivos de intercambio como el demonio swapspace es una buena solución si está bien configurado.
ata

Agreguemos que el enfoque de archivo de intercambio puede ser su única opción cuando se ejecuta en la nube.
sorin

1

Quizás la razón principal es que el núcleo principal suspender al disco no funciona con archivos de intercambio. Por ejemplo, las instrucciones wiki de Debian son para instalar uswsuspsi necesita esto.

Más recientemente, los archivos de intercambio no funcionan si el sistema de archivos lo es btrfs, por lo que es más simple para las distribuciones crear siempre el intercambio como una partición.

Se menciona vagamente que el uso de un archivo para intercambio tenía un rendimiento potencialmente menor que una partición, antes de la versión 2.6 del núcleo. https://www.kernel.org/doc/gorman/html/understand/understand014.html#text15


1

Para completar, agregaré mi propia respuesta:

Como dijo @Gilles, un archivo de intercambio no se puede utilizar para la hibernación. Cuando se usa un archivo de intercambio, el sistema debe ubicar el encabezado del archivo de intercambio, pero para hacer esto se debe montar el sistema de archivos que contiene el archivo de intercambio, y un sistema de archivos registrado, por ejemplo, ext3, ext4 y básicamente todos los sistemas de archivos modernos utilizados por Linux - no se puede montar durante la reanudación desde el disco. (En realidad, hay formas de hacerlo, pero bastante engorroso).

Fuente: https://www.kernel.org/doc/Documentation/power/swsusp-and-swap-files.txt


0

Creo que se debe principalmente a que el tiempo de acceso a los datos ubicados en una partición es menor. El objetivo del archivo de intercambio es más para ayudar al administrador del sistema cuando realmente no tiene RAM y necesita operar grandes operaciones que tal vez podrían bloquear su sistema. En este caso, creará esporádicamente archivos de intercambio cuando sea necesario.

Pero de todos modos puedes tener los dos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.