Quero que meu computador hiberne automaticamente quando o no-break mudar para a bateria, por isso preciso de espaço livre suficiente para troca a qualquer momento. Mas se eu ativar a partição swap, mesmo antes da hibernação, ela poderá ser ocupada por páginas de memória.
A única solução que encontrei foi configurar /proc/sys/vm/swappiness
e 0
desabilitar completamente a paginação. Mas não é a melhor opção.
É possível especificar o uso máximo de swap em bytes?
Responder1
cat /proc/sys/vm/swappiness
0
Significa que a troca será evitada, a menos que seja absolutamente necessário (a RAM está cheia). A troca assume valores entre 0-100
.
Para tornar a alteração permanente, atualize /etc/sysctl.conf
e reinicie a máquina:
vm.swappiness = 10
Você não pode configurar a troca em bytes, mas troca 10
significa que a troca será usada quando a RAM estiver 90% cheia. O tamanho da área de troca é fornecido durante a instalação do sistema; você precisará redimensionar as partições para alterar isso. A quantidade ocupada na troca depende dos requisitos de alocação de RAM do software que você está executando.
Responder2
A única solução que encontrei é usar um swaparquivoque você pode criar em qualquer tamanho, digamos alguns gigabytes, e depois montá-lo como sua área de troca.
head -c 2G /dev/urandom > your.filename
Você pode modificar o código abaixo, que criará um arquivo de troca criptografado usando uma chave aleatória. É claro que você precisará definir a $filename
variável onde quer que esteja seu arquivo de troca.
filename="????"
head -c 4k /dev/urandom | sha512sum | cryptsetup open --type plain $filename /dev/mapper/swap
cryptsetup status /dev/mapper/swap
mkswap /dev/mapper/swap
swapon /dev/mapper/swap
sysctl vm.swappiness=0
Editar: se você deseja que a troca fique acessível após a reinicialização, basta substituir a chave aleatória por uma chave conhecida.