USB Disks e o dilema do LVM!


Por esses dias, comprei no ML (mercado livre) um HD externo USB, modelo Seagate Barracuda 7200.8 (ST325082 3A; 250 GB HDD; 7200 RPM) com uma case da spire.

Até aqui tudo bem🙂 Apaguei a partição original que vinha com o bichinho, e refiz o mesmo com duas partições lógicas. Uma com NTFS de 60G (para mover os jogos do windows para ela), e os restantes 160G e bolinha eu deixei-os numa partição LVM, com um volume group (VG) e por enquanto um único logic volume (LV) formatado com ReiserFS (que me permite aumentar e diminuir tanto o LV quanto o filesystem).

– Como diria o meu chefe, tá doido rapaz??? Pra que tudo isso num volume removível????

– Posso explicar? Explicarei!😀

Fi-lo não pq seja doido ou goste de sofrer, mas pq dessa forma tenho muito mais flexibilidade sobre os meus dados, ie. o LV atualmente tem 60G , deixando os restantes disponíveis para aumentá-lo, ou criar outro LV. Simples assim🙂

– Tá. tá, tá, mas pq raios estou a ler isto? Tem alguma moral nesta estória?

– Ter até tem, mas prefiro elucidar vc, caro leitor, sobre o tutorial abaixo. É que eu queria automatizar o processo de plugar/desplugar e montar/desmontar o HD USB, e abaixo explico como fazê-lo. Só isso! (pode me xingar agora eheheheheh).🙂

Este processo elimina o problema de que cada vez que vc pluga o dispositivo, o linux cria um ponto de montagem diferente para ele (as vezes é sda, as vezes é sdb, e por ai vai)

Enjoy!

Preliminares: Parto do pressuposto que vc (assim como eu), irá criar uma partição lógica configurada com LVM (será a /dev/sda6), com um volume group chamado de media e um logical volume que chamarei de media_linux_home. Os tamanhos são irrelevantes assim como os nomes, apenas os menciono a priori para manter a coerência do tutorial. Note também que só poderemos criar estas partições de LVM APÓS!! REPITO!! APÓS!!! o processo descrito abaixo.

Passo 1: Criar um arquivo em /etc/udev/rules.d/ que eu chamei de 96-usbdisk.rules

Agora adicione isto ao arquivo:

BUS==”usb”, KERNEL==”sd?6″, SYSFS{manufacturer}==”Prolific Technology Inc.”, NAME=”%k”, SYMLINK+=”usbhdd0″

Explicando a linha acima, o KERNEL é importante e deve ser igual ao ponto LVM físico do seu hd, no caso o meu é o sda6, se o seu fosse, digamos, o sdb4, vc mudaria a linha de sd?6 para sd?4, já que o valor ? serve precisamente para eliminar o problema de alocação. O sysfs é específico do meu HD e serve para fixar o dispositivo (para ele não se confundir com outro dispositivo USB) e por último o SYMLINK cria um dispositivo virtual, no caso cria o /dev/usbhdd0.

Grave o arquivo e sigamos para o passo 2.

Passo 2: Crie dois arquivos em /usr/sbin chamados de mount_usbdisk e umount_usbdisk.

Dentro do mount_usbdisk iremos colocar o seguinte código:

lvchange -a y media
mount /dev/mapper/media-media_linux_home /usbdisk -t reiserfs -o data=writeback,notail,noatime,user_xattr

Explicando: A primeira linha é a mais importante
, ela avisa o LVM que o /dev/usbhdd0 está disponível e que o mesmo pode ativar o VG e o LV do mesmo.
A segunda linha somente monta a partição no ponto de montagem /usbdisk com as minhas configurações optimizadas do reiserfs.

Dentro do umount_usbdisk iremos colocar o seguinte código:

umount /usbdisk
lvchange -a n media

Explicando: Este código tem o efeito inverso ao primeiro. Desmonta o ponto de montagem e avisa o LVM que o /dev/usbhdd0 não existe mais e o LV e VG devem ser marcados como inactivos.

Agora mude a permissão dos dois arquivos para execução com chmod 755 arquivos.

Passo 3: Os arquivos estão prontos, agora falta só o pulo do gato.

Tradicionalmente para criarmos o PV (primeiro comando do LVM (não confundir com o PCC), e partindo do pressuposto que iriamos criar o LVM na /dev/sda6, rodariamos o comando pvcreate /dev/sda6 ,correto? ERRADO!

Como vc deve ter observado acima, a nossa regra de UDEV fala que quando plugamos o HD, o nosso dispositivo sempre será /dev/usbhdd0, independentemente do que o linux quiser chamá-lo. ESSE é o pulo do gato. Quando formos criar o PV, nós plugaremos o dispositivo, deixamos o UDEV fazer a sua mágica (só leva alguns segundos), e quando o /dev/usbhdd0 pipocar, rodaremos pvcreate /dev/usbhdd0.

E pronto. Agora cada vez que vc espetar o HD, basta rodar o mount_usbdisk e/ou o umount_usbdisk para ativar/desativar o ponto de montagem.

Fácil não??

This entry was posted in Uncategorized. Bookmark the permalink.

4 Responses to USB Disks e o dilema do LVM!

  1. Welington says:

    Legal o seu artigo, eu já tinha visto algo assim usando pen-drive, mas isso já tem algum tempo.
    Na sexta eu postei um artigo sobre redimensionamento simplificado do LVM com ReiserFS lá no meu blog.
    Vou colocar uma chamada para este seu artigo lá, só pra ter uma referência. Pode ser?

  2. Pingback: USB Disk, LVM e Udev

  3. hamacker says:

    Para nao sofrer com sdN, voce pode usar simplesmente o rotulo do disco chamado de UUID.
    Ao plugar o disco, voce pode simplesmente observar qual é o label dele assim :
    ls -l /dev/disk/by-uuid/
    digamos que ele seja “dbf9372a-fd1e-4a5a-9e9d-011c9b093380”, entao use o mesmo comando “mount” no entanto acrescente -U “dbf9372a-fd1e-4a5a-9e9d-011c9b093380” no lugar de /dev/sdLN.

    Eu uso isso em scripts para detectar o disco de backup correto.
    Quem faz a operacao de backup é o estagiario e as vezes ele tem mania de colocar o disco (tambem usb externo) erro. Eu tenho um disco para cada dia, assim evito que ele coloque o disco de terça feira quando deveria ser o de segunda. Funciona que é perfeito, mas se tiver que formatar o disco o UUID vai mudar e precisa atualizar o script.

  4. Uso somente o UDEV, com ele dou um nome específico para cada dispositivo USB, tal como fez. Qual a real necessidade em colocar LVM num dispositivo de armazenamento portátil?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s