¿Cómo sabe Linux dónde está su partición de intercambio?

13

He leído que necesitas poner la partición de intercambio en HDD en lugar de SSD.

Mis preguntas son las siguientes:

  • ¿Cuándo y cómo la distribución (u otra cosa) realiza la "comprobación" para encontrar su partición Swap?
  • ¿Sucede durante el arranque?
  • ¿Solo comprueba todos los discos disponibles y busca una partición con la bandera de 'intercambio'?
  • ¿Qué pasa si hay varias particiones como esa?
  • Además, ¿cuántas particiones de intercambio necesito tener si ejecuto, por ejemplo, dos distribuciones diferentes en el mismo disco, digamos Fedora y Ubuntu?
Ne Nenne
fuente
17
Tenga en cuenta que un intercambio en SSD sería realmente un gran intercambio (macOS lo está haciendo por años). Sin embargo, va a hacer lectura / escritura adicional en el SSD, lo que podría reducir su vida útil.
Nonyme
20
¿Dónde leíste que el intercambio debería estar en un HDD y no en un SSD? Además, ¿cuántos años tenía el artículo o comentario? Los SSD modernos son mucho mejores en la nivelación de desgaste y no fallan después de repetidas escrituras como lo hicieron cuando los SSD eran nuevos. Además, si tiene una computadora que solo tiene SSD, entonces realmente no tiene muchas opciones, aparte de no usar swap en absoluto
JDS
2
@zakinster: ¿Qué pasa cuando su unidad de 1TB está siempre llena? Las necesidades de almacenamiento han aumentado con las provisiones de almacenamiento.
Lightness compite con Monica
3
En otras palabras, "sí, estoy de acuerdo, al contrario de lo que dije anteriormente, el tamaño real del disco es irrelevante, es la cantidad que está usando"
Lightness compite con Monica
66
@DavidSchwartz Y, si está "utilizando el intercambio en cantidades significativas", mientras que un SSD producirá una pérdida de rendimiento del sistema considerablemente menor que un HDD, la mejor opción será agregar más RAM al sistema o reducir el virtual huella de memoria de su carga de trabajo de alguna manera para detener el uso significativo de intercambio. También tenga en cuenta que hay una diferencia entre un sistema de larga ejecución que ha completado el intercambio con datos casi nunca utilizados frente a un sistema que intercambia y escanea activamente ...
twalberg

Respuestas:

24

El espacio de intercambio estáticamente configurado (el tipo que utilizan prácticamente todas las distribuciones) se configura de la /etc/fstabmisma manera que los sistemas de archivos.

Una entrada típica se parece a:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

También puede ver cualquiera discardo nofailespecificado en el campo de banderas (el cuarto campo). Cada línea corresponde a un área de intercambio (no tiene que ser una partición, puede tener archivos de intercambio o incluso discos de intercambio completos).

En algunos casos realmente específicos, es posible que tenga un espacio de intercambio configurado dinámicamente, aunque esto es bastante raro porque puede causar un comportamiento problemático relacionado con la gestión de la memoria. En este caso, la configuración es manejada completamente por un componente de espacio de usuario que crea y habilita archivos de intercambio según sea necesario en tiempo de ejecución.

En cuanto a la cantidad que necesita, esa es una pregunta complicada de responder, pero la cantidad de distribuciones de Linux diferentes que planea ejecutar no tiene ningún impacto en esto a menos que desee poder ejecutar una distribución mientras tiene otra en hibernación (y usted probablemente no quiera hacer esto, ya que es una forma realmente fácil de arruinar su sistema).

Cuando vaya a ejecutar el instalador para casi cualquier distribución importante (incluyendo Fedora, OpenSUSE, Linux Mint, Debian y Ubuntu), detectará cualquier partición de intercambio existente en el sistema y las agregará a la configuración para la distribución que está instalación (excepto posiblemente si selecciona particionamiento manual), y en la mayoría de los casos esto dará como resultado que el sistema se configure de manera sensata.

Incluso aparte de eso, sugeriría personalmente evitar tener múltiples particiones de intercambio a menos que esté hablando de un sistema de servidor con muchos discos, e incluso entonces realmente necesita saber qué está haciendo para configurarlo para que funcione bien .

Austin Hemmelgarn
fuente
Si tiene 2 distribuciones de Linux, es posible que tenga una partición de intercambio para el sistema ... por lo que puede intentar hibernar y reanudar ... (mejor usar diferentes usuarios, por cierto, y también debería necesitar diferentes /tmpparticiones / directorio). Probablemente en ese caso es mejor tener máquinas virtuales ...
Hastur
Entonces, lo que se sugiere hacer si tienen una partición dedicada para el intercambio en el mismo SSD en el que está instalado el sistema operativo Linux, sin embargo, no parece tener un intercambio o estar en uso. Si corro systemctl --all | grep swap, obtengo dos resultados. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapy swap.targetambos son ACTIVOS = inactivos y SUB = muertos . ¿Cómo hago para que mi sistema haga uso del área de intercambio?
Rockin4Life33
21

