Recomendações sobre o ZFS no FreeBSD como uma caixa NAS?

9

Observe que as respostas nesta página são de 2009 e não devem ser consideradas evangélicas. Se você tiver uma pergunta específica sobre o , clique no botão Fazer uma pergunta e faça uma pergunta específica.

Eu estava pensando em criar um sistema de backup doméstico usando o FreeBSD 7.2 e o sistema de arquivos ZFS. Alguém já teve alguma experiência com esse sistema de arquivos?

Especificamente:

  • É possível inicializar a partir do ZFS? (Eu gostaria?)
  • Quão fácil é adicionar uma unidade?
  • Quão bem ele lida com unidades de tamanhos diferentes?
  • Você pode adicionar novas unidades em tempo real (ou pelo menos com apenas uma reinicialização)?
  • Eu seria melhor servido por algo da prateleira?

Quaisquer outros pensamentos e sugestões serão bem-vindos.

Editar:

Só para esclarecer, li a página do FreeBSD no ZFS . Estou procurando sugestões de pessoas com experiência prática com uma configuração semelhante à que eu quero.

entristecer
fonte

Respostas:

13

Eu construo um servidor de arquivos FreeBSD doméstico usando o ZFS.

É um AMD X2 3200+ com 3 GB de RAM. Possui um PCI Express Gig-E. A unidade de inicialização é antiga, de 400 GB e eu tenho 4 unidades de 750 GB Seagte (uma com uma versão diferente do firmware, apenas no caso).

Iniciar o ZFS seria bom (tornaria a instalação mais simples), mas eu usei as instruções do ZFSOnRoot para configurar a unidade Root / OS com o ZFS (se todas as partições forem ZFS, não será necessário executar um fsck na inicialização para verificar os sistemas de arquivos UFS). O motivo pelo qual você deseja isso é que você pode configurar todas as suas partições (/ var, / usr, / tmp, etc.) com diferentes opções conforme necessário (como noatime e async para / usr / obj, o que acelerará o kernel compilações), mas todos compartilharão espaço de um pool comum. Em seguida, você pode configurar uma unidade de dados e fornecer a cada usuário uma partição própria (com cotações e configurações diferentes). Você pode tirar instantâneos (que são de baixo custo no ZFS).

My home server has a df that looks like:
/dev/ad0s1a           1.9G    744M    1.1G    41%    /
devfs                 1.0K    1.0K      0B   100%    /dev
dozer/data            1.8T     62G    1.7T     3%    /data
dozer/home            1.7T    9.6G    1.7T     1%    /home
dozer/home/walterp    1.9T    220G    1.7T    11%    /home/walterp
tank/tmp              352G    128K    352G     0%    /tmp
tank/usr              356G    4.4G    352G     1%    /usr
tank/var              354G    2.2G    352G     1%    /var

Em termos de desempenho, copiar arquivos é muito rápido. A única coisa que gostaria de observar é que tenho usado o ZFS nos sistemas FreeBSD AMD64 com 3-4 GB e funcionou bem, mas pela minha leitura, eu estaria preocupado em executá-lo em um sistema i386 com 2 GB ou mais. menos memória.

Eu fiquei sem portas SATA na placa-mãe, então não tentei adicionar nenhuma nova unidade. A configuração inicial era simples, um comando para criar o RAIDZ e, em seguida, o comando para criar / home, que foi formatado em segundos (IIRC). Ainda estou usando a versão mais antiga do ZFS (v6), por isso tem algumas limitações (não requer unidades de tamanho igual, mas, diferentemente de um Drobo, se você tivesse 3 unidades de 750 GB e 1 TB, o resultado final será como se você tivesse 4 unidades de 750 GB).

Uma das grandes razões pelas quais usei o ZFS com o RAIDZ foram as somas de verificação de ponta a ponta. O CERN publicou um documento que documentou um teste que eles fizeram, onde encontraram mais de 200 erros de leitura não corrigidos durante a execução de um teste de R / W durante um período de algumas semanas (espera-se que o ECC em unidades de varejo tenha uma falha a cada 12 TB de leitura). Eu gostaria que os dados no meu servidor estivessem corretos. Tive uma falha grave devido a uma falta de energia (alguém sobrecarregou o no-break conectando um aquecedor de ambiente), mas quando o sistema pode voltar, o ZFS voltou rapidamente, sem os problemas padrão do fsck.

