Estou usando meu Raspberry Pi como servidor de arquivos de música, mas não estou feliz com isso. A configuração atual usa um samba
servidor no meu RPi com uma unidade USB WD Passport formatada como vfat
. Isso serve como a biblioteca para o meu sistema de música Sonos: o Sonos monta a unidade e lista todas as músicas que encontra em um menu para eu escolher.
A interface do Sonos parece funcionar sem problemas com o servidor RPi Samba na maioria das vezes. No entanto, não funciona tão bem com o meu MacOS. Eu uso meu Mac para manter a biblioteca de música e há dois problemas principais:
- as permissões do usuário devem ser alteradas através da configuração do Samba para permitir exclusões e adições na biblioteca de músicas
- navegar no compartilhamento de música Samba no meu RPi no aplicativo Finder do Mac revela inúmeras "omissões e artefatos", enquanto navegar em uma pasta com exatamente o mesmo conteúdo no NetgearNAS com CIFS é impecável; veja a figura abaixo.
Um amigo usa um NetgearNAS como servidor de arquivos para seu sistema Sonos. Funciona de forma muito confiável e os "artefatos" não aparecem no Finder. Seu NetgearNAS está configurado para usar CIFS
(e apenas CIFS). Eu gostaria de experimentar o CIFS no meu RPi, mas minha pesquisa até agora só aumentou minha confusão.
Por fim, minhas perguntas:
SMB e CIFS parecem estar intimamente relacionados, mas eles são "a mesma coisa"? Se não, quais são as diferenças?
Algumas fontes se referem ao CIFS como um sistema de arquivos (no sentido de que
ext4
,FAT32
, etc. são sistemas de arquivos), enquanto outros se referem a ele como um protocolo de rede. Como não há extensão CIFS paramkfs
, as referências que se referem ao CIFS como um sistema de arquivos parecem enganosas - ou estou perdendo alguma coisa?Se o CIFS for apenas um protocolo de rede, ele está limitado a um sistema de arquivos específico?; ou seja, pode-se usar FAT32 ou ext4 com CIFS? O sistema de arquivos usado com CIFS afeta seu uso como um protocolo de servidor multiplataforma?
vfat é um sistema de arquivos muito limitado, é completamente inadequado para qualquer uso em rede e qualquer ambiente multiusuário (é o antigo sistema de arquivos MS-DOS). Resumindo, não use VFAT para nada além de pen drives USB, para máxima compatibilidade.
Basicamente, todos os seus problemas vêm do fato de que o MacOS tenta armazenar atributos estendidos, direitos de arquivo, etc. através de SMB/CIFS para VFAT que não suporta nada disso, nem suporta nomes de arquivos muito longos ou arquivos UTF-8 nomes, ou qualquer coisa de interesse para usuários modernos.
Basta usar um sistema de arquivos Linux real e normal em sua unidade USB (ext4, xfs) e tudo ficará bem e elegante. Isso certamente resolverá os problemas com arquivos ausentes, direitos e permissões errados, artefatos etc.
Sobre as outras perguntas:
SMB e CIFS são nomes diferentes para a mesma coisa, o Microsoft Network Filesystem ( protocolo Server Message Block ). Há alguma confusão aqui, porque CIFS realmente foi a primeira versão dele (SMB versão 1.0), e foi substituído por versões mais recentes (SMB v. 2.0, 3.0, 3.1, ...). No entanto, no Linux, por algum motivo, a primeira versão foi chamada de 'smbfs', e as mais recentes 'cifs'. De qualquer forma, hoje em dia, tanto no Linux quanto no MacOS, isso não faz diferença, ambos são intercambiáveis.
SMB/CIFS é um sistema de arquivos de rede . Ele não tem nenhuma relação direta com um sistema de arquivos em bloco . É um sistema de arquivos no sentido de que fornece uma abstração de arquivos e seus modos de E/S comuns; no entanto, você pode usar qualquer sistema de arquivos de rede (NFS, SMB, WebDAV, AFP...) para compartilhar dados de qualquer sistema de arquivos de bloco (FAT32, ext4, HFS+, xfs, NTFS, ZFS...).
Diferentes sistemas de arquivos de bloco fornecem recursos diferentes (IO direto, ACLs POSIX, ACLs do Windows, atributos estendidos, fluxos de arquivos, arquivos "ocos", controle de versão de arquivo, controle de versão de metadados, subvolumes, instantâneos de volume...). Diferentes sistemas de arquivos de rede também fornecem recursos diferentes. A maneira como os recursos do sistema de arquivos de rede são mapeados para o sistema de arquivos de bloco subjacente varia muito e é uma fonte inesgotável de confusão, dor e bugs.
Por exemplo, o CIFS, originário do Windows, por padrão usa ACLs do Windows, que infelizmente não mapeia individualmente as ACLs POSIX da maioria dos sistemas de arquivos Unix/Linux. Atualmente, o Samba contorna isso usando atributos estendidos para armazenar ACLs reais do Windows, no entanto, se o sistema de arquivos de bloco subjacente não suportar xattr , você terá problemas.
Deixe-me tentar responder a algumas de suas perguntas.
Primeiro CIFS é uma versão do protocolo SMB. Veja, por exemplo, a página wiki do SMB .
A segunda pergunta era sobre sistema de arquivos versus protocolo de rede. CIFS/SMB são protocolos de rede. A coisa com o sistema de arquivos vem apenas do mundo linux: você pode
mount
compartilhar como qualquer outro sistema de arquivos (assumindo os direitos) para poder acessar os arquivos de forma transparente. Então você tem ummount.cifs
programa que trata do processo de montagem deste protocolo específico.De acordo com sua terceira pergunta: Nenhum protocolo de rede está relacionado de forma alguma ao sistema de arquivos subjacente. Ele apenas especifica como os dados são enviados pela linha (de forma abstrata). Os dados podem vir de um disco rígido diretamente (também conhecido como sistema de arquivos) ou podem ser gerados dinamicamente (pense no que aconteceria se você exportasse suas pastas
/proc
ou ...)./sys
No entanto, o protocolo foi projetado com um determinado caso de uso em mente. Este era o sistema FAT, tanto quanto eu sei. Extensões foram feitas para permitir direitos estendidos também no Linux/Unix. Aqui estou um pouco cansado do que é possível e do que é implementado (especialmente porque o servidor e o cliente devem encontrar uma versão de protocolo máxima comum). Diferentes versões de software nas várias máquinas podem entrar em jogo aqui, mas não tenho certeza.
Em vez de fornecer informações básicas que precisam de uma investigação mais aprofundada, abordarei alguns de seus problemas declarados:
Suas "omissões e artefatos" são devido a problemas de página de código/conjunto de caracteres. Isso acontece apenas para caracteres não-ascii, certo? Não sei como está configurado no momento. Você pode verificar primeiro se os arquivos no dispositivo USB estão escritos com nomes corretos no sistema de arquivos? Em seguida, verifique se o RPi também pode ler os arquivos (sem CIFS, vá até lá usando
ssh
ou monitor/teclado conectado diretamente).Diferentes sistemas de arquivos subjacentes suportam diferentes conjuntos de caracteres em nomes de arquivos e, portanto, o SMB pode ser configurado para tratar os nomes de arquivos de maneira diferente. Este é um recurso para dar suporte ao maior número possível de sistemas de arquivos subjacentes (consulte Recursos
man smb.conf
). Isso também pode ser um problema de montagem em seu cliente, onde a codificação errada é assumida. Portanto, comece construindo o sistema e verificando cada etapa.Em relação aos problemas de permissão de usuário que você mencionou, você precisa de acesso autenticado (usuário + senha), configurar o servidor samba/cifs para usar o usuário padrão com permissões padrão ou seu armazenamento é o problema. Novamente de baixo para cima:
vfat
, onde nenhum dono está armazenado. Assim, o kernel do Linux aplica um usuário aos arquivos dependendo das opções de montagem.uid
,gid
,umask
, potencialmentedmask
efmask
). Vejaman mount
.create mask
anddirectory mask
da configuração do samba (man smb.conf
) pode ser suficiente. Se não, você deve descrever seus problemas com mais profundidade.