digamos Fedora y Ubuntu?

… Ambos son actualmente sistemas operativos systemd.

Que sucede en los sistemas operativos systemd

el mecanismo nativo

Systemd emplea varios tipos de unidades. .mountlos archivos de la unidad le indican que monte volúmenes. .swaplos archivos de la unidad le indican que le diga al núcleo acerca de las particiones de intercambio. (los .servicearchivos de la unidad le indican cómo ejecutar servicios. Y así sucesivamente). Estos son los mecanismos nativos del sistema. Para promulgarlos, systemd mismo bifurca los procesos secundarios que realizan las llamadas relevantes del sistema.

Si utiliza el systemctlcomando (con --all) en dicho sistema operativo systemd, le informará sobre las .swapunidades cargadas . Por ejemplo:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap cargado activo activo / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap cargado activo activo / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2
dev-sda5.swap cargado activo activo / dev / sda5

También le informará sobre las .mountunidades.

Un administrador del sistema puede escribir realmente esos .swaparchivos unitarios de la mano, al igual que xe puede escribir .service, .sockety otros archivos de la unidad de mano. systemd mismo solo busca archivos unitarios en el sistema de archivos. Son su mecanismo nativo.

Incluso se puede obtener systemd para mostrarle qué hay en estos archivos de unidad y en qué parte del sistema de archivos se pueden encontrar:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Generado automáticamente por systemd-fstab-generator

[Unidad]
SourcePath = / etc / fstab
Documentación = man: fstab (5) man: systemd-fstab-generator (8)

[Intercambiar]
Qué = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Opciones = sw
PS 

archivos de unidad generados automáticamente

Se pueden escribir a mano. Por lo general, sin embargo, tales .mounty .swaparchivos unitarios son generados automáticamente por programas conocidos como generadores . Dos de estos generadores son systemd-fstab-generatory systemd-gpt-auto-generator. Ambos se ejecutan temprano en el proceso de arranque y en respuesta a un systemctl daemon-reloadcomando, y (como puede ver arriba) generan una carga completa de archivos de unidad en un subdirectorio no documentado en /run/systemd/. systemd solo usa esos archivos unitarios generados .

El generador anterior lee /etc/fstaby reconoce varias extensiones systemd para ese formato de archivo. Como señalé en un comentario de respuesta, tradicionalmente las particiones de intercambio tienen el tipo de montajesw y así es como uno encontrará que otros sistemas operativos reconocen los registros de intercambio en esta tabla. Pero los softwares de Linux han tomado la alternativa de reconocer el tipo VFS en su lugar, buscándolo swapcomo el tipo VFS. systemd-fstab-generatorno es una excepción aquí, y así es como se interpreta /etc/fstabal convertirlo en los mecanismos nativos.

El último generador procesa la tabla de particiones EFI que se encuentra en el mismo disco que contiene la partición del sistema EFI, buscando entradas de la tabla de particiones EFI que tienen varios GUID de tipo de partición conocidos . Uno de esos GUID es el GUID convencional asignado a las particiones de intercambio de Linux; y si systemd-gpt-auto-generatorencuentra una partición con ese GUID (que satisface los criterios dados en el systemd doco) creará una .swapunidad para él; No /etc/fstabinvolucrado en absoluto .

Por supuesto, este proceso tiene muchos efectos secundarios. Por ejemplo, debido a que /etc/fstabno tiene una clave principal para la tabla, los registros pueden tener campos duplicados de "especificación" y "archivo" (es decir, "qué" y "dónde"). Sin embargo, en el mecanismo systemd nativo, el campo "archivo" (es decir, "dónde") es una clave única para las .mountunidades, incrustada en los nombres de las unidades. No hay dos .mountunidades que puedan compartirlo. Para las .swapunidades, el campo "spec" (es decir, "qué") es la clave única para las unidades. No hay dos .swapunidades que puedan compartir eso. Por lo tanto, no todos los registros /etc/fstabson necesariamente convertibles a los mecanismos nativos y funcionarán, especialmente si las personas hacen cosas como enumerar el mismo punto de montaje para dos propósitos diferentes o enumerar la misma partición de intercambio de dos maneras diferentes.

De manera similar, debido a que se ha traducido /etc/fstaben el mecanismo nativo y el mecanismo nativo del sistema tiene otras formas de activar unidades , el comportamiento es sutilmente diferente al de los sistemas operativos que no son del sistema. .mountPor defecto, una unidad se activará automáticamentesystemd-udevd , incluso después del arranque, en respuesta a la apariencia del dispositivo de almacenamiento montado. O se puede enumerar como Wants=o Requires=de alguna .serviceo .socketunidad, lo que significa que se (re) activará cuando lo estén. Hay incluso RequiresMountsFor=.

programas de instalación y la forma systemd

