Usando UDF em uma unidade flash USB

75

Depois de não conseguir copiar um arquivo maior que 4G para a minha unidade flash USB 8G , eu o formatei como ext3. Enquanto isso estiver funcionando bem para mim até agora, causará problemas se eu quiser usá-lo para copiar arquivos para alguém que não usa Linux.

Em vez disso, estou pensando em formatá-lo como UDF , que espero que seja lido (e possivelmente até escrito) nos três sistemas operacionais mais populares (Windows, MacOS e Linux), sem a necessidade de instalar drivers extras . No entanto, pelo que eu já encontrei na Web, parece haver várias pequenas dicas relacionadas a quais parâmetros são usados ​​para criar o sistema de arquivos, o que pode reduzir a compabilidade (mas a maioria das páginas que encontrei são sobre mídia ótica, não USB flash unidades).

Eu gostaria de saber:

  • Qual utilitário devo usar para criar o sistema de arquivos? (Até agora eu encontrei mkudffse genisoimage, e mkudffsparece a melhor opção.)
  • Quais parâmetros devo usar com o utilitário escolhido para máxima compabilidade?
  • Qual é a compatibilidade com as versões mais comuns desses três sistemas operacionais UDF?
  • Usar o UDF é realmente a melhor ideia? Existe outro sistema de arquivos com melhor compatibilidade, sem restrições problemáticas, como o limite de tamanho do arquivo FAT32 4G, e sem a necessidade de instalar drivers especiais em todos os computadores que tocam nele?
CesarB
fonte
3
Pergunta relacionada: serverfault.com/questions/55089/…
CesarB

Respostas:

57

Primeiro, zerei completamente a unidade antes de criar o sistema de arquivos UDF com:

dd if=/dev/zero of=/dev/sdx bs=512

Isso é para evitar quaisquer superblocos restantes ou outros metadados que possam confundir a detecção do tipo de sistema de arquivos dos sistemas operacionais (pelo menos, zerar o primeiro setor para aniquilar a tabela de partição; os primeiros setores não são usados ​​pelo UDF e um restante) tabela de partição pode realmente confundir as coisas). Você também pode usar a count=1opção no comando dd, para zerar mais rapidamente apenas os primeiros 512 bytes da unidade (onde o MBR geralmente está localizado), embora isso não tenha sido testado.

Para criar o sistema de arquivos, o comando que usei foi:

mkudffs --media-type=hd --blocksize=512 /dev/sdx

mkudffsO comando ficará disponível nas distribuições Linux baseadas no Debian (como o Ubuntu) após a instalação de um udftoolspacote:

sudo apt-get install udftools

O tamanho do bloco padrão mkudffsé 2048, o que é errado para uma unidade flash USB (que usa setores de 512 bytes). Como o tamanho do bloco é usado para encontrar os metadados do sistema de arquivos, o uso de um tamanho de bloco incorreto pode fazer com que ele não seja reconhecido como um sistema de arquivos UDF (já que a âncora não estará onde o driver do sistema de arquivos está esperando). Observe que a mkudffspágina de manual está errada; 512 é um valor válido para o tamanho do bloco (e o código o aceita explicitamente).

Eu também usei a unidade inteira em vez de uma partição; isso deve ser mais compatível.

O resultado dos meus testes até agora:

  • Linux com o kernel mais recente (2.6.31, do Ubuntu 9.10): funciona.
  • Linux com um kernel mais antigo: precisa da bs=512opção mount, porque usou incorretamente 2048 em vez do tamanho do setor do dispositivo (corrigido no commit 1197e4d ).
  • Windows Vista: funciona.
  • Um Mac novinho em folha: funciona.
  • Windows XP: consegue ler bem, mas fornece "acesso negado" ao tentar escrever; também parece pensar que o disco está cheio.

Embora ainda não tenha tentado criar um arquivo maior que 4G, não vejo razão para que ele não funcione.

Dado que funcionou perfeitamente em todos os sistemas operacionais recentes (apenas é necessário montar manualmente no Linux, que não será mais necessário assim que o Ubuntu 9.10 e Fedora 12 forem lançados), e funcionou somente leitura no Windows XP (o que foi uma surpresa para mim; esperava que não reconhecesse o sistema de arquivos), usar UDF em vez de FAT32 ou NTFS em grandes unidades flash USB parece uma boa idéia.