Eu gosto, porque eu poderia adicionar o CUPS ao Samba para obter um servidor de impressão. Adicionei um cache DNS e posso adicionar outro software que eu queira (estou pensando em adicionar o monitoramento SNMP aos desktops da minha casa para medir o uso da largura de banda). Pelo que gastei no sistema, tenho certeza de que poderia comprar uma caixa NAS barata, mas não teria uma caixa Unix local de 64 bits para brincar. Se você gosta do FreeBSD, eu diria que vá com ele. Se você preferir o Linux, recomendo uma solução Linux. Se você não quer fazer nenhuma administração, é quando eu iria para a caixa NAS autônoma.

Na minha próxima rodada de atualizações de hardware, estou planejando atualizar o hardware e instalar a versão atual do FreeBSD, que possui o ZFS v13. V13 é legal porque eu tenho um disco de RAM com backup de bateria que posso usar para o log do ZIL (isso faz com que as gravações gritem). Ele também suporta o uso de SSDs para acelerar o servidor de arquivos (as especificações dos novos Sun File Servers são agradáveis ​​e as obtêm de um sistema ZFS que usa SSD para tornar o sistema muito rápido).

EDIT: (Não é possível deixar comentários ainda). Eu praticamente segui as instruções em http://www.ish.com.au/solutions/articles/freebsdzfs . A única grande mudança que existe no 7.X desde que essas instruções foram escritas foi a 7.2, e se você tiver mais de 2 GB, não deverá adicionar as três linhas a seguir no /boot/loader.conf:

vm.kmem_size_max="1024M"
vm.kmem_size="1024M"  
vfs.zfs.arc_max="100M"

As instruções também explicam como criar um espelho e como colocar o sistema novamente no modo de recuperação (montado com o ZFS). Depois de jogar suas instruções uma ou duas vezes, usei o manual de administração do ZFS da Sun http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf para entender melhor o que era o ZFS. Para criar meu repositório de dados, usei uma versão modificada do comando na página 91 para criar pools do ZFS. Sendo o FreeBSD, tive que fazer uma pequena alteração:

zpool create dozer raidz /dev/ad4 /dev/ad6 /dev/ad8 /dev/ad10

Onde ad4-ad10 foi encontrado ao executar dmesg | grep 'ata. * Master', esses são os nomes dos discos rígidos SATA no sistema que serão usados ​​para a partição de big data. Na minha placa-mãe, as três primeiras portas ata (ad0-3) onde as 4 portas PATA e, em seguida, como cada porta SATA é mestre, não há números antigos.

Para criar o sistema de arquivos, eu apenas fiz:

zfs create dozer/data
zfs set mountpoint=/data dozer/tank

O segundo comando é necessário porque eu desativei os pontos de montagem padrão para compartilhamentos.

Walter
fonte
Por acaso, você anotou tudo o que fez? E você estaria disposto a publicá-las? :)
luto
Ótimo post no FreeNAS + ZFS. Eu também tenho curiosidade sobre isso. Obrigado pela sua informação!
Osij2is
11

Introdução: finalmente construí meu sistema, e aqui estão minhas anotações, caso isso ajude outras pessoas.

Metas:

  • Crie uma caixa NAS doméstica que também possa funcionar como meu controle de origem e servidor da Web interno.
  • Mantenha o custo abaixo de US $ 1000

Especificações:

  • Deve ter pelo menos um terabyte de armazenamento
  • Deve ter redundância de dados (RAID ou algo semelhante)
  • Deve ser capaz de substituir meu servidor atual de controle de código-fonte antigo

Projeto:

  • FreeBSD 7.2 (eventualmente a ser atualizado para 8.0).
  • O SO está em sua própria unidade de inicialização, neste caso, uma unidade IDE
  • Os dados são armazenados em seis unidades SATA.

Usamos o ZFS como sistema de arquivos, pois ele recebeu críticas tão favoráveis. O ZFS exige que rodemos um sistema operacional de 64 bits e goste de muita memória; portanto, devo obter um mínimo de 4Gb

Hardware:

Software: FreeBSD 7.2 - 1 @ $ 0.00 http://www.freebsd.org/

Custo total: $ 874.81

Configuração de hardware: Uma construção básica do computador, com três problemas menores.

  1. O gabinete que comprei tinha slots para 6 discos rígidos e duas baias de 3,5. Presumi que o IDE pudesse caber em uma das 3,5 baias. Essa era uma suposição ruim e não havia uma maneira razoável de fazê-la funcionar. Fui e comprei um adaptador na Fry's por ~ $ 17,00, e funcionou bem.

  2. Os cabos Sata que comprei tinham conectores de 90 graus, o que foi legal, exceto com seis unidades, não havia como fazer o trabalho. Ao conectar um cabo, a parte inflexível do conector ficou pendurada no próximo disco rígido. Eu tive que ir ao Fry e por 5 cabos SATA regulares. Infelizmente, os que comprei em Newegg eram tão baratos que não vale a pena enviá-los de volta.

  3. O gabinete aponta a parte traseira dos discos rígidos para o lado do gabinete, e os cabos de energia da fonte de alimentação têm um conector rígido que se destaca na borda do gabinete. Isso não me permitiu deslizar a tampa lateral de volta no lugar. Eu tive que brincar um pouco para fazê-lo funcionar e, eventualmente, acabei com os dois cabos de alimentação modulares (eles têm quatro plugues SATA em cada) intercalados entre as unidades, para que o primeiro cabo alimentado 0, 2 e 4, e o segundo alimentou 1, 3 e 5. Isso permitiu flexão suficiente para que eu pudesse tirá-los do caminho.

