sexta-feira, 14 de maio de 2010

Linux - como montar diretório /var em outro disco?

As vezes o diretório /var cresce demasiadamente devido a logs de programas. Por isso surge a necessidade de separá-lo em outro disco. Mas como fazer isso se nosso servidor já está em produção há algum tempo?

Nesse exemplo, estamos utilizando máquinas virtuais VMware esxi, porém a ideia pode ser usada para máquinas físicas também.

-------------------------------------------------------
[Passo 1: adicionando disco]

- Ao adicionar o novo disco, o servidor deve ser reiniciado para que o mesmo seja reconhecido, infelizmente o servidor terá algum tempo de indisponibilidade.

- Após a reinicialização, digite o comando "fdisk -l" para ver qual device corresponde ao novo disco. A saída é semelhante a seguir:
...
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
..

Nota: adicionei um disco de 34GB, logo, sei que /dev/sdb só pode ser ele.

-------------------------------------------------------
[Passo 2: particionando e formatando disco]

- O novo disco deve ser particionado, utilize o comando "fdisk":
# fdisk /dev/sdb

- No menu do comando fdisk, digite "n" para criar uma nova partição, e digite "w" para gravar as alterações.

- Após particionado, o device "/dev/sdb1" será criado, o mesmo deve ser formatado. Utilizo o sistema de arquivos "ext3" para formatar discos linux:
# mkfs.ext3 /dev/sdb1

-------------------------------------------------------
[Passo 3: preparando novo disco para receber arquivos /var]

- Após formatarmos o novo disco, devemos monta-lo para certificar que o mesmo esteja vazio. Utilize o comando "mount":
# mount /dev/sdb1 /mnt

- Abra a pasta /mnt com o comando "cd":
# cd /mnt

- Perceba que geralmente a pasta "lost+found" é criada após formatar o disco, apague tudo com o comando "rm":
# rm -r /mnt/*

-------------------------------------------------------
[Passo 4: copiando arquivos de /var para /dev/sdb1]

- Como o novo disco "/dev/sdb1" está montado em "/mnt", basta copiarmos o conteúdo de "/var" para "/mnt" com o comando "cp":
# cp -rdp --preserve=context /var/* /mnt

Nota: por quê "-rdp --preserve=context"? R.: "r" faz cópia de diretórios; "d" mantém links; "p" mantém permissões; "--preserve=context" mantém o contexto do selinux caso a distribuição possua ele habilitado.

-------------------------------------------------------
[Passo 5: elegendo /dev/sdb1 como novo /var]

- Após a cópia, os arquivos de "/var" podem ser apagados. Em nosso caso, somente renomearemos para manter backup. Utilize o comando "mv":
# mv /var /var.original

- Crie uma nova pasta "/var" para servir como ponto de montagem do dispositivo "/dev/sdb1". Utilize o comando "mkdir":
# mkdir /var

- Edite o arquivo "/etc/fstab" para que o dispositivo "/dev/sdb1" seja montado automaticamente em "/var". Utilize um editor de sua preferência e adicione a seguinte linha (sem ...):
...
/dev/sdb1 /var ext3 defaults 0 0
...

- Desmonte "/mnt" com o comando "umount":
# umount /mnt

- Teste o novo ponto de montagem com o comando "mount":
# mount /var

-------------------------------------------------------
[Passo 6: SOMENTE PARA SISTEMAS COM SELINUX]

- Em sistemas com selinux, no passo 5 quando criamos a nova pasta "/var", essa não possui permissões relativas ao /var original. Veja essa diferença com o comando "ls":
# ls -Z

- Para que as permissões selinux sejam restauradas no novo "/var", execute o comando "restorecon":
# restorecon /var

- A partir desse passo, tudo deve funcionar corretamente. Se quiser, reinicie o servidor para testar.

Nenhum comentário: