Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

segunda-feira, 14 de janeiro de 2013

OpenWRT: conectando um HD pela USB

De volta da vida desconectada, vou começar a escrever as possibilidades de ter um roteador com uma porta USB. Como será um requisito para qualquer uso mais intenso do roteador, precisamos de mais espaço em disco. Isto pode ser obtido conectando qualquer dispositivo de armazenamento USB na porta USB do roteador como Pendrive, HD Externo, leitor de  cartão de memória, celulares, etc. No meu caso, vou conectar um HD externo de 1TB.

Diferentemente de um Linux para Desktop, o OpenWRT precisa economizar espaço em disco ao extremo. Uma das formas de ganhar alguns "mega" é filtrar os módulos de kernel instalados. Em geral, para equipamentos com USB, é pré-instalado um módulo básico de suporte USB como o kmod-usb2. Porém, estes módulos básicos não incluem o uso de unidades de armazenamento USB. O que você vai inicialmente precisar são os pacotes:

  • kmod-usb-storage
  • kmod-usb-storage-extras (opcional, para unidades alternativas como leitores de cartão)
  • para OpenWRT 10.03.1
    • block-hotplug
    • block-mount
  • para OpenWRT 12.09-rc1 (usado nos testes)
    • block-mount (agrega o block-hotplug e o block-extroot)

E os respectivos módulos para cada sistema de arquivos que você pretenda usar:

  • kmod-fs-ext4: para ext2, ext3 e ext4
  • kmod-fs-vfat: para FAT (em geral o que você encontrará em pendrives)
  • kmod-fs-ntfs: NTFS usado pelo windows mas sem acesso de escrita. 

Existem outras alternativas (busque por pacotes kmod-fs-*), mas o que você vai precisar em 99% dos casos são estes três. Se a ideia é deixar um disco fixo no roteador, recomendo usar o ext4. É rápido e feito para ser usado no Linux. Se for movimentar esporadicamente o roteador, ainda assim recomendaria o ext4. Existe driver para windows que funciona muito bem. Também é possível usar o ntfs-3g para montar NTFS com escrita no roteador. Você terá um desempenho inferior e precisará de mais espaço no roteador para instalar os drivers e programas necessários.

Ainda sobre o vfat, e provavelmente o ntfs, você precisará de mais um módulo de suporte da língua do sistema de arquivos. Ao tentar montar o disco, aparecerá uma mensagem de erro do kernel como esta:
FAT: IO charset iso8859-1 not found
Isto significa que você não tem o driver do NLS (Native Language Support) usado pelo seu sistema de arquivos. Instale o correspondente pacote kmod-nls-xxx, onde xxx será a codificação necessária, como kmod-nls-iso8859-1. Com ext4, você não teria este problema.

O que eu uso nas minhas unidades de armazenamento maiores é dividir o disco em duas ou mais partições, sendo uma pequena em FAT e as demais em EXT4. A partição FAT é usada para guardar o driver do ext para windows, para ser instalado em novas máquinas, e para trocas de arquivos com dispositivos não muito abertos como impressoras, TV. As partições EXT4 guardam os dados de verdade.

Com os pacotes instalados, conecte seu HD externo. Deverá aparecer algo similar nas mensagens de kernel (dmesg)
[864448.690000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[864448.840000] scsi0 : usb-storage 1-1:1.0
[864449.850000] scsi 0:0:0:0: Direct-Access     WD       My Book 1110     1030 PQ: 0 ANSI: 4
[864449.860000] scsi 0:0:0:1: CD-ROM            WD       Virtual CD 1110  1030 PQ: 0 ANSI: 4
[864449.880000] scsi 0:0:0:2: Enclosure         WD       SES Device       1030 PQ: 0 ANSI: 4
[864449.890000] sd 0:0:0:0: [sda] 2928904192 512-byte logical blocks: (1.49 TB/1.36 TiB)
[864449.900000] sd 0:0:0:0: [sda] Write Protect is off
[864449.910000] sd 0:0:0:0: [sda] Mode Sense: 23 00 10 00
[864449.920000] sd 0:0:0:0: [sda] No Caching mode page present
[864449.920000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864449.940000] sd 0:0:0:0: [sda] No Caching mode page present
[864449.940000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864449.990000]  sda: sda1 sda2 < sda5 >
[864449.990000] sda: partition table partially beyond EOD, enabling native capacity
[864450.000000] sd 0:0:0:0: [sda] No Caching mode page present
[864450.010000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864450.020000]  sda: sda1 sda2 < sda5 >
[864450.020000] sda: partition table partially beyond EOD, truncated
[864450.060000] sd 0:0:0:0: [sda] No Caching mode page present
[864450.070000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864450.070000] sd 0:0:0:0: [sda] Attached SCSI disk
No meu caso, sda1 é uma partição FAT, sda2 uma extended que contém a partição sda5. Magicamente, o disco foi montado. O comando mount mostra a localização:
root@router:~# mount
(...)
/dev/sda5 on /mnt/sda5 type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
O próprio OpenWRT montou o disco em /mnt/sda5. Só acessar o diretório e todo o conteúdo estará disponível.

Para HD, é bom desligá-los quando eles não forem necessários. Isto poupará suas partes móveis e aumentará a vida útil da unidade. O pacote luci-app-hd-idle realiza esta tarefa. A sua configuração é feita pela interface Web (luci) e é bem intuitivo. Basicamente, configura-se a unidade e o tempo sem atividade até que o disco seja desligado. Se alguma informação for necessária após ele ser desligado, o primeiro acesso apenas levará alguns segundos a mais do que o normal até o disco voltar a girar.

Até este ponto, a unidade estará somente "visível" para o roteador. Já é possível copiar arquivos de e para o roteador usando programas como o scp e o winscp mas nada muito amigável. O próximo passo será a instalação de um serviço de compartilhamento de arquivos (samba).

Até a próxima.