segunda-feira, 15 de agosto de 2016

Servidor de arquivos com o Raspberry PI

        Estava muito curioso para saber como é o famoso Raspberry Pi. Comprei um usado no PicaretaLivre MercadoLivre por R$100 no ano passado. Estava como novo e veio com um case transparente de brinde. É o modelo B Rev.2, com dois furos de fixação e 512MB de RAM.
        Depois de muito fuçar no Raspibian e no hardware do Raspyberry Pi, decidi montar um servidor de arquivos. Modifiquei a placa retirando o conector de vídeo composto e áudio analógico e substituí o conector duplo USB por barra de pinos. Adicionei um dissipador de calor no SoC Broadcom BCM2835 para fazer overclock. Aliás, muito interessante o encapsulamento do mesmo: uma memória RAM BGA em cima do SoC também BGA. O gabinete veio de um receiver de TV via satélite com fonte chaveada, três botões em um conetor USB no painel.


Gabinete do receiver de TV por satélite reaproveitado.

        A fonte de alimentação, baseada no excelente IC da Power Integrations TOP254, retirei os componentes das saídas desnecessárias de ±7,5V e 3,3V, modificando o circuito de realimentação para usar somente a saída de 5V restante, além de por um trimpot para ajustar precisamente esta saída. Troquei também o conector de saída por um de três pinos. Substituí o interruptor por um com lâmpada neon.

Placa da fonte de alimentação chaveada.


Detalhe mostrando os componentes retirados, a adição do trimpot e troca do conector.

        O cabo de alimentação interno, fiz com duas saídas: uma com o mini-USB para o Raspberry e outra para o HDD de 2,5" de 500GB. Sugiro usar HDD de 2,5", pois só usa 5V simplificando muito a montagem. Importante alimentar o HDD direto da fonte, não pela saída USB do Raspberry, pois esta pode não suportar a potência necessária ao HDD, ativando os circuitos de proteção.
        Usei uma placa de case de HDD USB-SATA para ligar o mesmo no Raspberry. Substitui o conector USB por barra de pinos e adicionei mais uma para o LED de atividade ligada ao painel do gabinete.

Detalhe da placa USB/SATA com o conector USB substituído por barra de pinos e a alimentação vinda direta da fonte. Há também os dois fios para o LED de acesso no painel.

        A interface Ethernet, cortei um cabo e usei um passa-cabos na parte traseira do gabinete, crimpando um conector novo. Para a saída HDMI, a mesma coisa, porém foi muito trabalhoso ressoldar todos os fios no conetor HDMI. Este cabo usa quatro pares diferenciais com blindagens individuais, difíceis de desencapar sem estragar os fios.

Cabo Ethernet com novo conector e cabo HDMI com o conector ressoldado.

Cabos Ethernet e HDMI saindo pelos passa-cabos no lado de trás do gabinete. Note os adaptadores adicionais.

Detalhe dos passa-cabos, aproveitando a furação original do gabinete.
        Neste gabinete, há uma placa no painel contendo três botões, dois LEDs, um display, um IC TTL e um receiver infravermelho para controle remoto. Retirei tudo menos os botões. Os LEDs, substituí por um vermelho e outro azul de 2mm e adicionei mais um vermelho do adaptador USB-SATA. Há também um conector USB no painel que liguei no USB do Raspberry, assim posso ligar um teclado e mouse PS/2 com uma adaptador USB-PS/2.

Placa do painel modificada vista por trás. Note os resistores de pull-up e capacitores nos três botões.

Conector frontal USB do gabinete.
Esquema do conector do Raspberry Pi, mostrando a ligação dos botões POWER, UP e DOWN bem como os LEDs. O barramento I²C comentarei em um futuro post.

        Por hora, apesar de os três botões estarem ligados ao Raspberry Pi, somente o botão POWER está em uso. Ao ser pressionado, roda um script em Python que executa o comando "sudo shutdown -h now". Futuramente farei os botões UP e DOWN controlarem o volume.

Conectores USB do Raspberry Pi, um ligado ao conector USB do painel e outro no adaptador USB-SATA.

Visão geral do interior do gabinete. Para fixar o HDD e o Raspberry Pi, furei a chapa e fixei-os com parafusos e espaçadores. Note a bateria de Lítio do RTC ligado ao barramento I²C. Neste barramento ainda sai um cabo para ligar um futuro display OLED no Painel.

        Num equívoco, achando que daria mais performance ao servidor de arquivos, usei o sistema de arquivos exFAT, ficando muito lento. Depois testei com FAT32, um pouco menos lento, com NTFS tendo problemas de permissão e performance e finalmente com o nativo do Linux: o EXT4 que funcionou com a performance esperada. Recomendo usar este, os outros funcionam mas com muita dificuldade e limitações. Com o EXT4 e rede Ethernet de 100Mbits, consigo transferir arquivos a pouco mais de 8Mbytes/s, condizente para uma rede de 100Mbits/s. Testei o acesso com Wi-Fi pelo roteador e mesmo conectado a 72Mbit o desempenho é triste: mal consegue transferir 1Mbyte/s. É um problema que tenho notado em redes domésticas com Wi-Fi: o desempenho pífio mesmo conetado a mais de 100Mbit/s. Pesquisei muito e ainda não consegui uma resposta satisfatória.
        Para funcionar como servidor, usei o SAMBA. Tive bastante dificuldade no início por não saber muito de Linux, do SAMBA e de permissões de arquivos no EXT4.

Ajustes e oveclock: abaixo está o config.txt simplificado (sem os comentários) que usei no servidor. Desabilitei a saída de vídeo composto e fixei a resolução da saída HDMI em 1360x768 60Hz. Fiz o overclock do BCM2835 para 900MHz e habilitei o power-saver (quando ocioso, o clock cai para 450MHz). Habilitei a interface I²C, SPI e UART. Alterei o LED de atividade para a gpio25.

disable_overscan=1

hdmi_force_hotplug=1

hdmi_group=2

hdmi_cvt=1366 768 60 3 0 0 0

hdmi_drive=2

initial_turbo=60
arm_freq=900
arm_freq_min=450
core_freq=333
core_freq_min=175
sdram_freq=450
sdram_freq_min=250
over_voltage=2
gpu_mem=128

boot_delay=0
disable_splash=1

dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=100000
dtparam=spi=on
dtparam=uart0=on

dtoverlay=lirc-rpi

dtoverlay=i2c-rtc, ds3231

dtoverlay=pps-gpio,gpiopin=23
dtparam=act_led_activelow=on
dtparam=act_led_gpio=25

dtoverlay=bmp085_i2c-sensor

audio=on


        Futuramente pretendo trocar a placa do Raspberry para o 3, com processador quad-core e 64bits.

Nenhum comentário:

Postar um comentário