Bash script para formatar um dispositivo de bloco (disco rígido ou unidade flash) no UDF. A saída é uma unidade que pode ser usada para ler/escrever em várias famílias de sistemas operacionais: Windows, MacOS e Linux. Este script deve ser capaz de executar no macOS ou no Linux.
Para o usuário avançado, o formato-AUDF também é capaz de formatar uma única partição existente, sem modificar a tabela de partição. Cuidado que o uso desse método tornará a partição UDF recém -formatada inutilizável no macOS (mas ainda utilizável no Linux e no Windows). (Veja o #24 para advertências.) Devido a essa limitação, a recomendação é formatar o dispositivo inteiro.
O formato-AUDF foi criado para abordar algumas peculiaridades específicas do OS que impedem que um dispositivo UDF ingênuo de formação ingênua trabalhe em vários sistemas operacionais. Aqui estão alguns dos fatores complicadores, que o formato-AUDF visa abstrair:
À primeira vista, essas restrições parecem estar em conflito parcial. A solução, como sugerido por Pieter, é colocar uma tabela de partição falsa (via MBR) no primeiro bloco da unidade, que lista uma única partição de disco inteiro. Isso funciona porque o UDF (talvez intencionalmente) não utiliza o primeiro bloco. Infelizmente, não houve uma maneira fácil de fazer isso, enquanto faz malabarismos com todas as outras variáveis (como o tamanho do bloco lógico do dispositivo). O formato-AUDF grava um MBR tão falso para obter maior compatibilidade no Windows. Se não é isso que você deseja, você pode desativar o MBR com -p none .
O objetivo deste projeto é fornecer acesso a um sistema de arquivos de plataforma cruzada com recursos modernos , de tal maneira que é:
Nem todos os sistemas operacionais suportam UDF. As tabelas a seguir detalham o suporte ao sistema operacional para UDF. Os dados foram adaptados em https://en.wikipedia.org/wiki/universal_disk_format#compatibility (conforme recuperado em 2017-06-16).
Ambas as leituras/gravação são suportadas, a menos que listado de outra forma abaixo.
| Sistema operacional | Somente leitura | Observação |
|---|---|---|
| Windows XP, servidor 2003 | Somente leitura | Escreva suporte disponível com utilitários de terceiros |
| Windows Vista, 7, 8, 10 | Referido pela Microsoft como "sistema de arquivos ao vivo"; Requer partição falsa de disco completo | |
| Mac OS 9 | ||
| Mac OS X 10.5 a 10.11 | ||
| MacOS 10.12+ | ||
| Linux 2.6+, 3.x | Revisões UDF 2.01 e antes de ler/gravar. Após o UDF Revisão 2.01, somente leitura. | |
| AIX 5.2, 5.3, 6.1 | ||
| Beos, Magnoft Zeta, Haiku | ||
| Dosbox | ||
| Ecomstation, OS/2 | Drivers de taxa adicional no OS/2 | |
| Netbsd 5.0 | ||
| Solaris 8, 9, 10 |
| Sistema operacional | Observação |
|---|---|
| Windows 95 OSR2+, 98 | Os utilitários incluem DLA e incd |
| Windows 2000, eu |
| Sistema operacional | Observação |
|---|---|
| Dos, Freedos, Windows 3.11 ou mais antigo | Os sistemas de arquivos que possuem uma estrutura de compatibilidade com atraso ISO9660 pode ser lida |
Nem todos os sistemas operacionais suportam unidades 4K (formato avançado). Se você operando o sistema suporta UDF, mas não a sua unidade 4K, você ainda poderá encontrar problemas usando o formato-AUDF.
As tabelas a seguir detalham o suporte ao Windows para unidades em 4K. Os dados foram adaptados da Política de Suporte da Microsoft para os discos rígidos do setor 4K no Windows (conforme recuperado em 2017-06-16). Os sobrepostos nesta tabela estão testando os resultados da comunidade de formato-AUDF. (Agradecimentos especiais a @pali por seus testes no XP.)
| Tamanho / os | 512 bytes nativos | 512 Emulação (Também conhecido como "512e") | 4K nativo (Também conhecido como "4kn") |
|---|---|---|---|
| Tamanho do bloco lógico | 512 bytes | 512 bytes | 4096 bytes |
| Tamanho do bloco físico | 512 bytes | 4096 bytes | 4096 bytes |
| Arquivo UDF máximo Capacidade do sistema | 2 TIB | 2 TIB | 16 TIB |
| Windows XP | Suportado; Funciona | Não suportado; Não funciona | Não suportado; Não funciona |
| Windows XP Pro X64, Servidor 2003, Servidor 2003 R2 | Suportado; Provavelmente funciona, mas não testado | Não suportado | Não suportado |
| Windows Vista, Servidor 2008 | Suportado; Provavelmente funciona, mas não testado | Suportado; Provavelmente funciona, mas não testado | Não suportado |
| Windows 7, Servidor 2008 R2 | Suportado; Provavelmente funciona, mas não testado | Suportado; Provavelmente funciona, mas não testado | Não suportado |
| Windows 8, Servidor 2012 | Suportado; Provavelmente funciona, mas não testado | Suportado; Provavelmente funciona, mas não testado | Suportado; Provavelmente funciona, mas não testado |
| Windows 8.1, Servidor 2012 R2 | Suportado; Provavelmente funciona, mas não testado | Não suportado | Não suportado |
| Windows 10, Servidor 2016 | Suportado; Provavelmente funciona, mas não testado | Não suportado | Suportado; Provavelmente funciona, mas não testado |
Se você conduziu testes e gostaria de atualizar esta tabela para beneficiar futuros usuários do formato-AUDF, envie uma solicitação de tração. Inclua um link para seus dados brutos ou resultados de teste.
printfxxdblockdev , ioregblockdev , diskutillsblk , diskutilumount , diskutilmkudffs , newfs_udfPara instalar os pré -requisitos necessários no Ubuntu:
sudo apt-get install udftools coreutils vim-common
Format-UDF é um script independente. Basta copiar o formato-udf.sh para um diretório de sua escolha. Não se esqueça de torná -lo executável:
chmod +x format-udf.sh
Bash script to format a block device (hard drive or Flash drive) in UDF.
The output is a drive that can be used for reading/writing across multiple
operating system families: Windows, macOS, and Linux.
This script should be capable of running in macOS or in Linux.
Usage: ./format-udf.sh [-b BLOCK_SIZE] [-f] [-p PARTITION_TYPE] [-w WIPE_METHOD] device label
./format-udf.sh -v
./format-udf.sh -h
-b BLOCK_SIZE
Block size to be used during format operation.
If absent, defaults to value reported by blockdev/diskutil.
This is an expert-only option. Please consult the README for details.
-f
Forces non-interactive mode. Useful for scripting.
Please use with caution, as no user confirmation is given.
-h
Display help information and exit.
-p PARTITION_TYPE
Partition type to set during format operation.
Currently supported types include: mbr, none
mbr - Master boot record (default)
none - Do not modify partitions
If absent, defaults to 'mbr'.
See also:
https://github.com/JElchison/format-udf#why
-v
Display version information and exit.
-w WIPE_METHOD
Wipe method to be used before format operation.
Currently supported types include: quick, zero, scrub
quick - Quick method (default)
zero - Write zeros to the entire device
scrub - Iteratively writes patterns on device
to make retrieving the data more difficult.
Requires 'scrub' to be executable and in the PATH.
See also http://linux.die.net/man/1/scrub
If absent, defaults to 'quick'.
Note: 'zero' and 'scrub' methods will take a long time.
device
Device to format. Examples:
* /dev/sdx (Linux, where 'x' is a letter) or
* /dev/diskN (macOS, where 'N' is a number)
label
Label to apply to formatted device.
Example: ./format-udf.sh /dev/sdg "My UDF External Drive"
No Ubuntu:
user@computer:~$ ./format-udf.sh /dev/sdg "My UDF External Drive"
[+] Validating arguments...
[+] Testing dependencies...
[+] Looking for drive detail tool... using /sbin/blockdev
[+] Looking for drive listing tool... using /sbin/blockdev
[+] Looking for drive info tool... using /bin/lsblk
[+] Looking for drive summary tool... using /sbin/blkid
[+] Looking for unmount tool... using /bin/umount
[+] Looking for UDF tool... using /usr/sbin/mkudffs
[+] Detecting logical block size...
[sudo] password for user:
[*] Detected logical block size of 512
[+] Validating detected logical block size...
[+] Detecting physical block size...
[*] Detected physical block size of 512
[+] Validating detected physical block size...
[+] Validating file system block size...
[*] Using file system block size of 512
[+] Detecting total size...
[*] Detected total size of 8019509248
[+] Validating detected total size...
[+] Gathering drive information...
/dev/sdg: LABEL="Old Drive" UUID="4843-D1BD" TYPE="vfat"
RO RA SSZ BSZ StartSec Size Device
rw 256 512 512 0 8019509248 /dev/sdg
The above-listed device (and partitions, if any) will be completely erased.
Type 'yes' if this is what you intend: yes
[+] Unmounting device...
umount: /dev/sdg: not mounted
[+] Zeroing out first chunk of device...
4096+0 records in
4096+0 records out
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.450716 s, 4.7 MB/s
[+] Formatting /dev/sdg ...
filename=/dev/sdg
label=My UDF External Drive
uuid=5e4924cc17b50769
blocksize=512
blocks=15663104
udfrev=2.01
start=0, blocks=64, type=ERASE
start=64, blocks=13, type=VRS
start=77, blocks=19, type=ERASE
start=96, blocks=16, type=MVDS
start=112, blocks=16, type=ERASE
start=128, blocks=16, type=LVID
start=144, blocks=112, type=ERASE
start=256, blocks=1, type=ANCHOR
start=257, blocks=15662590, type=PSPACE
start=15662847, blocks=1, type=ANCHOR
start=15662848, blocks=96, type=ERASE
start=15662944, blocks=16, type=RVDS
start=15662960, blocks=143, type=ERASE
start=15663103, blocks=1, type=ANCHOR
[+] Writing fake MBR...
16+0 records in
16+0 records out
16 bytes copied, 0.0037039 s, 4.3 kB/s
2+0 records in
2+0 records out
2 bytes copied, 3.7193e-05 s, 53.8 kB/s
[+] Successfully formatted /dev/sdg: UUID="5e4924cc17b50769" LABEL="My UDF External Drive" TYPE="udf" PTTYPE="dos"
Please disconnect/reconnect your drive now.
No macOS:
computer:~ user$ ./format-udf.sh /dev/disk4 "My UDF External Drive"
[+] Validating arguments...
[+] Testing dependencies...
[+] Looking for drive detail tool... using /usr/sbin/ioreg
[+] Looking for drive listing tool... using /usr/sbin/diskutil
[+] Looking for drive info tool... using /usr/sbin/diskutil
[+] Looking for drive summary tool... using (none)
[+] Looking for unmount tool... using /usr/sbin/diskutil
[+] Looking for UDF tool... using /sbin/newfs_udf
[+] Detecting logical block size...
[*] Detected logical block size of 512
[+] Validating detected logical block size...
[+] Detecting physical block size...
[+] Validating file system block size...
[*] Using file system block size of 512
[+] Detecting total size...
[*] Detected total size of 8019509248
[+] Validating detected total size...
[+] Gathering drive information...
/dev/disk4 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *8.0 GB disk4
1: Windows_FAT_32 Old Drive 8.0 GB disk4s1
The above-listed device (and partitions, if any) will be completely erased.
Type 'yes' if this is what you intend: yes
[+] Unmounting device...
Password:
Unmount of all volumes on disk4 was successful
[+] Zeroing out first chunk of device...
4096+0 records in
4096+0 records out
2097152 bytes transferred in 3.113956 secs (673469 bytes/sec)
[+] Formatting /dev/disk4 ...
write to block device: /dev/disk4 last written block address: 15663103
[+] Writing fake MBR...
16+0 records in
16+0 records out
16 bytes transferred in 0.000615 secs (26021 bytes/sec)
2+0 records in
2+0 records out
2 bytes transferred in 0.000644 secs (3106 bytes/sec)
[+] Successfully formatted
Please disconnect/reconnect your drive now.
Se for extremamente importante que o formato-AUDF use o tamanho do bloco correto ao formatar sua unidade. O formato-AUDF tentará detectar e usar o tamanho correto do bloco (lógico). Se você souber o que está fazendo, a opção Format -UDF -b BLOCK_SIZE pode ser usada para substituir explicitamente o valor do tamanho do bloco detectado.
Se o tamanho do bloco incorreto for usado durante a formatação (ou seja, um que não corresponde ao tamanho lógico do bloco da sua unidade), a unidade resultante provavelmente terá problemas de compatibilidade do SO e sofrerá com problemas de desempenho não ideais.
Da mesma forma, é igualmente importante que a unidade resultante seja montada usando o tamanho correto do bloco. Muitos sistemas operacionais tentam apenas um tamanho de bloco (geralmente qualquer que o utilitário de montagem seja padrão). Por exemplo, para montar um dispositivo UDF, o Windows parece exigir que o sistema de arquivos UDF use um tamanho de bloco igual ao tamanho do bloco lógico. Se o tamanho do seu bloco não for o padrão do sistema operacional, a montagem automática provavelmente não funcionará no seu sistema operacional. Enquanto um pequeno incômodo, as tentativas de montagem manual ainda devem ter sucesso em tamanhos de bloco fora do padrão.
Exemplo de como montar manualmente no Linux:
$ mount -t udf -o bs=4096 /dev/sdX /mnt/mount-point
Exemplo de como montar manualmente no macOS:
$ sudo mount_udf -b 4096 /dev/diskN /Volumes/MountPoint
Infelizmente, qualquer coisa com tamanho de bloco diferente de 512 não parece ser montado no Windows XP.
Para mais informações, consulte #12, #13, #16 e #31.
O formato UDF possui no máximo 2^32 blocos. Com o formato-AUDF, esses blocos equivalem a blocos lógicos.
Se a sua unidade tiver capacidade excedente desse tamanho máximo, a capacidade extra não será usada. Esta é uma limitação do próprio UDF.
Para compatibilidade máxima do sistema operacional, use o formato-AUDF em um dispositivo com um tamanho de bloco lógico de 512 bytes. Isso limitará sua capacidade total a 2 TIB, mas o dispositivo resultante deve funcionar nos sistemas mais operacionais.
Para obter a capacidade máxima de sistema de arquivos UDF, use o Format-UDF em um dispositivo com um tamanho de bloco lógico de 4096 bytes. Isso aumentará sua capacidade total (de 2 TIB) para 16 TIB, mas limitará o número/tipos de sistemas operacionais que poderão montar/ler/gravar o dispositivo resultante. Consulte Tabelas de compatibilidade acima para obter mais detalhes.
Para um rótulo de dispositivo legível por humanos, use o formato-AUDF em uma das seguintes configurações:
fdisk para definir a partição como ativa se o BIOS não puder inicializar a partir de unidades sem partição. (Obrigado a @tome- pela dica.)