Adicione espaço de *swap* ao seu sistema Linux ou expanda o *swap* já existente, sem a necessidade de alterar partições. Este guia demonstra um método simples para configurar o seu espaço de *swap* de maneira personalizada.
Arquivos de *Swap* vs. Partições de *Swap*
Diversas situações podem levar à necessidade de aumentar o espaço de *swap* ou adicionar um novo ao seu computador Linux.
É possível que o seu *swap* esteja constantemente operando no limite ou próximo dele.
Uma seleção errada durante a instalação pode resultar na omissão inadvertida do *swap*.
Talvez tenha decidido inicialmente que a sua memória RAM era suficiente, mas mudou de ideia.
Às vezes, você pode assumir a administração de um sistema sem *swap*, por motivos desconhecidos.
A solução para estes casos é adicionar um arquivo de *swap*. Este é um arquivo reservado, alocado previamente para uso como *swap*. Ele trabalhará em conjunto com qualquer *swap* existente, seja arquivo ou partição.
Antigamente, arquivos de *swap* apresentavam menor desempenho em comparação a partições de *swap*. Essa diferença se tornou insignificante devido à evolução de discos rígidos mecânicos e otimizações no sistema operacional Linux. Algumas distribuições Linux agora optam por arquivos de *swap* como padrão em vez de partições.
O *swap* não é apenas um recurso de emergência quando a RAM está escassa. É um componente vital para um sistema bem-sucedido. Sem *swap*, a gestão de memória pelo *kernel* torna-se extremamente complexa. Vamos explorar como adicionar espaço de *swap* de maneira fácil.
Considerações Iniciais: Btrfs e SSDs
Antes de prosseguirmos, vamos abordar dois pontos importantes.
O Sistema de arquivos Btrfs possui algumas peculiaridades em relação a arquivos de *swap*. Anteriormente, havia conflito entre a natureza de cópia na escrita do Btrfs e a forma como arquivos de *swap* necessitavam operar. Funções essenciais para arquivos de *swap* não eram implementadas e suposições sobre a numeração de blocos não se verificavam no Btrfs, tornando arquivos de *swap* incompatíveis.
A partir do *kernel* 5.0, é possível ter arquivos de *swap* em sistemas Btrfs se configurados com as seguintes condições:
Sem o recurso *copy-on-write* (NOCOW).
Não compactados.
Localizados no mesmo disco rígido.
A maioria dos usuários usa o sistema de arquivos *ext4* padrão, então essa limitação não se aplicará.
Quando os *Solid-State Drives* (SSDs) foram lançados, havia receio em relação ao uso em cenários com gravações frequentes. Desaconselhava-se usar *swap* em SSDs e até mesmo instalar o sistema operacional neles.
Hoje em dia, essa preocupação é menos relevante. SSDs atuais têm vida útil que ultrapassa a maioria dos computadores. Um arquivo de *swap* em um SSD funcionará melhor que uma partição de *swap* em um disco rígido mecânico.
Verificando o *Swap* Existente
Vamos verificar qual *swap* está disponível em sua máquina. Usaremos dois métodos. O comando `free` exibe memória usada e livre. A opção `-h` (legível por humanos) facilita a leitura dos valores de memória.
free -h
A saída do `free` mostra que não há *swap* configurado nesta máquina.
A memória *swap* é sempre mencionada junto com a RAM, e é importante observar que a RAM livre é mostrada como 237 MB. Este valor não corresponde à RAM total disponível. A RAM disponível é de 881 MB.
O Linux usa RAM livre para funções como *cache* de arquivos e *buffers* do *kernel*. A quantidade de RAM dedicada a isso é “buff/cache”, que é 871 MB. Essa memória ainda é contabilizada como “disponível”. O conteúdo do “buff/cache” pode ser descartado para uso imediato por outros aplicativos.
Outra forma de verificar a presença de *swap* é usar o comando `swapon`. A opção `–show` não faz alterações no *swap* do computador; apenas exibe as estatísticas.
swapon --show
Se esse comando não apresentar saída, não há *swap* configurado.
Se os comandos revelarem a existência de *swap*, considere seu tamanho ao decidir o tamanho do novo arquivo de *swap*.
Qual a Quantidade de *Swap* Necessária?
A regra tradicional era “o dobro da quantidade de RAM”. Isso se aplicava a computadores com pouca RAM. Atualmente, com a RAM mais acessível e programas exigindo mais memória, PCs domésticos com 32 GB de RAM são comuns. Alocar 64 GB de *swap* para 32 GB de RAM é excessivo.
A quantidade ideal de *swap* é um tema controverso. O FAQ de *swap* do Ubuntu apresenta uma análise sensata, com uma tabela recomendando quantidades de *swap* baseadas na RAM e no uso de hibernação.
Felizmente, a quantidade exata não é crucial. Arquivos de *swap* podem ser facilmente removidos e substituídos por outros, maiores ou menores. Você pode até mesmo adicionar vários arquivos de *swap*.
Escolha um tamanho de arquivo de *swap* da tabela e monitore o uso do sistema. Ajustes são facilmente realizados, uma tarefa simples e rápida com arquivos de *swap*, diferente de ajustar partições em um sistema ativo.
Criando o Arquivo de *Swap*
Não use o comando `fallocate` para criar arquivos de *swap*. A página de manual do `swapon` explica:
A implementação do arquivo de swap no kernel espera escrever diretamente no arquivo, sem o auxílio do sistema de arquivos. Isso é um problema com arquivos com "buracos" ou arquivos *copy-on-write* em sistemas de arquivos como o Btrfs. Comandos como cp(1) ou truncate(1) criam arquivos com "buracos". Esses arquivos serão rejeitados pelo swapon. Arquivos pré-alocados com fallocate(1) podem ser interpretados como arquivos com "buracos", dependendo do sistema de arquivos. Arquivos de swap pré-alocados são suportados no XFS desde o Linux 4.18. A solução mais portátil para criar um arquivo de swap é usar dd(1) e /dev/zero.
Portanto, apesar do `fallocate` ser mais rápido, usaremos o `dd` para criar o arquivo de *swap*. A máquina usada neste exemplo tem 2 GB de RAM. Criaremos um arquivo de *swap* de 1 GB.
As opções são:
`if`: O arquivo de entrada. Usaremos `/dev/zero`, que fornecerá um fluxo de bytes zeros.
`of`: O arquivo de saída. Criaremos um arquivo chamado `swapfile` no diretório raiz.
`bs`: O tamanho do bloco em bytes. Define quantos bytes ler e escrever por vez.
`count`: Quantos blocos ler e escrever. Multiplique este valor por `bs` para obter o tamanho do arquivo.
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Estatísticas são apresentadas após a criação do arquivo.
É possível verificar o número de blocos gravados, o tamanho do arquivo, o tempo gasto na criação e a taxa de transferência.
Use o comando `ls` para visualizar o arquivo no diretório raiz:
ls /
Preparando o Arquivo de *Swap*
Antes de usar o arquivo de *swap*, precisamos prepará-lo com o comando `mkswap`. Basta fornecer o caminho e o nome do arquivo:
sudo mkswap /swapfile
O arquivo é preparado para uso como *swap*. Observe o aviso sobre as permissões do arquivo. É preciso alterá-las para que apenas o usuário *root* possa ler e gravar no arquivo de *swap*.
Ativando o Arquivo de *Swap*
As permissões padrão são permissivas. Precisamos restringi-las para que somente o *root* acesse o arquivo de *swap*. Use o comando `chmod` para alterar as permissões:
sudo chmod 600 /swapfile
Isso remove todas as permissões de grupo e outros, permitindo apenas que o *root* leia e grave no arquivo.
Use o comando `swapon` para informar ao Linux sobre o novo arquivo de *swap*. Basta fornecer o caminho e o nome do arquivo:
sudo swapon /swapfile
O arquivo de *swap* agora está ativo.
Adicionando o *Swap* ao fstab
Para que o arquivo de *swap* esteja disponível após a reinicialização, adicione-o ao arquivo `/etc/fstab`. Use o editor de texto de sua preferência, como o Gedit.
sudo gedit /etc/fstab
Adicione a seguinte linha ao final do arquivo:
/swapfile none swap sw 0 0
Os campos são:
Sistema de arquivos: O caminho e o nome do arquivo de *swap*.
Ponto de montagem: O arquivo não é montado como um sistema de arquivos, então usamos “none”.
Tipo: Especificamos “swap”.
Opções: Durante a inicialização, `swapon -a` é executado, ativando todos os dispositivos marcados como *swap*. Esta opção instrui o Linux a tratar essa entrada como um recurso *swap*. Embora seja comum ver “defaults” aqui, a opção correta é “sw”.
Dump: Pode ser definido como zero, irrelevante neste caso.
Aprovado: Pode ser definido como zero, irrelevante neste caso.
Salve as alterações e feche o editor.
Verificando o Uso de *Swap*
Para verificar se o *swap* está em uso, use o comando `swapon` com a opção `–show`:
swapon --show
As colunas exibidas são:
Nome: O nome da partição ou arquivo de *swap*.
Tipo: O tipo de dispositivo de *swap*.
Tamanho: O tamanho do recurso *swap*.
Usado: A quantidade de espaço de *swap* em uso.
Prio: A prioridade do *swap*.
Prioridade do *Swap*
Cada *swap* recebe uma prioridade. Se não for fornecida, é alocada automaticamente, sempre negativa. Prioridades definidas manualmente variam de 0 a 32767. *Swaps* com maior prioridade são usados primeiro.
Se múltiplos *swaps* tiverem a mesma prioridade, eles são usados alternadamente. Se houver apenas um *swap*, a prioridade é irrelevante. Vamos alterar a prioridade do arquivo *swap* que criamos para ilustrar o processo.
Para definir uma prioridade, adicione `pri=(prioridade)` à entrada `/etc/fstab`. Edite a linha para:
/swapfile none swap sw,pri=10 0 0
Adicione `pri=10` ao campo de opções, separado por vírgula do “sw”. Não insira espaços entre “sw”, a vírgula e `pri=10`. Reinicie o computador e execute `swapon –show`:
swapon -- show
A prioridade do *swap* foi alterada para 10, provando que o campo de opções em `/etc/fstab` não é ignorado.
*Swap* Simplificado
Resumindo, podemos criar um arquivo de *swap* de forma rápida e fácil da seguinte maneira:
sudo dd if=/dev/zero /of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2
Verificando a funcionalidade:
swapon --show
Se você desejar tornar as alterações permanentes, adicione-as ao arquivo `/etc/fstab`.
Pronto! Tarefa Concluída.