Expandindo a memória de servidor Linux/Debian virtualizado sem reboot

Então você tem um servidor virtualizado rodando Debian ou Ubuntu mas o administrador do sistema que está lá te liga pedindo para expandir a memória de 4GB para 8GB, ou para 16GB etc. Em um ambiente virtual razoavelmente bem configurado é possível fazer esta alteração sem precisar parar os serviços, e o processo é simples.

Já abordei aqui Como atualizar a lista de discos disponíveis sem shutdown, Como redimensionar um disco virtual e Como remover um disco virtual. Agora é vez de lidarmos com a memória do servidor virtualizado.

Antes de mais nada você deve se certificar de que a sua “vm” possui os drivers virtuais instalados (vmware-tools, no caso dos produtos da Vmware) e se o recurso “Memory Hotplug” está ativo para aquela máquina virtual (é uma boa recomendação ativar este recurso tão logo você crie uma nova máquina virtual). Se estes dois requisitos não estiverem satisfeitos, sinto muito mas você terá mesmo que rebootar seu sistema.

Considerando que esteja tudo OK e você já tenha aumentado a memória do seu servidor virtual através da tela de propriedades (Virtual Machine Properties) então basta abrir o prompt de comandos desta vm e executar os comandos abaixo (como usuário root).

Este primeiro comando lista o estado de cada memória virtual e que pode ser “online” ou “offline”. Ele pode ser executado como está e deverá retornar algo como mostrado no exemplo:

~# grep line /sys/devices/system/memory/*/state |grep offline
/sys/devices/system/memory/memory40/state:offline
/sys/devices/system/memory/memory41/state:offline
/sys/devices/system/memory/memory42/state:offline
/sys/devices/system/memory/memory43/state:offline
/sys/devices/system/memory/memory44/state:offline
/sys/devices/system/memory/memory45/state:offline
/sys/devices/system/memory/memory46/state:offline
/sys/devices/system/memory/memory47/state:offline
/sys/devices/system/memory/memory48/state:offline
/sys/devices/system/memory/memory49/state:offline
/sys/devices/system/memory/memory50/state:offline
/sys/devices/system/memory/memory51/state:offline
/sys/devices/system/memory/memory52/state:offline
/sys/devices/system/memory/memory53/state:offline
/sys/devices/system/memory/memory54/state:offline
/sys/devices/system/memory/memory55/state:offline
/sys/devices/system/memory/memory56/state:offline
/sys/devices/system/memory/memory57/state:offline
/sys/devices/system/memory/memory58/state:offline
/sys/devices/system/memory/memory59/state:offline
/sys/devices/system/memory/memory60/state:offline
/sys/devices/system/memory/memory61/state:offline
/sys/devices/system/memory/memory62/state:offline
/sys/devices/system/memory/memory63/state:offline
/sys/devices/system/memory/memory64/state:offline
/sys/devices/system/memory/memory65/state:offline
/sys/devices/system/memory/memory66/state:offline
/sys/devices/system/memory/memory67/state:offline
/sys/devices/system/memory/memory68/state:offline
/sys/devices/system/memory/memory69/state:offline
/sys/devices/system/memory/memory70/state:offline
/sys/devices/system/memory/memory71/state:offline

Agora que sabemos quais as memórias que estão offline basta executar o comando abaixo para cada uma delas, substituindo “[NUMERO] pelo número correspondente:

~# echo online >/sys/devices/system/memory/memory[NUMERO]/state

Ou se preferir digitar menos um laço “for” do bash pode dar uma mãozinha, não esqueça de alterar os valores máximo e mínimo na variável “NUMERO”.

~# for (( NUMERO=40 ; NUMERO < 72 ; NUMERO++ )); do echo online >/sys/devices/system/memory/memory${NUMERO}/state ; done

Claro que você poderia automatizar tudo e ao mesmo tempo verificar o estado da memória e em seguida alterá-lo, mas isso fica pra outro dia ou pra sua imaginação.

Após isso você poderá usar o comando “free”, “top” ou qualquer outro que desejar para conferir se a alteração foi realizada.

Referências

Hot adding memory in Linux (1012764). http://kb.vmware.com/kb/1012764. Acessado em 15-11-2015.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *