12 de fev de 2009

Unindo partições com o mhddfs

Artigo muito interessante publicado no Dicas-L, por André Luiz Facina.


Segue na íntegra:

Imagine que você possui três HDs, nos tamanhos de 80, 40 e 60 Gb. Imagine agora que você precise de um lugar para armazenar suas músicas, mas não quer simplesmente criar uma pasta em cada disco, até porque esse método seria muito cansativo para se administrar. Então iremos criar um tipo de RAID, e com isso criamos uma única partição (virtual) com a soma dos espaços livres dos três discos. Detalhe, tudo isso sem destruir os dados que já estão nos discos, e o mais interessante, tudo isso com apenas um comando :-)

Descobri essa solução utilizando o mhddfs, que é um módulo do FUSE. O mhddfs permite agrupar pequenas partições em uma única partição virtual, que irá conter todos os arquivos de todas partições membras.

Instalação

A distribuição utilizada foi o Debian Lenny.

# apt-get install mhddfs

Utilização

Vamos dizer que você tenha três discos montados em /media/disco1, /media/disco2, /media/disco3, então você terá algo semelhante a isso:

  # df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 80G 50G 30G 63% /media/disco1
/dev/sdb1 40G 35G 5G 88% /media/disco2
/dev/sdc1 60G 10G 50G 17% /media/disco3

Depois de instalado o mhddfs, vamos criar um novo ponto de montagem, vamos chamá-lo de /mnt/virtual, que irá conter a concatenação de todas as unidades. E em seguida vamos executar o comando mhddfs seguido dos três diretórios(onde estão montados as três partições) e do ponto onde serão montados.

 
# mkdir /mnt/virtual
# mhddfs /media/disco1,/media/disco2,/media/disco3 /mnt/virtual -o allow_other

option: allow_other (1)
mhddfs: directory '/media/disco1' added to list
mhddfs: directory '/media/disco2' added to list
mhddfs: directory '/media/disco3' added to list
mhddfs: move size limit 4294967296 bytes
mhddfs: mount point '/mnt/virtual'

A opção -o allow_other, permite que o /mnt/virtual seja visível para outros usuários, e não apenas ao usuário que o criou.

Digite novamente o comando df -h e observe que foi criando mais um ponto de montagem.

 
# df -h

Filesystem Size Used Avail Use% Mounted on
...
/dev/sda1 80G 50G 30G 63% /media/disco1
/dev/sdb1 40G 35G 5G 88% /media/disco2
/dev/sdc1 60G 10G 50G 17% /media/disco3
mhddfs 180G 95G 85G 53% /mnt/virtual

Observe a inteligencia dessa ferramenta, ela criou uma concatenação dos três discos, calculou o tamanho total das unidades juntas (180G), somou o espaço já utilizado (95G), e ainda trouxe o tamanho do espaço livre (85G). Se você entrar em /mnt/virtual perceberá que todos os arquivos provenientes das três unidades se encontram no mesmo lugar.

Mas e se você tentar adicionar novos arquivos em /mnt/virtual?

Quando você cria um novo arquivo em /mnt/virtual, o mhddfs vai olhar para o espaço livre, que permanece em cada uma das unidades. Se a primeira unidade tem espaço livre suficiente, o arquivo será criado nela. Caso contrário, se a unidade está com pouco espaço (tem menos que especificado pelo mlimit opção do mhddfs, que o padrão é de 4 GB), a segunda unidade será utilizado no lugar. Se essa unidade também tem pouco espaço, a terceira unidade será utilizada. Se todas as unidades tem pouco espaço, a unidade com mais espaço livre será escolhida para criar os novos arquivos.

Se resolver adicionar ao fstab para a montagem automática durante o boot, você pode adicionar a seguinte linha:

mhddfs#/mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual fuse defaults,allow_other 0 0

Bem, esse não é o método mais adequado de se criar um array de discos, mas em muitas situações da vida de um Sysadmin isso poderá ser muito útil. É sempre bom ter uma carta na manga :-)


Fonte: http://www.dicas-l.com.br

Um abraço e até a próxima!!!