Come fa Linux a sapere dov'è la sua partizione di swap?


13

Ho letto che devi mettere la partizione di swap su HDD anziché su SSD.

Le mie domande sono le seguenti:

  • Quando e come viene "controllato" dalla distribuzione (o qualcos'altro) per trovare la sua partizione Swap?
  • Succede durante l'avvio?
  • Controlla solo tutti i dischi disponibili e cerca una partizione con flag 'swap'?
  • Cosa succede se ci sono diverse partizioni del genere?
  • Inoltre, quante partizioni di swap devo avere se eseguo, ad esempio, due diverse distribuzioni sullo stesso disco, diciamo Fedora e Ubuntu?

17
Si noti che uno swap su SSD sarebbe davvero un grande scambio (macOS lo sta facendo da anni). Farà comunque ulteriori operazioni di lettura / scrittura sull'SSD che potrebbero ridurne la durata.
Nonyme,

20
Dove hai letto che lo swap dovrebbe essere su un HDD non su SSD? Inoltre, quanti anni aveva l'articolo o il commento? Gli SSD moderni sono molto migliori nel livellamento dell'usura e non falliscono dopo ripetute scritture come quando erano nuovi SSD. Inoltre, se hai un computer che ha solo SSD, allora non hai molta scelta, a parte il non usare affatto lo swap
JDS

2
@zakinster: che dire quando l'unità da 1 TB è sempre piena? Le esigenze di archiviazione sono aumentate con le disposizioni sullo stoccaggio.
Corse di leggerezza con Monica il

3
In altre parole, "sì, sono d'accordo, contrariamente alla mia precedente affermazione, la dimensione effettiva del disco è irrilevante - è quanto ne stai usando"
Lightness Races con Monica,

6
@DavidSchwartz E, se stai "utilizzando lo swap in quantità significative", mentre un SSD produrrà una perdita di prestazioni del sistema notevolmente inferiore rispetto a un HDD, l'opzione migliore sarà comunque quella di aggiungere più RAM al sistema o ridurre il virtuale impronta di memoria del tuo carico di lavoro in qualche modo per fermare il significativo utilizzo dello swap. Nota anche che c'è una differenza tra un sistema a lunga esecuzione che ha riempito lo scambio con dati quasi mai usati rispetto a un sistema che sta scambiando e scansionando attivamente ...
twalberg,

Risposte:


24

Lo spazio di swap configurato staticamente (il tipo che utilizza praticamente ogni distribuzione) è configurato /etc/fstabesattamente come i filesystem.

Una voce tipica è simile a:

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

Puoi anche vedere uno discardo nofailspecificato nel campo flag (il quarto campo). Ogni riga corrisponde a un'area di scambio (non deve essere una partizione, è possibile avere file di scambio o addirittura interi dischi di scambio).

In alcuni casi davvero specifici potresti invece aver configurato uno spazio di swap configurato dinamicamente, anche se questo è piuttosto raro perché può causare comportamenti problematici relativi alla gestione della memoria. In questo caso, la configurazione è gestita interamente da un componente userspace che crea e abilita i file di scambio in base alle esigenze in fase di esecuzione.

Per quanto ne hai bisogno, è una domanda complicata a cui rispondere, ma il numero di diverse distribuzioni Linux che prevedi di eseguire non ha alcun impatto su questo a meno che tu non voglia essere in grado di eseguire una distribuzione mentre ne hai un'altra in letargo (e tu probabilmente non voglio farlo, poiché è un modo davvero semplice per rovinare il sistema).

Quando esegui il programma di installazione per quasi tutte le principali distribuzioni (inclusi Fedora, OpenSUSE, Linux Mint, Debian e Ubuntu), rileverà eventuali partizioni di swap esistenti sul sistema e le aggiungerà alla configurazione per la distribuzione che stai installazione (tranne eventualmente se si seleziona il partizionamento manuale), e nella maggior parte dei casi ciò comporterà la configurazione del sistema in modo ragionevole.

Anche a parte ciò, suggerirei personalmente di evitare di avere più partizioni di swap a meno che tu non stia parlando di un sistema server con molti dischi, e anche allora devi davvero sapere cosa stai facendo per configurarlo in modo che funzioni bene .


Se hai 2 distro Linux, potresti avere una partizione di swap per il sistema ... quindi potresti provare a ibernare e riprendere ... (meglio usare diversi utenti BTW e dovresti avere bisogno anche di /tmppartizioni / directory diverse ). Probabilmente in quel caso è meglio avere macchine virtuali ...
Hastur,

Quindi, cosa viene suggerito di fare se hanno una partizione dedicata per lo scambio sullo stesso SSD su cui è installato il sistema operativo Linux, tuttavia, sembra che non abbia effettivamente lo scambio o che sia in uso. Se corro, systemctl --all | grep swapottengo due risultati. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swaped swap.targetentrambi sono ATTIVO = inattivo e SUB = morto . Come posso fare in modo che il mio sistema utilizzi l'area di scambio?
Rockin4Life33,

21

diciamo Fedora e Ubuntu?

... entrambi i quali sono oggigiorno sistemi operativi e sistemi.

Cosa succede nei sistemi operativi systemd

il meccanismo nativo

Systemd impiega vari tipi di unità. .mounti file unit danno istruzioni per montare i volumi. .swapi file di unità lo indicano per dire al kernel delle partizioni di swap. (i .servicefile di unità indicano come eseguire i servizi. E così via.) Questi sono i meccanismi nativi di sistema. Per metterli in atto, systemd stesso elimina i processi figlio che effettuano le chiamate di sistema pertinenti.

Se usi il systemctlcomando (con --all) su un tale sistema operativo di sistema, ti dirà sulle .swapunità caricate . Per esempio:

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

Ti parlerà anche delle .mountunità.

Un amministratore di sistema può effettivamente scrivere tali .swapfile unità con la mano, proprio come xe può scrivere .service, .sockete altri file di unità a mano. systemd stesso cerca solo file di unità nel filesystem. Sono il suo meccanismo nativo.

Si può anche ottenere systemd per mostrarti cosa c'è in questi file di unità e dove si trovano nel filesystem:

$ 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
# Generato automaticamente da systemd-fstab-generator

[Unità]
SourcePath = / etc / fstab
Documentazione = man: fstab (5) man: systemd-fstab-generator (8)

[Scambiare]
Che = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Opzioni = sw
$ 

file di unità generati automaticamente

Si possono scrivere a mano. Di solito tuttavia tali file di unità .mounte .swapvengono generati automaticamente da programmi noti come generatori . Due di questi generatori sono systemd-fstab-generatore systemd-gpt-auto-generator. Entrambi vengono eseguiti all'inizio del processo di bootstrap e in risposta a un systemctl daemon-reloadcomando e (come si può vedere sopra) generano un intero carico di file di unità in una sottodirectory non documentata in /run/systemd/. systemd stesso usa solo quei file di unità generati .

Il precedente generatore legge /etc/fstab, riconoscendo diverse estensioni di sistema in quel formato di file. Come ho sottolineato in un commento di risposta, tradizionalmente le partizioni di swap hanno il tipo di mount di swed è così che si troverà che altri sistemi operativi riconoscono i record di swap in questa tabella. Ma i software Linux hanno preso la strada alternativa per riconoscere il tipo VFS , cercando swapcome tipo VFS. systemd-fstab-generatornon fa eccezione qui, ed è così che interpreta /etc/fstabquando lo converte nei meccanismi nativi.

Quest'ultimo generatore elabora la tabella delle partizioni EFI che si trova sullo stesso disco che contiene la partizione di sistema EFI, cercando le voci della tabella delle partizioni EFI che hanno vari GUID di tipo di partizione noti . Uno di questi GUID è il GUID convenzionale assegnato alle partizioni di swap Linux; e se systemd-gpt-auto-generatortrova una partizione con quel GUID (che soddisfa i criteri indicati nel documento di sistema) creerà .swapun'unità per esso; non /etc/fstabcoinvolto affatto .

Naturalmente, questo processo ha molti effetti collaterali. Ad esempio, poiché /etc/fstabnon ha una chiave primaria per la tabella, i record possono avere campi duplicati "spec" e "file" (ovvero "what" e "where"). Nel meccanismo systemd nativo, tuttavia, il campo "file" (ovvero "dove") è una chiave univoca per le .mountunità, incorporata nei nomi delle unità. Non è .mountpossibile condividerla con due unità. Per le .swapunità il campo "spec" (ovvero "what") è la chiave univoca per le unità. Non ci sono due .swapunità che possono condividerlo. Quindi non tutti i record in /etc/fstabsono necessariamente convertibili in meccanismi nativi e funzioneranno, specialmente se le persone fanno cose come elencare lo stesso mount point per due scopi diversi o elencare la stessa partizione di swap in due modi diversi.

Allo stesso modo, poiché si è tradotto /etc/fstabnel meccanismo nativo e il meccanismo nativo di systemd ha altri modi di attivare le unità , il comportamento è leggermente diverso da quello dei sistemi operativi non di sistema. Per .mountimpostazione predefinita, un'unità verrà attivata automaticamentesystemd-udevd , anche dopo l'avvio, in risposta all'aspetto del dispositivo di archiviazione montato. Oppure può essere elencato come uno Wants=o Requires=di alcuni .serviceo .socketunità, il che significa che sarà (ri) attivato quando lo sono. C'è anche RequiresMountsFor=.

programmi di installazione e modalità systemd

Tradizionalmente, i programmi di installazione del sistema operativo e l'amministratore di sistema dopo aver successivamente riconfigurato il sistema, hanno scritto swvoci in /etc/fstab. Ed è così che il nativo .mounte le .swapunità finiscono per essere generati automaticamente. L'utility di installazione / configurazione "sa" dove è stato inserito il file di scambio, perché nella sua interfaccia utente l'amministratore di sistema ha fatto una scelta e ha scritto una /etc/fstabcorrispondenza. A volte quella scelta è che ho bisogno che tu mi faccia una partizione di swap come parte dell'installazione. ; a volte è sufficiente utilizzare la partizione di swap che hai già trovato sul disco. (anche gli installatori guardano i tipi di partizione).

Ma la gente del sistema ha questa idea di sistemi operativi che si configurano automaticamente da un /etcalbero in gran parte vuoto , i cosiddetti sistemi senza stato , e questo è ciò che riguarda meccanismi come il generatore che legge la tabella delle partizioni EFI. Nel piano del sistema e delle persone, non esiste alcun dato /etc/fstab, e in effetti non esistono affatto dati di configurazione persistenti /etc, e tutte queste cose sono dedotte dal contenuto della tabella delle partizioni su disco , ad ogni bootstrap e ad ogni systemctl daemon-reload. Al giorno d'oggi promuovono programmi di installazione del sistema operativo che non scrivono/etc/fstab .

Nello schema tradizionale, ovviamente puoi davvero avere ogni sistema operativo con la sua partizione di scambio privata e non farli toccare le partizioni di scambio reciproche. E infatti se stai utilizzando l'ibernazione per il disco tramite una partizione di swap e ti aspetti di essere in grado di eseguire l'avvio multiplo su un altro sistema operativo mentre è in letargo (il che è una pessima idea perché è molto facile causare la corruzione del filesystem in questo modo ) che sarà necessario.

Nello schema systemd, anche se il sistema operativo non è ancora come lo prevedono le persone e "apolidi", i generatori di cui sopra funzionano; e quindi tutte le partizioni di swap (sul disco ESP / root) con il tipo di partizione richiesto sono automaticamente impiegate da tutti i sistemi operativi di sistema. Dal momento che condivideranno tutte le partizioni di swap rilevate automaticamente, in realtà non è necessario creare una partizione di swap per sistema operativo installato.

Ulteriori letture


Molto bello - grazie per la spiegazione!
Andy Dalton,

C'è una parte di me che vuole davvero votarti in basso solo per aver parlato di systemd. Ma ovviamente questo è ingiusto (e anche sistematico o no non significa che tu abbia torto) e in genere non voto in basso comunque le cose in quanto non mi è mai sembrato il modo appropriato di essere costruttivo. È comunque una bella annotazione, quindi nonostante abbia visto i riferimenti a Lennart ho votato questa risposta. Se non altro ci metti sforzo e dovrebbe essere lodato. Ho letto brevemente della spazzatura apolide e questo è qualcosa che piuttosto ... Non sono nemmeno sicuro di cosa faccia, quindi lo lascerò a quello.
Pryftan,

13

Storicamente, la partizione di swap è specificata /etc/fstabcon una voce di tipo swap. All'avvio, i processi di avvio leggeranno quel file e invieranno quella configurazione nel kernel.

Un esempio della voce /etc/fstabè:

/dev/sdb    none    swap     sw      0  0

Non ho familiarità con il modo in cui systemdgestisce lo swap, ma credo che il risultato finale sia lo stesso: un processo userspace è a conoscenza di quale spazio è allocato per lo swap e il processo userspace informa il kernel.


L'interrogatore ha chiesto di Linux, e questo non è sbagliato per Linux; ma è peculiare di Linux. Altri sistemi operativi, come ad esempio FreeBSD, riconoscono i record di scambio /etc/fstabdal loro swtipo di mount piuttosto che dal loro swaptipo VFS.
JdeBP,

1
La risposta non riguarda tutte le parti della domanda.
Sergiy Kolodyazhnyy,

Vorrei anche sottolineare che anche questa risposta non è aggiornata nel mondo dei sistemi operativi di sistema. Non riesce a tener conto systemd-gpt-auto-generator.
JdeBP,

2
Cosa intendi con systemd non usa fstab? Certo che lo fa!
psusi,

1
@psusi: systemd capisce, ma non richiede fstab.
MSalters,

4

Tutte le altre risposte menzionano come puntare a un filesystem di swap all'avvio.

Tuttavia, diversi punti da aggiungere alle altre risposte:

  • lo spazio di scambio può anche essere un file;
  • una partizione di spazio di swap è generalmente contrassegnata come tipo 0x82;
  • è possibile montare uno spazio di scambio in qualsiasi momento in fase di esecuzione;
  • per contrassegnare / inizializzare una partizione / file, affinché possa essere riconosciuto e utilizzato / montato successivamente come spazio di scambio, è necessario utilizzare il comando mkswap;
  • per attivare / utilizzare manualmente una partizione / file di scambio si usa il comando swapon;
  • allo stesso modo per sostituirlo, vai avanti swapoff.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.