CesarB
fonte
1
como você formatou / particionou a unidade? Eu zerei minha unidade USB de 32 GB, usando dd if=/dev/zero of=/dev/sdb bs=1M, o que a deixa sem nenhuma tabela de partição.
Romeovs
4
@romeovs: eu não particionei a unidade. Esse é o objetivo de zerá-lo, remover a tabela de partições e as sobras antigas do sistema de arquivos e colocar o sistema de arquivos UDF em toda a unidade não particionada. Criar uma tabela de partição só correria o risco de confundir coisas.
CesarB
3
Não funcionou para mim com um disco rígido externo SeaGate FreeAgent Desktop USB 2.0 de 500 GB (não tenho certeza se deveria, pois esse segmento trata de unidades Flash). O Windows 7 sempre mostrava a unidade como "não alocada" no utilitário Gerenciamento de Disco. Eu tentei várias combinações de opções diferentes.
Adam Monsen
2
Muito obrigado pelo acompanhamento. É raro, se não a primeira vez, que eu vejo uma pergunta inteligente que é elaboradamente respondida pelo OP após alguns dias / semanas de teste. Bom trabalho, obrigado!
Luc
1
Veja também o script de Pieter Wuille que automatiza o processo de criação de UDF e cria uma tabela de partição para melhor compatibilidade. Publiquei como uma solução alternativa .
Dolmen
7

CesarB fez um ótimo trabalho ao chegar ao cerne da questão. Uma coisa que não pode ser sublinhada o suficiente é a importância de usar o tamanho de bloco adequado ao formatar o UDF.

Inspirado no post de CesarB (e em outras pesquisas / testes), escrevi um script para automatizar o processo de formatação em UDF - usando o tamanho do setor detectado corretamente. Veja format-udf no GitHub . Recursos notáveis:

  • Formata uma unidade de bloco (disco rígido ou unidade Flash) em Universal Disk Format (UDF)
    • Revisão UDF 2.01 usada para compatibilidade máxima
    • Os primeiros 4096 setores são zerados para apagar qualquer MBR existente (necessário para a detecção UDF adequada)
  • O sistema de arquivos resultante pode ser lido / gravado em várias famílias de sistemas operacionais (Windows, OS X e Linux)
  • É executado em qualquer sistema operacional com um ambiente Bash

Por causa do último ponto, esse script que escrevi não pode ser usado no Windows. No entanto, o script será executado no OS X e Linux. Depois disso, o Windows poderá detectar magicamente a unidade UDF recém-formatada.

Para responder diretamente às perguntas postadas, format-udf irá:

  • escolha a ferramenta apropriada para formatação com base no sistema operacional e no ambiente
  • detecta e preenche automaticamente todos os parâmetros necessários para a formatação
  • maximizar a compatibilidade do sistema operacional (consulte a página do GitHub para obter o gráfico de compatibilidade)
  • produzir o conjunto máximo de recursos (e limitações mínimas) que o solicitante está procurando
j0nam1el
fonte
1
Dei uma olhada no seu utilitário format-udf no Github e tenho uma pergunta sobre isso. O script detecta o tamanho do bloco físico da unidade. Você tem certeza de que o parâmetro Linux chama "tamanho do setor físico (bloco)" e não "tamanho do setor lógico" é o correto a ser usado? Físico e lógico pode significar muitas coisas. O que hdparmchama de "Tamanho do setor lógico" é a unidade de endereçamento usada pelo protocolo SATA, enquanto "Tamanho do setor físico" é uma coisa interna da unidade. Para mim, faz mais sentido que os "blocos físicos" na especificação UDF realmente signifiquem "blocos lógicos" do Linux.
Johan Myréen
você é perfeito, @ JohanMyréen. Convido você a participar da discussão sobre esse mesmo tópico no GitHub. github.com/JElchison/format-udf/issues/13 Há uma mudança iminente ao longo das linhas da sua pergunta, enquanto se aguarda a testes adicionais no Windows 7 e 10.
j0nam1el
1
format-udf é muito legal. Apenas testado em Linux, e pode ler / gravar o disco formatado no OS X e no Windows 10.
mivk
Embora a capacidade de "executar em qualquer sistema operacional com bash" tenha algum apelo, seria ainda melhor implementar a mesma abordagem mkudffsdiretamente; Quero dizer adicionando uma nova --best-block-sizeopção para mkudffs.
Março
3

Eu me lembro de ter feito isso, o problema que encontrei é que a versão linux que eu havia montado era somente leitura, pois o driver não havia sido construído para r / w. Funcionou no Windows, e acho que Mac.

