Por que o Linux usa uma partição swap em vez de um arquivo?

32

Parece-me que um arquivo de troca é mais flexível.

Cheng
fonte
1
Você pode usar um arquivo de troca no Linux. Estou fazendo isso agora em várias máquinas. Não estou usando nada de especial, apenas ext4 ou ext4 no LVM. Sem criptografia ou qualquer coisa complicada. Suspender e hibernar funcionaram muito bem para mim, mesmo na minha máquina NVMe.
Cory T

Respostas:

32

Um arquivo de troca é mais flexível, mas também mais falível que uma partição de troca. Um erro no sistema de arquivos pode danificar o arquivo de troca. Um arquivo de troca pode ser um problema para o administrador, pois o arquivo não pode ser movido ou excluído. Um arquivo de troca não pode ser usado para hibernação. Um arquivo de troca era um pouco mais lento no passado, embora a diferença seja insignificante hoje em dia.

A vantagem de um arquivo de troca não é ter que decidir o tamanho antecipadamente. No entanto, no Linux, você ainda não pode redimensionar um arquivo de troca online: é necessário cancelar o registro, redimensionar e registrar novamente (ou criar um arquivo diferente e remover o antigo). Portanto, não há muito benefício em um arquivo de troca no Linux, comparado a uma partição de troca. É principalmente útil quando você precisa temporariamente de mais memória virtual, e não como um acessório permanente.

Gilles 'SO- parar de ser mau'
fonte
4
no passado, havia também um benefício de desempenho. Mas acho que acabou quando o 2.6 saiu.
Xenoterracide
Parece que isso realmente não responde à pergunta. Ou eu estou esquecendo de alguma coisa? A resposta fala apenas sobre arquivos de troca e não menciona partições. @Gilles foi intencional, ou você acabou de cometer um erro de digitação?
Gabe.
1
@ gabe: Eu estava discutindo arquivos de swap em comparação com partições. Espero que isso esteja mais claro agora.
Gilles 'SO- stop be evil'
1
Aponto aqui meus comentários na resposta de Penz. A perda de desempenho induzida pelo fs percebida nos arquivos de troca é discutível.
ATA
2
De acordo com a Wiki de Ajuda da Comunidade Ubuntu help.ubuntu.com/community/SwapFaq Uma partição de troca é necessária para a hibernação. Citação: "Ele não pode usar um arquivo de troca em um sistema de arquivos ativo.". E em relação ao desempenho, parece que não há diferença, a menos que o arquivo seja escasso. serverfault.com/questions/25653/…
Erik Sjölund
28

Uma partição de troca pode ser preferida, pois evita uma dependência do sistema de arquivos quando tudo o que você precisa é de um conjunto de memórias endereçáveis.

Mas nada impede que você use um arquivo de troca em vez de uma partição de troca ou além de uma partição de troca.

  • Crie o arquivo:

    dd if=/dev/zero of=/extraswap bs=1M count=512
    
  • Inicialize o conteúdo do arquivo:

    mkswap /extraswap
    
  • Use-o:

    swapon /extraswap
    
  • Veja se funcionou:

    free -m
    

Para começar a usar o swapfile sempre na inicialização, edite / etc / fstab e adicione

/extraswap           swap          swap    defaults    0 0

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

Penz
fonte
5
Alias ​​útil que venho usando desde sempre para me digitar moreswapem um terminal se de repente precisar de mais espaço de troca: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 é uma boa informação, mas não responde à pergunta.
lesmana 19/10/10
6
Além disso, o bit na sobrecarga do sistema de arquivos está incorreto. Ao contrário do que se pensa, não há sobrecarga no uso de arquivos de troca. Andrew Morton dá a explicação simples aqui . Essa é uma das razões pelas quais o uso de um gerenciador de troca dinâmico baseado em arquivo de permuta, como o daemon do swapspace, é uma boa solução, se bem configurado.
ATA
Vamos adicionar que a abordagem de troca de arquivos pode ser sua única opção quando você estiver executando na nuvem.
sorin
1

Talvez o principal motivo seja o fato de o kernel principal suspender em disco não funcionar com arquivos de troca. Por exemplo, as instruções do wiki Debian são instaladas uswsuspse você precisar disso.

Mais recentemente, os arquivos de swap não funcionam se o sistema de arquivos estiver btrfs, portanto, é mais simples para as distribuições sempre criarem swap como uma partição.

É vagamente mencionado que o uso de um arquivo para troca teve desempenho potencialmente mais baixo que uma partição, antes da versão 2.6 do kernel. https://www.kernel.org/doc/gorman/html/understand/understand014.html#text15

sourcejedi
fonte
1

Para completar, adicionarei minha própria resposta:

Como dito pelo @Gilles, um arquivo de troca não pode ser usado para hibernação. Ao usar um arquivo de permuta, o sistema deve localizar o cabeçalho do arquivo de permuta, mas para fazer isso, o sistema de arquivos que contém o arquivo de permuta deve ser montado e um sistema de arquivos com registro em diário - por exemplo, ext3, ext4 e basicamente todos os sistemas de arquivos modernos usados ​​pelo Linux - não pode ser montado durante a retomada do disco. (Na realidade, existem maneiras de fazê-lo, mas bastante complicado.)

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

dr01
fonte
0

Eu acho que é principalmente porque o tempo de acesso aos dados localizados em uma partição é menor. O objetivo do arquivo de troca é mais para ajudar o administrador do sistema, quando ele está realmente sem RAM e precisa operar grandes operações que talvez causariam um travamento no sistema. Nesse caso, ele criará esporadicamente arquivos de troca quando necessário.

Mas de qualquer maneira você pode ter os dois.


fonte