Melhor maneira de desativar a troca no Linux

53

Estou executando um kernel 3.18.9 compilado personalizado e estou pensando sobre a melhor maneira de desativar a troca no sistema. Eu também uso o init se isso faz diferença.

É suficiente comentar ou remover a linha de troca /etc/fstabpara impedir que a troca funcione / monte na inicialização ou devo recompilar o kernel sem Support for paging of anonymous memory (swap)ter 100% de certeza de que não será ativado?

Eu corro partições criptografadas e quero evitar vazamentos acidentais no disco rígido. Minhas especificações do sistema também são ótimas o suficiente para que eu possa sobreviver em um ambiente sem troca.

user283167
fonte
Por que sua troca não é criptografada?
Michael Hampton
@MichaelHampton Eu não via necessidade no momento, até que percebi o que acabaria por acontecer. Além disso, meu sistema não chega a um ponto em que a troca foi usada, então sinto que estou livre para removê-la.
user283167
Eu removeria o recurso do kernel então. Caso contrário, alguém pode conectar um pendrive e começar a trocá-lo novamente.
ott--
@ott O usuário não precisa de acesso de superusuário para usar o executável swapon / swapoff? Posso desativá-lo novamente por precaução, mas não tenho certeza de que um usuário sem privilégios possa criar arquivos de troca.
precisa saber é o seguinte
Na verdade, ele precisa de acesso de superusuário, o que ele poderia fazer com uma exploração, por exemplo. Mas você está assistindo seu servidor 24/7?
ott--

Respostas:

76
  1. Identifique dispositivos e arquivos de troca configurados com cat /proc/swaps.
  2. Desative todos os dispositivos e arquivos de troca com swapoff -a.
  3. Remova qualquer referência correspondente encontrada em /etc/fstab.
  4. Opcional: Destrua quaisquer dispositivos ou arquivos de troca encontrados na etapa 1 para impedir sua reutilização. Devido às suas preocupações sobre o vazamento de informações confidenciais, considere realizar algum tipo de limpeza segura.

troca de homem

Aaron Copley
fonte
Em alguns sistemas, você também deve reconstruir o initrdarquivo, por exemplo, com dracut --regenerate-all --forceou mkinitrd, ou o sistema não inicializa. Graças ao JO Aho e Carlos ER on alt.os.linux.suse.
Ant_222
10

Se você realmente tem certeza de que deseja desativar a troca (observação: isso não é recomendado, mesmo quando você tiver certeza de que a RAM física é mais que suficiente), siga estas etapas:

  1. executar swapoff -a: isso desativará imediatamente a troca
  2. remova qualquer entrada de troca de /etc/fstab
  3. rebooto sistema. Se a troca acabar, tudo bem. Se, por algum motivo, ainda estiver aqui, você precisará remover a partição de troca. Repita as etapas 1 e 2 e, depois disso, use fdiskou partedpara remover a partição de swap (agora não usada). Tenha muito cuidado aqui: remover a partição errada terá efeitos desastrosos!
  4. reboot
shodanshok
fonte
11
Por que não é recomendado desativar o swap, mesmo se você tiver memória RAM suficiente?
Rolf
11
Porque o Linux usa proativamente a partição swap para liberar mais memória para armazenamento em cache. Isso pode melhorar o desempenho. Enfim, é um parâmetro ajustável. Para mais informações, leia aqui . Além disso, um aumento improvisado na alocação de memória em um sistema sem swapless pode acionar o killer OOM do kernel.
shodanshok
11
Obrigado, isso é razoável. No entanto, eu estava pensando que se "ram suficiente" (por exemplo: 8 ou 16 GB) estiver cheio, é provável que haja algum tipo de situação excepcional (aplicativo com vazamento de memória ou algum outro problema em fuga, ataque DDOS, etc.) em que caso, mesmo a troca acabaria sobrecarregada de qualquer maneira. Talvez eu não esteja fazendo um argumento muito convincente, no entanto, isso não deve acontecer no uso leve de um desktop.
Rolf
9

Antes, apenas as partições de troca /etc/fstaberam usadas automaticamente; no entanto, o systemd pode estar mudando um pouco. Você pode precisar fazer:

systemctl mask dev-sdXX.swap

(mude sdXX) para sua partição de swap formatada real, o que implora a questão de por que você tem uma partição de swap, se não a quer usada ...

Se você não estiver usando o systemd, remover as entradas de swap /etc/fstabdeve ser suficiente (tanto quanto eu saiba).

Talvez a solução real seja se livrar das partições de troca, para que não sejam usadas acidentalmente. Para remover as partições de troca, eu usaria o fdisk para alterar o tipo de partição de swap para outra coisa e depois reformate a partição ou use: dd if=/dev/zero of=/dev/old-swap-partitionpara zerá-la e impedir seu uso.

Consulte também Configurar o uso da partição swap com o systemd .

Gregor
fonte
Eu ainda uso o init via openRC, expurgei propositadamente o systemd da instalação. E quanto à pergunta de troca, eu estava fazendo uma instalação regular até que tomei a decisão de usar cryptsetup / luks para montar arquivos criptografados formatados para ext4 sobre o meu sistema de arquivos. Se você pudesse ter a gentileza de abordar a maneira de desativar o swap ao usar o init, eu apreciaria.
user283167
0

Quando visualizo o arquivo / etc / fstab no Raspbian, vejo um comentário dizendo

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

Mas, para desativar completamente o arquivo de troca pré-configurado, isso funciona perfeitamente:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

Esta solução parece um pouco rápida e suja para mim, no entanto, você pode simplesmente reativá-la com:

chmod +x /etc/init.d/dphys-swapfile
reboot
Fabian31415
fonte