Sim, é difícil encontrar uma boa solução. Por um tempo, tive uma unidade externa com uma partição fat32 que possuía drivers para win e mac, uma partição mac e uma grande partição ext3. Funcionou, mas significava instalar drivers. O truque foi que ele também era inicializável em um mac (fw e usb), você precisa deixar espaço e fazer algumas anotações e adicionar partições via linha de comando e também uma tabela de partição mac.

O mundo precisa de um sistema de arquivos gratuito e utilizável por tudo. O ZFS seria uma boa escolha. :-)

Ronald Pottol
fonte
Seria bom ter o ZFS, mas confundiria muita gente. Também é um pouco exagerado para a mídia externa, você não acha? Mais adequado para servidores de arquivos gigantes, pelo que sei.
Mike Cooper
2
Bem, o ZFS verifica a soma e a recuperação de erros, o que faz muito sentido para itens de consumo inadequados. :-D Todos nós estamos armazenando o suficiente nos dias de hoje que a podridão de bits acabará comendo alguma coisa (veja o estudo que a Sun fez sobre o problema que levou ao ZFS, observe também a taxa de erro não detectada para a codificação em HD). Precisamos de um fs real que tudo possa usar, e o fatX não é. Ainda não está aqui, realmente.
Ronald Pottol 23/09/09
O ZFS não funcionam no Linux
Ignis
1

Para obter compatibilidade máxima, você deve usar mkudffs do projeto udftools pelo menos na versão 2.0. Não são necessários parâmetros especiais, tudo é detectado automaticamente.

Existem três grandes restrições:

  1. Os sistemas Microsoft Windows não reconhecem o disco rígido não removível se não tiver a tabela de partição MBR ou GPT.

  2. Os sistemas Apple Mac OS X não reconhecem o sistema de arquivos UDF no disco particionado.

  3. Provavelmente, todos os sistemas (exceto os kernels recentes do Linux) não reconhecem o sistema de arquivos UDF se o tamanho do bloco UDF não corresponder ao tamanho do setor lógico do disco.

Os mkudffs de ferramentas desde a versão 2.0 lidam com todas as 3 restrições. Ao formatar discos rígidos não removíveis, ele cria uma tabela MBR "falsa" que inicia no setor 0 e abrange todo o disco. Portanto, o sistema de arquivos UDF pode ser lido da primeira partição (necessária para o Microsoft Windows) ou do disco inteiro (necessário para o Apple Mac OS X). Veja a página do manual mkudffs 2.0 para mais detalhes.

Pali
fonte
0

NTFS, com o NTFS-3G, você pode escrever usando o Linux e dar uma olhada em http://macntfs-3g.blogspot.com/ no seu Mac.

user10547
fonte
4
Isso parece envolver drivers extras para o Mac.
Mike Cooper
Se ele não quiser usar o FAT, ele está preso e o NTFS-3G já funciona no Mac. Ele precisa do que eu liguei para gravação.
User10547
4
Um pequeno problema é que não é o meu Mac. Prefiro não ter que instalar um driver nos computadores de outras pessoas.
CesarB
-1

Existem drivers para Windows (e Mac) que podem acessar partições EXT3, para que você possa formatá-lo para EXT3 e usá-lo (com drivers) em qualquer lugar. Outra maneira seria usar um arquivador para armazenar o arquivo grande em dois ou mais arquivos de até 4 GB cada. Dessa forma, você pode usar o sistema de arquivos FAT32, que é universal. No computador host, é necessário extrair o arquivo morto para usá-lo, mas é uma maneira de fazê-lo sem drivers. Use um arquivador de formato RAR, pois ele funciona no Windows, Linux, Mac, embora eu ache que um formato ZIP também funcione. Mas eu iria com os motoristas. Uma vez instalado, você pode fazer qualquer coisa sem restrições. No PC, usei o Ext2Fsd para acesso completo EXT2, EXT3 e EXT4 e o Macdrive para acesso completo no formato MacOS. Certamente existem ferramentas semelhantes para Linux e MacOS, para acessar totalmente partições NTFS etc. Se você só precisa de acesso de leitura, não precisa de drivers, o Linux e o MacOS suportam a leitura de partições NTFS, então formate o USB como NTFS! Se todos esses computadores estiverem na mesma rede, as coisas serão mais fáceis! Faça o USB no formato e compartilhe-o na rede. Outros computadores não devem ter problemas para acessá-lo!

spapakons
fonte
2
-1 porque a resposta nem sequer menciona UDF!
Dolmen