Como estender o armazenamento do sistema LEDE/OpenWRT com um dispositivo USB
LEDE/OpenWRT é um sistema operacional baseado em Linux que pode ser usado como uma alternativa aos firmwares proprietários em uma ampla variedade de roteadores.
Instalá-lo fornece maior segurança, vamos ajustar nosso roteador e nos dar uma ampla gama de pacotes de software para instalar a partir dos repositórios do sistema.
A instalação de pacotes é
Muito fácil, graças ao gerenciador de pacotes OPKG, mas muitas vezes o disponível
O espaço em roteadores comuns é bastante limitado. Neste tutorial veremos como
estender o espaço disponível do sistema usando um dispositivo USB.
Neste tutorial, você aprenderá:
- Como usar um dispositivo USB para estender o armazenamento do sistema LEDE/OpenWRT
- Como reverter para a configuração de estoque
Estenda o armazenamento do sistema LEDE/OpenWRT com USB
Requisitos e convenções de software usados
Instalação de pacotes
Para estender o espaço de armazenamento do roteador, primeiro precisamos instalar alguns pacotes. Para realizar esta tarefa, podemos usar opkg, o gerenciador de pacotes leve e nativo do LEDE, portanto, a primeira coisa que precisamos fazer é conectar-se ao sistema via ssh. Para este artigo, assumirei que o IP do roteador seja 192.168.0.1. Faremos o login como usuário root:
ssh root@192.168.0.1
root@192.168.0.1's password:
Depois de inserirmos a senha do usuário root (aquela que configuramos na primeira vez que configuramos o roteador – a mesma que usamos para fazer login na interface da web do roteador), devemos ser recebidos pela seguinte mensagem:
BusyBox v1.25.1 () built-in shell (ash)
_________
/ /\ _ ___ ___ ___
/ LE / \ | | | __| \| __|
/ DE / \ | |__| _|| |) | _|
/________/ LE \ |____|___|___/|___| lede-project.org
\ \ DE /
\ LE \ / -----------------------------------------------------------
\ DE \ / Reboot (17.01.4, r3560-79f57e422d)
\________\/ -----------------------------------------------------------
root@earendil:~#
Uma vez logado, precisamos atualizar a lista dos pacotes disponíveis:
opkg update
Assim que a lista for atualizada, podemos instalar os pacotes de que precisamos:
opkg install block-mount kmod-fs-ext4 kmod-usb-storage e2fsprogs kmod-usb-ohci kmod-usb-uhci fdisk
Observe que o pacote fdisk é necessário apenas se pretendermos particionar o dispositivo USB usado para estender o espaço de armazenamento do sistema, diretamente no LEDE: realizaremos esta operação na próxima etapa.
Preparação do dispositivo USB
Podemos manipular o dispositivo USB que pretendemos usar em uma máquina separada ou diretamente no sistema LEDE, usando o fdisk. Para este tutorial, escolheremos a segunda opção e criaremos uma única partição que usará todo o espaço disponível no dispositivo USB.
Primeiro, conectamos o USB ao nosso dispositivo. Para verificar se ele é reconhecido pelo kernel, podemos examinar as últimas linhas da saída produzida pelo comando dmesg. Devemos observar um resultado semelhante ao seguinte:
dmesg | tail
[ 91.701565] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[ 91.708962] scsi host2: usb-storage 1-1.1:1.0
[ 92.714770] scsi 2:0:0:0: Direct-Access Kingston DataTraveler 2.0 1.00 PQ: 0 ANSI: 2
[ 92.726372] sd 2:0:0:0: [sda] 1994752 512-byte logical blocks: (1.02 GB/974 MiB)
[ 92.734814] sd 2:0:0:0: [sda] Write Protect is off
[ 92.739691] sd 2:0:0:0: [sda] Mode Sense: 23 00 00 00
[ 92.745685] sd 2:0:0:0: [sda] No Caching mode page found
[ 92.751147] sd 2:0:0:0: [sda] Assuming drive cache: write through
[ 92.851061] sda: sda1
[ 92.858827] sd 2:0:0:0: [sda] Attached SCSI removable disk
Nosso dispositivo foi reconhecido como sda. Para particioná-lo, iniciamos o fdisk e passamos o caminho do dispositivo USB como o argumento do utilitário:
fdisk /dev/sda
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
A primeira coisa que queremos fazer é criar uma nova tabela de partição DOS no dispositivo, portanto, inserimos o como comando e pressionamos enter:
Command (m for help): o
Created a new DOS disklabel with disk identifier 0xd67f57f9.
Em seguida, queremos adicionar uma nova partição. Usamos o comando n para realizar a operação. Seremos questionados sobre o tipo de partição que queremos criar: aqui queremos uma partição primária. Também seremos solicitados a inserir o número da partição e o primeiro e o último setor da partição. Em todos os três casos, podemos simplesmente pressionar enter e aceitar os padrões.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-1994751, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1994751, default 1994751):
Created a new partition 1 of type 'Linux' and of size 973 MiB.
As alterações que realizamos no dispositivo ainda não estão efetivas. Para confirmá-los, devemos usar o comando w:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Agora que nosso dispositivo está particionado, devemos criar um sistema de arquivos.
Criação do sistema de arquivos
O próximo passo consiste em criar um sistema de arquivos ext4 na partição que criamos na etapa anterior. Basta iniciar o comando mkfs.ext4 e passar o caminho da partição como argumento:
mkfs.ext4 /dev/sda1
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 249088 4k blocks and 62336 inodes
Filesystem UUID: 42109b6a-759a-48ba-a7b9-1508d0973131
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Tomamos nota do UUID do sistema de arquivos (42109b6a-759a-48ba-a7b9-1508d0973131): precisamos que ele faça referência ao fileystem na próxima etapa.
Configuração do Fstab
Nesta etapa, modificamos o arquivo fstab do sistema, que em nosso sistema LEDE é /etc/config/fstab. Dentro do arquivo, anexamos a seguinte seção:
config 'mount'
option target '/overlay'
option uuid '42109b6a-759a-48ba-a7b9-1508d0973131'
option enabled '1'
O sistema de arquivos identificado pelo UUID, que é o que criamos em nosso dispositivo USB, será montado em /overlay, portanto, será usado como armazenamento do sistema.
Copiando o conteúdo do armazenamento do sistema no dispositivo USB
Para que nossa configuração funcione, devemos copiar o conteúdo do armazenamento atual do sistema no dispositivo USB. Primeiro montamos o sistema de arquivos ext4 em /mnt:
mount /dev/sda1 /mnt
Em seguida, copiamos o conteúdo nele:
cp -a /overlay/. /mnt
No exemplo acima, usamos o comando cp com duas opções -a: é a versão curta de --archive e é usado para preservar o atributo dos arquivos copiados.
Reinicie o sistema
Neste ponto, nossa configuração deve estar completa. Para que as alterações entrem em vigor, precisamos reiniciar o sistema. Podemos desligar e ligar o dispositivo novamente a partir do interruptor físico ou podemos emitir o seguinte comando (o terminal provavelmente congelará quando o dispositivo for desligado):
reboot
Depois que o sistema for reinicializado, para verificar se o espaço adicional é usado, podemos fazer login novamente em nosso roteador e executar o comando df passando /overlay como argumento. Aqui também usamos a opção -h para obter tamanhos legíveis por humanos:
df -h /overlay
Filesystem Size Used Available Use% Mounted on
/dev/sda1 941.7M 5.2M 871.9M 1% /overlay
Como esperado, podemos ver que /dev/sda1 é o sistema de arquivos montado em /overlay: o tamanho é 941,7M: apenas 5,2M estão em uso, o que é aproximadamente 1% do espaço disponível.
Voltar ao stock
Retornar à configuração do sistema de estoque é bastante simples, apenas algumas etapas devem ser executadas. A primeira coisa que temos que fazer é identificar a partição do sistema originalmente montada em /overlay. Para fazer isso, devemos dar uma olhada no arquivo /proc/mtd:
cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00010000 "u-boot"
mtd1: 001333cc 00010000 "kernel"
mtd2: 0069cc34 00010000 "rootfs"
mtd3: 00460000 00010000 "rootfs_data"
mtd4: 00010000 00010000 "art"
mtd5: 007d0000 00010000 "firmware"
O que nos interessa é o arquivo mtd com o nome rootfs_data, que neste caso é mtd3. Devemos montar o dispositivo de bloco correspondente, /dev/mtdblock3 em /mnt:
mount -t jffs2 /dev/mtdblock3 /mnt
Observe que usamos a opção -t do comando mount para especificar o tipo de sistema de arquivos, jffs2 neste caso (um sistema de arquivos projetado especificamente para dispositivos de memória flash).
Uma vez que a partição é montada, devemos reverter as alterações feitas anteriormente no arquivo fstab. Neste ponto, o arquivo original deve estar acessível como /mnt/upper/etc/config/fstab. Abrimos com nosso editor de texto favorito e excluímos, comentamos ou modificamos a seção que adicionamos anteriormente, de:
config 'mount'
[...]
option enabled '1'
Para:
config 'mount'
[...]
option enabled '0'
Quando terminarmos, salvamos as alterações. Por fim, desmontamos o dispositivo de bloco e reinicializamos o sistema:
umount /mnt && reboot
Conclusão
Neste artigo, aprendemos como expandir o espaço de armazenamento de um sistema LEDE usando um dispositivo USB simples. LEDE é um sistema operacional de código aberto que pode ser instalado em uma variedade de roteadores; com este procedimento simples, obtemos mais espaço para os dados do sistema e os usamos, por exemplo, para instalar pacotes adicionais que não caberiam no espaço de armazenamento geralmente pequeno disponível nos roteadores. Para saber mais sobre o projeto LEDE, visite a documentação do LEDE.
