Ramdisk: Implicações
- O uso de um ramdisk só é útil quando o aplicativo está vinculado a E / S, especificamente ao disco rígido. A menos que você esteja enviando milhares de mensagens por meio de um link de fibra rápido, é provável que seu limitador principal seja a velocidade de sua conexão com a Internet e não a velocidade do seu disco rígido.
- O Exim já é muito bom em lidar com filas grandes em mídias 'lentas', como discos rígidos; basta definir o
split_spool_directory
no arquivo de configuração e o Exim manipulará as filas grandes com mais eficiência dividindo as mensagens em subdiretórios em vez de em um único diretório de spool. - O spool de mensagens para um ramdisk representa o risco de perder toda a fila no caso de uma reinicialização ou queda de energia, sem nenhuma maneira de recuperar a fila.
- O diretório de spool pode se tornar bastante grande, e você corre o risco de ficar sem espaço na partição ramdisk muito rapidamente. Alguns e-mails com anexos grandes poderiam facilmente preencher até mesmo um ramdisk considerável. Da mesma forma, as mensagens que não podem ser entregues imediatamente ficam na fila até que sejam entregues com êxito, removidas manualmente ou expiradas pelo Exim, embora essa seja uma configuração configurável no arquivo de configuração do Exim.
Ramdisk: Configurando um ramdisk
Muitas distribuições Linux já possuem alguns ramdisks pré-configurados, mas não utilizados. Execute o seguinte comando para listar seus ramdisks atuais:
ls /dev/ram*
Para ver a alocação de tamanho, use fdisk
na moda padrão: (onde X
é o seu número de ramdisk)
fdisk -l /dev/ramX
Você provavelmente desejará aumentar a alocação de espaço padrão. Como o tamanho do disco RAM é controlado pelo kernel, você precisará definir uma opção de kernel para aumentar o espaço alocado. Se o seu gerenciador de inicialização for o GRUB, você poderá editar o arquivo grub.conf
e adicionar a opção ramdisk_size
kernel. Seu arquivo de configuração do GRUB deve ser algo como isto: (neste exemplo, estamos definindo o tamanho do ramdisk para 256MB)
default 0
timeout 5
hiddenmenu
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
title=Gentoo Gateway Server
root (hd0,1)
kernel /boot/vmlinuz root=/dev/sda2 ramdisk_size=256000
Após a reinicialização, os novos ramdisks devem refletir a alocação de espaço atualizada. Como não há nenhum ponto na formatação de um ramdisk com um sistema de arquivos journalled, vamos apenas usar ext2:
mke2fs -m 0 /dev/ram0
A opção -m 0
impede que o mke2fs reserve qualquer espaço no sistema de arquivos para o usuário root. Agora você pode criar um ponto de montagem para o disco virtual, montá-lo e começar a usá-lo.
mkdir /mnt/ramdisk
mount /dev/ram0 /mnt/ramdisk
df -h /dev/ram0
Além disso, certifique-se de ter as permissões corretas definidas no ponto de montagem (substitua username e groupname pelo grupo e pelo usuário corretos do sistema):
chown -R username:groupname /mnt/ramdisk
Agora você pode usar essa partição como se fosse uma partição de disco rígido padrão. Note que se você desmontar a partição, seus dados não serão perdidos, e a RAM não será liberada, já que o kernel aloca permanentemente o espaço requerido até ser reinicializado.
Para automatizar este procedimento, adicione o seguinte ao script /etc/rc.local
:
/sbin/mke2fs -q -m 0 /dev/ram0
/bin/mount /dev/ram0 /mnt/ramdisk
/bin/chown username:groupname /mnt/ramdisk
/bin/chmod 0750 /mnt/ramdisk
Ramdisk: Configuração do Exim
Você pode fazer uma montagem de ligação para que o Exim continue a gravar em seu diretório de spool padrão. Para fazer isso, adicione a seguinte linha ao seu arquivo /etc/fstab
:
/mnt/ramdisk /var/spool/exim none bind 0 0
Como alternativa, você pode simplesmente apontar o Exim para o ponto de montagem do ramdisk. Para fazer isso, você precisará definir o seguinte no arquivo exim.conf
:
spool_directory = /mnt/ramdisk
Obviamente, você faria apenas um dos itens mencionados acima, não ambos.
Uma solução melhor: tmpfs
Em vez de usar um ramdisk, use tmpfs, suportado pelo kernel Linux 2.4 e superior. O benefício de usar o tmpfs é que a memória é dinamicamente atribuível, tornando-a uma solução muito mais flexível do que os discos RAM. Além disso, se a partição tmpfs ficar sem espaço, o kernel iniciará automaticamente os dados de paginação para o disco rígido, enquanto a solução ramdisk simplesmente fará com que o Exim pare de processar mensagens e travar.
Usando o tmpfs, você não precisará executar nenhuma das etapas necessárias para a solução ramdisk acima. As etapas a seguir são necessárias para uma configuração de tmpfs bem-sucedida:
Crie um ponto de montagem e defina as permissões corretas:
mkdir /mnt/tmpfs
chown -R username:groupname /mnt/tmpfs
Em seguida, abra o arquivo /etc/fstab
e defina a partição tmpfs a ser criada e montada na inicialização:
#<fs> <mountpoint> <type> <opts> <dump/pass>
tmpfs /mnt/tmpfs tmpfs size=1G,nr_inodes=10k,mode=0700 0 0
Isso criará uma partição tmpfs de 1 GB com 10'000 inodes. A configuração exim é a mesma que ao criar um disco virtual - informe ao Exim se o local do novo diretório de spool está localizado em /mnt/tmpfs
ou vincule o diretório de spool existente ao /mnt/tmpfs
mountpoint. Alternativamente, você poderia apenas montar a partição tmpfs no diretório de spool existente do Exim desde o início - então, em vez das alterações acima no arquivo /etc/fstab
, use esta linha:
#<fs> <mountpoint> <type> <opts> <dump/pass>
tmpfs /var/spool/exim tmpfs size=1G,nr_inodes=10k,mode=0700 0 0
Este site tem uma boa artigo explicando tmpfs e ramdisks, e as diferenças entre eles.