this post was extensively discussed on Hacker News.Alex Buznik, nas.net.ua gently provided a two-part Russian translation: part1 and part2.
Este post discute considerações de hardware, instalar Linux, configurar RAID de software, robustez e lidar com a corrupção de dados.,eu tenho corrido por uma década um NAS auto-construído em casa, então eu pensei em escrever minha experiência para que outros possam se vangloriar de meus muitos fracassos e ofuscar-se em meus poucos triunfos.
O NAS é perfeito, porque ele é simples, seguro, modular e extensível e é barato porque é construído de segunda mão, mercadoria partes.,
O NAS armazena principalmente arquivos (documentos e mídia) em um RAID de software 6 e serve-os sobre as partilhas do Windows para a rede local. Estou a ficar longe de soluções nas proprietárias porque uma falha de hardware tornaria a recuperação de Dados difícil de impossível sem a mesma substituição de hardware. Todas as peças de hardware, desde os discos rígidos até a caixa e a placa-mãe foram trocadas por outra coisa nesta década, às vezes mais de uma vez, de modo que o foco na modularidade pagou por si mesma., Uma vez que a integridade e robustez dos dados a longo prazo é uma preocupação, o NAS deve executar algum tipo de nível de RAID redundante.,
Objetivos
Objetivo | Descrição | Solução |
Função | NAS serve como uma rede, sistema de arquivos conectado para uso doméstico; NAS opera algumas horas de um dia e é desligado ou em modo de repouso a maior parte do tempo | Commodity hardware, de software de código aberto, modularidade, mantê-lo simples |
Interoperabilidade | Comumente usado plataformas de computador deve ser capaz de acessar os arquivos no dispositivo NAS. Hardware de Commodity deve ser capaz de se conectar ao NAS., | samba (também conhecido por partilhas do Windows) no Ubuntu, USB, SATA. Liga a LAN ao router Wi-Fi, faz a resolução do nome e o servidor de tempo. Acesse e gerencie com o SSH. |
Modularidade | componentes de Hardware e software devem ser intercambiáveis sem redesenhar todo o sistema | x 86 plataforma PC, Linux, janela de Encaixe |
Controle | eu quero controlar qual o software está instalado no NAS e o que ele faz | Ubuntu 18.,04 LTS |
integridade dos dados | Arquivos de tamanho arbitrário (dentro da razão) e conteúdo devem ser armazenados no NAS e não corroer ou perder integridade ao longo do tempo | RAID 6 com 4 discos rígidos, ext4fs com checksumming, scrubbing, RAID montado manualmente, RAM ECC. Assine os arquivos com o par2., |
Ruído | Ruído deve ser baixo e tolerável | Hdd no modo de espera, SSD como SO principal do disco, gravação, principalmente, muita memória RAM, arrefecimento passivo |
Custo | Utilizar a comodidade de hardware e software de fonte aberta | 2º-a mão de hardware commodity, discos rígidos em vez de SSDs |
Baixa manutenção | Evitar críticas de tempo de manutenção | firewall ufw aceitar apenas conexões de rede interna, sem a auto-atualizações de software limitada, a janela de Encaixe, não acessível a partir da Internet., |
Cd | Física NAS dimensões deve ser pequeno; nenhum espaço desperdiçado | 2ª mão a HP proliant microsever gen8 |
Não-metas
- normal de mídia-tarefas do servidor: transmissão, codificação, transcodificação etc
- o Bitcoin mineração
- o Torrent
- Tudo o resto 🙂
fazer com o Hardware
Obter o direito de hardware é a mais difícil-(pun)-est parte, como é a plataforma para a modularidade, preço, consumo de energia, tamanho e muitas outras metas que eu estou interessado., Existem muitos servidores NAS em segunda mão, baratos, mas eu não gosto da idéia de hardware fechado e sistemas de software. Eg, se um controlador RAID de hardware armazena dados em um formato proprietário nos discos rígidos eu precisaria do mesmo controlador de substituição exato para recuperar esses dados em caso de uma falha do controlador.
espaço também é um problema, por isso o servidor deve ser compacto ao permitir a execução de Linux nele; isso é muito difícil de encontrar, uma vez que a maioria dos NAS compactos lá fora existem sistemas proprietários e não permitem a instalação do seu próprio SO., Há uma abundância de PCs X86 usados e servidores, mas eles são na maioria muito grandes ou não têm barras de drive suficientes ou portas SATA. Conectando drives sobre USB também não é uma opção por causa da baixa velocidade, maior consumo de energia e requisitos de espaço. O primeiro par de minhas revisões NAS em torno de 2010 usou um barebone compacto e mais tarde uma mini torre em torno de que tinha 3 ou 4 baías de disco rígido, mas eu acho que esses formatos de caixa mais difícil de vir por estes dias. Sorte a tua se conseguires um a um preço acessível!deparei – me com um microserver Gen8 usado e não me arrependo desde então., O modelo base veio com 2GB ECC RAM, uma CPU Celeron 2-core e sem discos rígidos por cerca de 100€. Há uma excelente revisão daquele servidor em Louwrentius. O servidor é extremamente compacto( cerca de 26cm cada dimensão), razoavelmente baixo ruído (embora não silencioso) em standby, tem uma CPU passivamente refrigerada, duas portas ethernet GBit, quatro segmentos de 3,5″ de disco rígido e um slot de formato proprietário um pouco escondido para um quinto disco de baixo perfil 2,5″ que eu uso para um SSD., Os segmentos de transmissão podem receber diretamente discos SATA, enquanto o quinto slot requer um adaptador FDD macho-a-SATA de 4 pinos e um cabo SATA para conectar um SSD de 2,5″ à placa-mãe. Como um bônus adicional, o servidor apresenta a OIT, que permite o acesso remoto ao servidor com um navegador web – então não há necessidade de um teclado ou tela!
admito que o servidor não é 100% commodity parts; eg. uma falha na placa-mãe ou CPU exigiria encomendar exatamente as mesmas peças sobressalentes (que provavelmente será caro) ou construir um servidor completamente novo em uma plataforma diferente., No entanto RAM, rede e armazenamento são bastante padrão, Eu corro Ubuntu sobre ele e os benefícios delineados mais cedo pesar o suficiente para assumir esse risco. Cerca de 6 anos mais tarde, o servidor ainda funciona sem quaisquer problemas; salvo preconceito sobrevivente, eu acho que essa abordagem funcionou bem.
O servidor que eu comprei tinha firmware a partir de 2014 e HP felizmente começou a publicar atualizações de graça recentemente, o último a partir do final de 2019, que eu flashed o microserver com para um slick HTML5 Gerenciamento UI.,
o servidor passou por várias atualizações ao longo dos anos; a partir de um array RAID5 de três discos rígidos 2TB para a configuração atual de 3x6TB + 1x8TB + 1x 512MB SSD e uma atualização CPU para um modelo Xeon e uma atualização RAM para 16GB ECC., Eu quase que exclusivamente reutilizar discos rígidos USB externos (depois de abrir , extrair a unidade de disco rígido e, beijando-a garantia adeus), que são mais baratos do que no plano interno… primeiro que é surpreendente, considerando o hardware extra (caso, USB-para-adaptador SATA, cabos, fonte de alimentação) eles vêm com; no entanto, a garantia e especificações técnicas são significativamente inferiores aos das unidades internas, o que explica a diferença de preço. Desde que o servidor executa um RAID 6 (o ponto inteiro de que é para sobreviver falhas de disco) eu acho que é um risco ok para tomar.,
o servidor Está ligado através de um cabo Ethernet ao router de Wi-Fi; as velocidades da rede estão perto de 100mb/s, o que é ok, as portas USB3 podem fazer em torno de 40mb/s.
instalação
OIT torna a configuração do servidor fácil, mesmo sem um teclado físico e tela. Comecei com o servidor Ubuntu LTS 14.04, mudei para 16.04 e estou atualmente executando 18.04. As atualizações nunca funcionaram no local, em cada caso uma nova instalação foi necessária.
recomendo a instalação de um VM (como VirtualBox) na sua estação de trabalho, inicializando o servidor Ubuntu 18.,04 a partir de uma imagem ao vivo e a instalação do Ubuntu em um disco USB. Eu não consegui que o microserver Proliant iniciasse com o UEFI, então uma instalação tradicional de BIOS de grub é necessária.
os quatro discos rígidos são particionados de acordo com o esquema abaixo: uma partição de 1MB no início para o carregador de arranque GRUB, uma partição de 50GB para o Ubuntu e uma partição de 5,5 TB para o RAID.
I usou o instalador alternativo 18.04 do Ubuntu Server para configurar as partições Ubuntu como um RAID 1 Que espelha essa partição em todos os discos rígidos., O instalador é capaz de instalar o Ubuntu nesse RAID 1 e GRUB é capaz de arrancar a partir dele. Em caso de uma falha do disco rígido, apenas removendo esse disco rígido permitirá que o servidor inicialize novamente.
+-------------------+| 1MB bios_grub || |+-------------------+| 50GB Ubuntu ext4 || RAID 1 |+-------------------+| 5.5TB Data || RAID 6 |+-------------------+
para o instalador funcionar, deve haver pelo menos dois discos no RAID. Mais discos podem ser adicionados mais tarde. Apenas certifique-se de instalar o bootloader GRUB em todos os discos com:
grub-install /dev/sdX
em minhas primeiras experiências Ubuntu foi capaz de boot fine, mas não ativou as placas ethernet. Isto requer alguma confusão com o netplan.
/etc/netplan / 01-netcfg.,yaml
network: version: 2 ethernets: eno1: dhcp4: true dhcp6: true optional: true eno2: dhcp4: true dhcp6: true optional: true
considerações de RAID de arranque
tal como discutido em “instalação”, Botas Ubuntu de um RAID 1. MD espelhos muda para todas as partições de arranque, o que é incrível. O RAID do boot está mapeado em /dev / md0 – eu não encontrei uma maneira de atribuir um nome a ele, mas eu encontrei o nome do dispositivo para ser estável. Infelizmente Ubuntu vai acessar constantemente a unidade de inicialização durante a operação normal, o que no meu caso significa que quatro drives estão sempre girando., Eu tentei várias coisas como remapear diretórios de log para um disco ram e pré-carregar arquivos, mas a selva resultante de scripts é impossível de manter. A solução acabou por ser bastante simples e elegante, depois de um hack: eu instalei um SSD na quinta Baía de disco rígido e adicionei-o ao boot RAID 1. Enquanto o espelhamento funcionou, a BIOS Proliant (gen8) não vai arrancar da 5ª Baía se encontrar discos duros em outro lugar., A solução é um script que é executado após a inicialização e falha mecânica discos rígidos em RAID:
mdadm --manage /dev/md0 --fail /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
O script é um pouco mais complexo do que como nomes de dispositivo não são estáveis, e várias condições de erro devem ser levados em conta (ex. o RAID não deve ser tocado se um disco rígido está falhando) – mas esse é um tópico para um post diferente. O MD irá esquecer que os discos foram marcados como falhados depois de um reboot, o que é um padrão útil, uma vez que permite que o servidor inicialize a partir de qualquer disco rígido disponível.,
importante: como eu escrevi anteriormente, muito raramente atualizo o software no servidor, mas as poucas vezes que uma atualização é necessária, os harddisks em falta precisam ser re-inseridos no RAID para que as atualizações sejam espelhadas a todas as partições de arranque.
considerações de RAID de dados
o segundo RAID de software executado no servidor também é o importante: o RAID de dados., Minhas necessidades de armazenamento historicamente competiram com os avanços na tecnologia de armazenamento, então o RAID de dados passou por todos os tipos de transformações começando de um RAID de disco duplo 1 para um RAID de disco 3 5 para um RAID de disco 3 1 para um RAID de disco 4 6 onde ele está atualmente.
RAID 1 é imho a melhor solução se você puder pagar; é a mais simples de gerenciar, oferece o maior nível de consistência e disponibilidade de dados, o melhor desempenho e é, como um efeito colateral agradável, também o mais tranquilo para operar graças a escrever principalmente modo que permite girar para baixo todos, exceto um disco quando os dados só são lidos a partir do array., Infelizmente, os meus dados precisam de exceder o que posso fazer com um RAID 1.
RAID 5 é um bom compromisso entre redundância e eficiência de armazenamento, então eu operei o RAID de dados por muitos anos nesse modo. No entanto, a configuração é um pouco arriscado, como uma experiência embora demonstra: imagine um disco rígido quebrando de repente no meio da noite. Quando eu notar a falha, procure um substituto e instale-o pelo menos 2 dias passaram, mais 12 horas para uma resync completa., Assim, a matriz permanece degradada e desprotegida por 2,5 dias – qualquer falha adicional nesse período de tempo destrói todos os dados irrevogavelmente.
RAID 6 é atualmente o nível de escolha para o meu caso de uso: ele oferece metade da capacidade total em duas vezes a disponibilidade, sendo capaz de sobreviver a uma falha de disco duplo. A única desvantagem é que o modo “write mostly” do mdadm não funciona, então qualquer acesso ao RAID requer quatro discos ativos e é bastante barulhento.
ao criar o RAID com o mdadm, certifiquei-me de lhe atribuir um nome, Por isso agora está mapeado em /dev/md/data.,
A fim de aumentar a consistência de dados, eu tenho o NAS executar um script que corrige o RAID de dados. Este é um processo longo, Intensivo e ruidoso que mantém os discos ocupados e provavelmente deve ser executado quando o NAS não é necessário; para um NAS doméstico que é Dias de semana durante as horas de escritório. O Cron é teu amigo.
uma nota sobre o particionamento: você pode usar dispositivos raw (/dev/sdb, /dev/sdc…) sem quaisquer partições, mas não é recomendado., Ter partições (com rótulos, tais como RAID_1) torna-se, no caso de uma reconstrução ou troca de disco a unidade não está acidentalmente, instalado em um computador diferente e os dados não são sobrepostos (um não particionado unidade aparecerá sempre contêm dados e, assim, “seguro” para a formatação).
RAID encryption
o próximo passo é configurar a cifra para o RAID de dados. Usei dmcrypt LUKS para isso, a guardar a chave numa pen USB. Certifique-se de fazer backup da chave e do cabeçalho LUKS, caso contrário os dados não serão acessíveis no caso de um cabeçalho corrompido., O benefício da criptografia é que eu posso mover o servidor sem o medo de roubo de dados, desde que o RAID criptografado e a chave são transportados em diferentes rotas.,
Os dados criptografados RAID é um dispositivo de bloco mapeado para /dev/mapper/dados
O sistema de arquivos
O sistema de arquivos de escolha é ext4 com alguns ajustes:
mkfs.ext4 -O metadata_csum -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/data
Estas opções permitem-metadados de soma de verificação que aumenta a consistência dos dados e desativar lenta inicialização; este último é especialmente importante para uma grande variedade mecânico, discos, como inode inicialização irá demorar vários dias em contrário.
no espírito da modularização, o RAID de dados não é montado no /etc/fstab, mas sim montado com um script e mdadm durante o arranque., Esse script também monta o sistema de arquivos RAID de dados com o noatime, nodiratime e data=opções de diário, executa fsck antes de montá-lo, ajusta a gestão de energia stripe_cache_size e tweaks.
também note que para grandes sistemas de arquivos ext4,o primeiro acesso de escrita pode levar muito tempo-então confira este trabalho.
O CPU Celeron do Proliant tornou-se um gargalo com dmcrypt como ele não tem criptografia assistida por hardware, mas uma atualização barata para um Xeon E3-1220L para o mesmo socket resolveu que, ao mesmo tempo, reduzindo para metade o TDP para 17 Watt.,
Update September 2020: I don’t recall if this has always the case or started occurring after an update, but the data RAID hard disks will never spin down even if idle. A razão é a proteção multi montagem do ext4 que constantemente escreve para o sistema de arquivos. Multiple mount protection can be tweaked or disabled (that is what I did) with tune2fs.mais segurança dos dados!
in 2020 ext4 and md are, unfortunately, still not able to effectively counter Bit rot which silently corrupts files., Eu ouço e leio testemunhos conflitantes sobre ZFS que supostamente lida melhor com a corrupção de dados e vai dar-lhe uma tentativa em algum momento. Por agora, eu uso md5sum para criar e verificar checksums do meu backup .alcatrao.arquivos gz e parchive para criar arquivos de recuperação de erros. Já escrevi sobre o parchive antes e continuo até hoje um fã dedicado.
Automação
mencionei “scripts” ameaçadores aqui e ali, mas a verdade feia permanece que a configuração atual requer uma quantidade considerável de scripts para funcionar sem problemas., Pelo lado positivo, a maior parte do dia-a-dia operação é agora roteirizada e automatizada, não requer nenhuma intervenção manual: RAIDs montam por conta própria, são tolerantes a falhas e o servidor opera mesmo quando um ou dois discos rígidos se quebram. Backups são arquivados e checksummed automaticamente e uma verificação periódica alerta sobre arquivos corrompidos que eu, em seguida, manualmente (eu gosto de estar envolvido nestas coisas…) Correto. Alguns dos scripts do servidor estão disponíveis no meu repositório github, mais se seguirá em breve.,
Rede
O servidor utiliza os seguintes componentes de rede:
- netplan para gerenciar os dois a bordo de placas de rede-ethernet (consulte instalação)
- UFW para bloquear todo o tráfego de entrada, mas SSH, samba e netbios
- netbios para anunciar o nome do servidor para o router de casa e outros computadores
- o samba para compartilhamento de arquivos na rede local
eu estou usando o samba em modo somente leitura; alguns diretórios (como música e filmes) são compartilhados com acesso de convidado, alguns outros diretórios com documentos pessoais são protegidas por senha, mas novamente só de leitura., Qualquer operação de escrita no sistema de arquivos de dados requer acesso SSH. Uma vez que o ext4 não oferece instantâneos, ainda estou preocupado com o “delete by mistake” depois da meia-noite, depois de um par de bebidas; ainda não encontrei uma boa solução para isso. Navegar pelas partilhas de samba no Ubuntu nautilus pode ser lento para directórios grandes – se se tornar demasiado para lidar, considere usar CIFS ou sshfs.,
vídeo & gráficos
nunca pensei que iria precisar disto, mas finalmente chegou o dia em que precisava de ligar um ecrã físico e um teclado ao gen8 – e não conseguia pôr um ambiente de trabalho a correr. O gen8 tem uma placa gráfica Matrox g200 para a qual Ubuntu deixou de apoiar há muito tempo, mas há uma maneira de obter alguns gráficos a partir dele.
primeiro passo: instalar o suporte do ecrã no ambiente do servidor:
apt install ubuntu-desktop
após reiniciar, irá notar um ecrã de autenticação 640×480. Não existem outros modos disponíveis na configuração de visualização., Este comentário sobre uma questão relacionada ajudou:
# Install vesa xserver. Was not needed in my case.apt-get install xserver-xorg-video-vesa # Boot into text modeinit 3 # Create new X-server configurationX -configure # Install configuration. The original post says to replace mga with vesa; in my case, vesa was already pre-filled.mv xorg.conf.new /etc/X11/xorg.conf# Boot into graphicsinit 5
aviso justo: aceleração gráfica não está disponível e a resolução máxima é 1280×1024.
ngraçado fato que eu descobri enquanto pesquisava: o gen8 tem um conector DisplayPort não-padrão na frente atrás da porta.