Configuração do SO:

  1. Gravei o ISO do FreeBSD 7.2 em CD. Eu poderia ter usado o único DVD, mas não tinha nenhum por aí.

  2. Gravei o memtest86 + ( http://www.memtest.org/ ) em um CD.

  3. Ligou o computador recém-construído e entrou na BIOS para garantir que ele visse todas as 7 unidades e o DVD-ROM. Sim. Alterada a ordem de inicialização para tornar o CDROM primeiro.

  4. Insira o CD do memtest86 + no computador recém-construído, reinicie-o e deixe-o funcionar durante a noite. Aprovado sem erros.

  5. Instalando o FreeBSD 7.2, se você não estiver familiarizado com isso, recomendo a leitura do seguinte: http://www.freebsd.org/doc/en/books/handbook/install.html Faz um trabalho muito melhor em explicar o que fazer do que eu lata. Aqui estão minhas configurações específicas:

    • Instalação padrão
    • Usou toda a unidade IDE para o sistema operacional
      • usou o layout do sistema de arquivos padrão
      • deixou as 6 unidades SATA intocadas
    • Instalação do desenvolvedor sem o X-Windows, pois a caixa ficará sem cabeça
    • O sistema não é um cliente ou servidor NFS
    • FTP e inetd desativados
    • SSH permitido
    • Não foram adicionados pacotes (esses seriam adicionados posteriormente).
    • Adicionado um usuário
  6. Após instalar e reiniciar, notei que apenas 4 das 6 unidades SATA foram detectadas. Entrei no BIOS e, em Periféricos integrados, altere o tipo de OnChip SATA para AHCI e o tipo de porta 4/5 de OnChip SATA para "SATA" Configurações salvas e reinicializadas.

  7. Nesse ponto, o FreeBSD detectou todas as seis unidades como: ad4 ad6 ad8 ad10 ad12 ad14

  8. Obtenha as informações mais recentes do cvs usando csup: csup -g -L 2 stable-supfile Eu já havia editado o arquivo para usar o host: cvsup11.us.FreeBSD.org deixando todas as outras informações como estão.

  9. Reconstruiu e instalou o kernel e o mundo mais recentes, conforme descrito aqui: http://www.freebsd.org/doc/en/books/handbook/makeworld.html Customizou meu kernel (consulte ZFSNAS). Desabilitei um grande conjunto de dispositivos, pois nunca planejo usar SCSI, USB, PCMCIA, Serial, Paralela etc., adicionei o seguinte ao /etc/make.conf: CPUTYPE = Athlon64 CFLAGS = -O2 -fno-strict-aliasing -pipe make -j8 buildworld

Configuração do NAS:

  1. Crie o pool ZFS para nosso armazenamento: zpool create storage raidz2 ad4 ad6 ad8 ad8 ad10 ad12 ad14

  2. Crie o sistema de arquivos doméstico no armazenamento recém-criado:

    zfs create storage/home
    cp -rp /home/* storage/home
    rm -rf /home /usr/home
    zfs set mountpoint=/home storage/home
    
  3. edite /etc.rc/conf e adicione o seguinte:

    zfs_enable="YES"
    

    Isso monta os sistemas de arquivos ZFS na inicialização.

  4. Diretórios raiz, samba e forforce criados

    zfs create storage/root
    cp -rp /root/* storage/root
    rm -rf /root 
    zfs set mountpoint=/root storage/root
    zfs create storage/fileshare
    zfs create storage/perforce
    

    A menos que você precise de mais sistemas de arquivos no seu pool, você está praticamente pronto com a parte do ZFS. Veja o seguinte para obter mais detalhes: http://www.freebsd.org/doc/en/books/handbook/filesystems-zfs.html http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf

Portas instaladas:

/usr/ports/shells/bash
    make install
/usr/ports/editors/vim
    make install
/usr/ports/net/samba33
    make
    make install
    // Use all defaults un-check cups.
/usr/ports/devel/perforce
    make
    make install PERFORCE_PORT=XXXX PERFORCE_USER=p4user PERFORCE_GROUP=p4
    rm -rf /usr/local/perforce
    cd /storage/perforce/
    mkdir root
    mkdir log
    chown p4user:p4user *
    cd /storage
    chown p4user:p4user perforce 

Edited /usr/local/etc/perforce.conf as follows:
    #
    # Perforce FreeBSD configuration file
    #
    #
    # $FreeBSD: ports/devel/perforce/files/perforce.conf.in,v 1.3 2005/01/18 15:43:36 lth Exp $

    #
    # Perforce ROOT
    #
    PERFORCE_ROOT="/storage/perforce/root"

    #
    # Perforce user (it is recommended to run p4d as a non-root user)
    #
    PERFORCE_USER="p4user"

    #
    # p4d/p4p port (default: 1666)
    #
    PERFORCE_PORT="XXXX"

    #
    # p4p cache directory
    #
    PERFORCE_PROXY_CACHE="/usr/local/perforce/cache"

    #
    # p4p target server (default: perforce:1666)
    #
    PERFORCE_PROXY_TARGET="perforce:1666"

    #
    # p4d options (see man p4d)
    #
    PERFORCE_OPTIONS="-d -p $PERFORCE_PORT -v server=1 -L /storage/perforce/logs/p4d.log"

    #
    # Uncomment this line to have the server started automatically
    #
    PERFORCE_START=yes

Usuários adicionados:

user1
user2

Grupos criados:

sambashare
    Added user1 and user2 as members

chgrp sambashare /storage/fileshare
chmod 775 /storage/fileshare
chmod g+s /storage/fileshare

Configuração do Samba:

Samba configuration file:
#################
    [global]
       workgroup = USERLAN
       server string = ZFS NAS
       security = user
       hosts allow = 192.168.1. 127.
       log file = /usr/local/samba/var/log.%m
       max log size = 50
       passdb backend = tdbsam
       dns proxy = no

    [user1share]
       comment = user1 share
       path = /storage/fileshare
       valid users = user1 user2
       public = no
       writable = yes
       printable = no
       create mask = 0765
#################

pdbedit -a -u user1 
    # followed prompts
pdbedit -a -u user2 
    # followed prompts
entristecer
fonte
Resposta fantástica! Voto a favor ... verifique!
Mei
5
  • É possível inicializar a partir do ZFS? (Eu gostaria?)

Não vejo motivo para você querer, acho que o suporte ao Snapshot é maduro o suficiente no OpenSolaris, para que você possa voltar para uma versão mais antiga e inicializá-la (buth, na verdade, é apenas um palpite).

  • Quão fácil é adicionar uma unidade?

Adicionar como expandir uma piscina listrada? Basta adicionar uma unidade à piscina, é isso. Considere as implicações da sua próxima pergunta.

  • Quão bem ele lida com unidades de tamanhos diferentes?

Você pode usá-lo como uma faixa e dizer ao ZFS para manter n cópias de um arquivo. Então você pode usar a disponibilidade total de armazenamento que você possui e ainda obter redundância decente

  • Você pode adicionar novas unidades em tempo real (ou pelo menos com apenas uma reinicialização)?

Substituindo dispositivos em um pool de armazenamento Acho que esta é a solução recomendada, a maneira mais fácil de descobrir o quão bem isso funciona no FreeBSD é provavelmente experimentá-lo.

  • Eu seria melhor servido por algo da prateleira?

Você já considerou o FreeNAS (Roadmap) 0.70 prestes a ser lançado e suportará o ZFS.

Você economizará o aborrecimento de toda a estrutura e obterá uma GUI relativamente agradável de usar gratuitamente com ela.

Martin M.
fonte
Estou usando o FreeNAS 0.7RC1, e tem sido muito fácil de configurar com o ZFS.
Joseph
3

Eu tenho servidores com FreeBSD + ZFS (em 7.2-STABLE e 8.0-CURRENT), não em produção.

A inicialização do ZFS é descrita aqui http://lulf.geeknest.org/blog/freebsd/Setting_up_a_zfs-only_system/

Adicionar unidades dinamicamente é tão fácil quanto digitar "zpool add mypool da7"; a nova unidade é utilizável logo após isso; você também pode adicionar várias unidades em tarja, espelho, raidz (raid-5 aprimorado) ou raidz2 (raid-6 aprimorado)

Unidades de tamanhos diferentes podem ser colocadas na piscina, mas não podem ser usadas em mirror / stripe / raid (se bem me lembro, apenas o menor espaço em disco será utilizável)

(Aberto) Solaris tem suporte para ZFS imediatamente

SaveTheRbtz
fonte
2

Há uma boa discussão sobre a criação de um NAS ZFS doméstico na ArsTechnica.

quux
fonte