Perché Linux utilizza una partizione di swap anziché un file?


32

Mi sembra che un file di scambio sia più flessibile.


1
È possibile utilizzare un file di scambio in Linux. Lo sto facendo ora su più macchine. Non sto usando nulla di speciale, solo ext4 o ext4 su LVM. Nessuna crittografia o qualcosa di complicato. La sospensione e l'ibernazione hanno funzionato alla grande per me, anche sulla mia macchina NVMe.
Cory T,

Risposte:


32

Un file di scambio è più flessibile ma anche più fallibile di una partizione di scambio. Un errore del file system potrebbe danneggiare il file di scambio. Un file di scambio può essere un problema per l'amministratore, poiché il file non può essere spostato o eliminato. Un file di scambio non può essere utilizzato per l'ibernazione. Un file di scambio era leggermente più lento in passato, anche se al giorno d'oggi la differenza è trascurabile.

Il vantaggio di un file di scambio non è di dover decidere in anticipo la dimensione. Tuttavia, sotto Linux, non è ancora possibile ridimensionare un file di scambio online: è necessario annullare la registrazione, ridimensionare, quindi registrare nuovamente (o creare un altro file e rimuovere quello vecchio). Quindi non ci sono molti vantaggi in un file di swap su Linux, rispetto a una partizione di swap. È utile soprattutto quando hai temporaneamente bisogno di più memoria virtuale, piuttosto che come dispositivo permanente.


4
in passato c'era anche un vantaggio in termini di prestazioni. Ma penso che sia finito quando è uscito 2.6.
xenoterracide,

Sembra che questo non risponda davvero alla domanda. Oppure mi sfugge qualcosa? La risposta parla solo di file di scambio e non menziona affatto le partizioni. @Gilles era intenzionale o hai appena fatto un refuso?
gabe.

1
@gabe: stavo discutendo dei file di scambio rispetto alle partizioni. Spero che ora sia più chiaro.
Gilles 'SO- smetti di essere malvagio' il

1
Indico qui i miei commenti nella risposta di Penz. La perdita di prestazioni indotta da fs percepita sui file di scambio è controversa.
ata,

2
Secondo la Guida della comunità di Ubuntu Wiki help.ubuntu.com/community/SwapFaq Per l'ibernazione è necessaria una partizione di swap. Citazione: "Non è possibile utilizzare un file di scambio su un file system attivo". E per quanto riguarda le prestazioni, sembra che non ci siano differenze a meno che il file non sia scarso. serverfault.com/questions/25653/…
Erik Sjölund

28

Una partizione di swap può essere preferita perché evita una dipendenza dal file system quando tutto ciò che serve è un pool di memoria indirizzabile.

Nulla ti impedisce di utilizzare un file di scambio anziché una partizione di scambio o in aggiunta a una partizione di scambio.

  • Crea il file:

    dd if=/dev/zero of=/extraswap bs=1M count=512
    
  • Inizializza i contenuti del file:

    mkswap /extraswap
    
  • Usalo:

    swapon /extraswap
    
  • Vedi se ha funzionato:

    free -m
    

Per iniziare a usare il file di scambio sempre all'avvio, modifica / etc / fstab e aggiungi

/extraswap           swap          swap    defaults    0 0

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


5
Alias ​​utile che uso da sempre per farmi scrivere moreswapun terminale se improvvisamente ho bisogno di spazio di scambio extra: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

questa è una buona informazione, ma non risponde alla domanda.
lesmana,

6
Inoltre, il bit nell'overhead del filesystem non è corretto. Contrariamente alla credenza comune, non ci sono spese generali sull'uso dei file di scambio. Andrew Morton dà la semplice spiegazione qui . Questo è uno dei motivi per cui un gestore di swap dinamico basato su file di swap come il demone swapspace è una buona soluzione se ben configurato.
ata,

Aggiungiamo che l'approccio del file di scambio può essere la tua unica opzione quando sei in esecuzione nel cloud.
sorin,

1

Forse il motivo principale è che il kernel principale di sospensione su disco non funziona con i file di scambio. Ad esempio le istruzioni del wiki Debian devono essere installate uswsuspse ne hai bisogno.

Più recentemente, i file di scambio non funzionano se il file system è btrfs, quindi è più semplice per le distribuzioni creare sempre lo scambio come partizione.

Si dice vagamente che l'uso di un file per lo scambio aveva prestazioni potenzialmente inferiori rispetto a una partizione, prima della versione 2.6 del kernel. https://www.kernel.org/doc/gorman/html/understand/understand014.html#text15


1

Per completezza aggiungerò la mia risposta:

Come detto da @Gilles, un file di scambio non può essere utilizzato per l'ibernazione. Quando si utilizza un file di scambio, il sistema deve individuare l'intestazione del file di scambio, ma per fare ciò è necessario montare il filesystem che contiene il file di scambio e un filesystem journaled - ad esempio ext3, ext4 e praticamente tutti i moderni filesystem usati da Linux - non può essere montato durante il ripristino dal disco. (In realtà, ci sono modi per farlo, ma piuttosto ingombranti.)

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


0

Penso che sia principalmente perché i tempi di accesso ai dati situati su una partizione sono inferiori. Il punto del file di scambio è di più per aiutare l'amministratore di sistema quando è davvero a corto di RAM e deve eseguire enormi operazioni che potrebbero causare l'arresto anomalo del suo sistema. In questo caso creerà sporadicamente file di scambio quando necessario.

Ma comunque puoi averli entrambi.

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.