Eu usei dphys-swapfile com o caminho padrão /var/swap
e um arquivo de troca de 2048M.
Porém, como /var/swap
está em um cartão SD, eu queria mover o arquivo de troca para um disco magnético. Então executei sudo dphys-swapfile swapoff
, editei o caminho e executei:
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
Este último falhou com:
swapon: /srv/file/swap: swapon failed: Invalid argument
sudo journalctl -xe
me dá:
kernel: swapon: swapfile has holes
Só para ter certeza, tentei o seguinte, sem sucesso:
- Exclua o novo arquivo de troca e recrie-o com
sudo dphys-swapfile setup
- Copie o arquivo de troca antigo para o novo local
sudo dd if=/dev/zero of=/srv/file/swap bs=1024 count=2097152 status=progress
(zere todo o arquivo de troca,bs * count
sendo igual ao tamanho do arquivo de troca – desta vez o erro que recebi foi que o arquivo de troca tinha um cabeçalho inválidodd
o arquivo de troca antigo sobre o zerado – novamente resultou em uma reclamação sobre falhas no arquivo
A única diferença entre o caminho antigo e o novo para o arquivo de troca é que o caminho antigo está em um sistema de arquivos ext4 enquanto o novo está em btrfs. (Além do caminho antigo estar em um cartão SD e o novo estar em um disco magnético, embora eu duvide que isso faça alguma diferença.)
Por alguma razão, o arquivo de troca no ext4 parece ter sido criado sem falhas ou dphys-swapfile
aceita falhas no ext4. Como posso obter o mesmo resultado no btrfs? (Ou estou tendo um problema diferente do que penso?)
O sistema operacional é Raspbian Linux 9 (eu sei, é antigo), dphys-swapfile é a versão 20100506-3.
Alguns conceitos em torno dos quais o btrfs foi construído não funcionam bem com arquivos de troca (imagine criar um instantâneo somente leitura de um arquivo de troca). Resolver isso requer alguma lógica extra, que só foi adicionada no kernel 5.0. Com um sistema operacional tão antigo quanto o em questão, existem duas opções básicas:
Opção 1: atualize para um sistema operacional mais recente com kernel 5.0 ou posterior e proceda como em https://superuser.com/a/1442752/432690 . Embora geralmente seja recomendado executar um sistema operacional atualizado, uma atualização precisa ser planejada e pode não ser uma vitória rápida.
Opção 2: Reparticione o HD para liberar espaço para uma partição swap e use-a. Isso é mais fácil do que uma atualização do sistema operacional, ao mesmo tempo que é mais limpo e menos complicado no longo prazo.
Com o sistema de arquivos btrfs montado, faça:
(isso reduzirá o tamanho do sistema de arquivos em 512 GB, ajuste conforme necessário. Você deseja reduzir o FS um pouco mais do que o espaço necessário para a nova partição, redimensionar a partição e aumentar novamente o btrfs para preencher a partição redimensionada novamente .)
Redimensione a partição btrfs (por exemplo, usando parted) e crie uma partição swap depois dela. Então,
Adicione a seguinte linha
/etc/fstab
(assumindo que/dev/sda2
seja sua partição swap):Então faça:
Verifique se o espaço de troca está disponível e se a partição de troca é usada executando
free -h
esudo swapon --show
.free
deve mostrar mais que zero espaço de troca total eswapon
deve mostrar apenas a partição de troca, sem mais arquivos de troca. Reinicie e execute novamentefree -h
esudo swapon --show
para garantir que o espaço de troca esteja habilitado na inicialização.Esta é a opção que funcionou para mim.