Configurando um Arquivo Swap em Instâncias EC2 da AWS

Instâncias de máquina virtual, especialmente aquelas com recursos limitados de memória RAM, como as oferecidas pela Amazon EC2, frequentemente se beneficiam da adição de um arquivo swap. Este espaço em disco, utilizado como memória virtual, é crucial para o desempenho do sistema ao lidar com picos de uso de memória ou para compilação de software que exige mais RAM do que o disponível fisicamente. A criação de um arquivo swap envolve algumas etapas essencaiis: a alocação de espaço no disco, a formatação desse espaço como área de swap e sua ativação pelo sistema operacional.

Uma armadilha comum na criação de um arquivo de troca em sistemas Linux envolve o método de alocação de espaço em disco. Muitos tutoriais podem sugerir o comando fallocate para criar o arquivo. Embora fallocate seja eficiente para criar arquivos rapidamente, ele geralmente cria um arquivo esparso (sparse file), que não aloca blocos de disco físicos imediatamente. Este comportamento pode levar a falhas ao tentar converter o arquivo em uma área de swap.

Considere o exemplo a seguir, onde tentamos criar e ativar um arquivo swap de 4 GB usando fallocate:

# Criação do arquivo de swap de 4GB para demonstração
sudo fallocate -l 4G /temp_swap_file

# Verificação das permissões e tamanho inicial
sudo ls -lh /temp_swap_file
# Saída esperada: -rw-r--r-- 1 root root 4.0G Jan 30 23:05 /temp_swap_file

# Ajuste das permissões de segurança para o arquivo swap
sudo chmod 600 /temp_swap_file

# Nova verificação de permissões
sudo ls -lh /temp_swap_file
# Saída esperada: -rw------- 1 root root 4.0G Jan 30 23:05 /temp_swap_file

# Tentativa de ativar o arquivo como swap
sudo swapon /temp_swap_file
# Saída de erro: swapon: /temp_swap_file: read swap header failed: Invalid argument

Como demonstrado, a ativação do swap falha com a mensagem "Invalid argument". Isso ocorre porque o comando swapon requer um arquivo com blocos de dados fisicamente alocados, o que fallocate não garante por padrão. Ele apenas reserva o espaço lógico, mas os blocos físicos são escritos "sob demanda".

Método Correto para Criação de Arquivo Swap

Para garantir que os blocos de disco sejam fisicamente alocados desde o início, é recomendável utilizar o comando dd. Este comando preecnhe o arquivo com zeros, forçando a alocação física do espaço no disco.

Abaixo, o procedimento completo para criar um arquivo swap de 2 GB e configurá-lo no sistema:

# 1. Alocar espaço em disco usando dd (exemplo de 2GB)
# 'if=/dev/zero' fornece um fluxo de zeros para preencher o arquivo
# 'of=/swapfile' define o arquivo de saída, que será nosso arquivo swap
# 'bs=1M' define o tamanho do bloco para 1 Megabyte
# 'count=2048' especifica 2048 blocos, resultando em 2GB (2048 * 1MB)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# Exemplo de saída (pode variar ligeiramente):
# 2048+0 registros de entrada
# 2048+0 registros de saída
# 2147483648 bytes (2.1 GB) copiados, 6.51212 s, 330 MB/s

Após a criação do arquivo com dd, siga os passos para configurá-lo como área de swap:

# 2. Definir permissões de segurança restritivas (somente leitura/escrita pelo root)
sudo chmod 600 /swapfile

# 3. Formatar o arquivo como uma área de swap
sudo mkswap /swapfile
# Exemplo de saída (UUID será diferente):
# Setting up swapspace version 1, size = 2097148 KiB
# no label, UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890

# 4. Ativar o arquivo swap no sistema
sudo swapon /swapfile

Tornando o Swap Persistente

Para que o arquivo swap seja ativado automaticamente a cada reinício do sistema, é necessário adicionar uma entrada no arquivo /etc/fstab. Isso garante que as configurações de swap permaneçam ativas sem intervenção manual.

# 5. Adicionar a entrada ao /etc/fstab
# Utilize o comando 'echo' com 'tee -a' para adicionar a linha sem abrir um editor.
# Certifique-se de que o arquivo /etc/fstab tenha uma nova linha no final antes de adicionar.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Verificação Final

Para confirmar que o arquivo swap foi configurado e está ativo, utilize os comandos free e swapon com a opção -s:

# Verificar o uso geral de memória, incluindo swap
free -h
# Exemplo de saída (os valores podem variar):
#               total        used        free      shared  buff/cache   available
# Mem:          991M         55M         74M          0B         861M         782M
# Swap:         2.0G          0B         2.0G

# Listar os arquivos e partições de swap ativas
sudo swapon -s
# Exemplo de saída:
# Filename        Type        Size        Used    Priority
# /swapfile       file        2097148     0       -1

Tags: AWS EC2 Linux swap Memória Virtual

Publicado em 7-1 20:12