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??
Filed under: Uncategorized - @ 14/12/2007 20:27
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?
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.
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?