Tradicionalmente, los programas de instalación del sistema operativo y el administrador del sistema luego de reconfigurar el sistema tienen swentradas escritas en /etc/fstab. Y así es como el nativo .mounty las .swapunidades terminan siendo autogenerados. La utilidad de instalación / configuración "sabe" dónde se colocó el archivo de intercambio, porque en su interfaz de usuario el administrador del sistema hizo algún tipo de elección, y escribe un /etc/fstabpara que coincida. A veces, esa opción es que necesito que me hagas una partición de intercambio como parte de la instalación. ; a veces es Solo use la partición de intercambio que ya encontró en el disco. (instaladores mirando los tipos de partición, también).

Pero la gente de systemd tiene esta idea de sistemas operativos que se configuran automáticamente desde un /etcárbol en gran parte vacío , los llamados sistemas sin estado , y de eso se tratan mecanismos como el generador que lee la tabla de particiones EFI. En el plan de la gente systemd, no hay /etc/fstab, y de hecho no hay datos de configuración persistentes /etcen absoluto, y todo esto se deduce del contenido de la tabla de particiones en el disco , en cada arranque y en cada uno systemctl daemon-reload. Actualmente están promoviendo programas de instalación del sistema operativo que no escriben un/etc/fstab .

En el esquema tradicional, por supuesto, puede hacer que cada sistema operativo tenga su propia partición de intercambio privada, y no hacer que toquen entre sí las particiones de intercambio. Y, de hecho, si está utilizando hibernar a disco a través de una partición de intercambio y espera poder realizar un arranque múltiple a otro sistema operativo mientras está en hibernación (lo cual es una muy mala idea porque es muy fácil causar daños al sistema de archivos de esta manera ) eso será necesario.

En el esquema systemd, incluso si el sistema operativo aún no está como lo imaginan las personas systemd y "apátridas", los generadores antes mencionados funcionan; y así todas las particiones de intercambio (en el disco ESP / root) con el tipo de partición requerido son empleadas automáticamente por todos los sistemas operativos systemd. Dado que compartirán todas las particiones de intercambio descubiertas automáticamente, realmente no es necesario crear una partición de intercambio por sistema operativo instalado.

Otras lecturas

JdeBP
fuente
Muy bien, ¡gracias por la explicación!
Andy Dalton
Hay una parte de mí que quiere rechazarte solo por hablar de systemd. Pero, por supuesto, eso es injusto (y también systemd o no no significa que estés equivocado) y normalmente no rechazo las cosas de todos modos, ya que nunca me pareció la forma adecuada de ser constructivo. Sin embargo, es un buen artículo, así que a pesar de ver referencias a Lennart, he votado esta respuesta. Si nada más se esfuerza y ​​debe ser elogiado. He leído brevemente sobre la basura apátrida y eso es algo que más bien ... Ni siquiera estoy seguro de lo que hace, así que lo dejaré así.
Pryftan
13

Históricamente, la partición de intercambio se especifica /etc/fstabcon una entrada de tipo swap. En el arranque, los procesos de inicio leerán ese archivo e insertarán esa configuración en el núcleo.

Un ejemplo de la entrada en /etc/fstabes:

/dev/sdb    none    swap     sw      0  0

No estoy familiarizado con la forma en que systemdgestiona el intercambio, pero creo que el resultado final es el mismo: un proceso de espacio de usuario es consciente de qué espacio está asignado para el intercambio, y el proceso de espacio de usuario informa al núcleo.

Andy Dalton
fuente
El interrogador preguntó sobre Linux, y esto no está mal para Linux; Pero es peculiar de Linux. Otros sistemas operativos, como FreeBSD, por ejemplo, reconocen los registros de intercambio /etc/fstabdesde su swtipo de montaje en lugar de desde su swaptipo VFS.
JdeBP
1
La respuesta no aborda todas las partes de la pregunta.
Sergiy Kolodyazhnyy
También debo señalar que esta respuesta también está desactualizada en el mundo de los sistemas operativos systemd. No tiene en cuenta systemd-gpt-auto-generator.
JdeBP
2
¿Qué quieres decir con que systemd no usa fstab? ¡Claro que lo hace!
psusi
1
@psusi: systemd entiende, pero no requiere fstab.
MSalters
4

Todas las otras respuestas mencionan cómo apuntar a un sistema de archivos de intercambio en el arranque.

Sin embargo, varios puntos para agregar a las otras respuestas:

  • el espacio de intercambio también puede ser un archivo;
  • una partición de espacio de intercambio se marca generalmente como tipo 0x82;
  • puede montar un espacio de intercambio en cualquier momento del tiempo de ejecución;
  • para marcar / inicializar una partición / archivo, para que sea reconocido y utilizado / montado más adelante como espacio de intercambio, debe usar el comando mkswap;
  • para activar / usar una partición / archivo de intercambio a mano, use el comando swapon;
  • Del mismo modo, para cambiarlo, puedes ir con swapoff.
Rui F Ribeiro
fuente