Como armazenar arquivos grandes no Fat32

Como armazenar arquivos grandes no Fat32

Eu queria armazenar um arquivo de vídeo grande em uma unidade FAT32 (~18 GB), mas descobri que isso não é simplesmente possível devido às limitações do sistema de arquivos.

Existe uma ferramenta simples para dividir o arquivo em partes menores que podem ser armazenadas e, em seguida, remontá-las quando eu quiser recuperar o arquivo arquivado?

Ou existe uma maneira melhor de armazenar arquivos grandes em FAT32?

Responder1

A maioria dos arquivadores de arquivos, como7-Zip, WinZip e WinRAR permitem dividir um arquivo em vários arquivos. Se a velocidade for importante, você pode tentar desabilitar a parte de compactação do programa.

Em sistemas GNU/Linux, você pode usar odividiregatoprogramas do pacote coreutils (por exemplo, split -b 4294967295 FOO /media/FATDISK/BARpara dividir o FOO em BARaa, BARab, ... e cat /media/FATDISK/BAR?? > FOOremontá-lo). O utilitário de linha de comando do Mac OS X splitfunciona da mesma maneira.

Responder2

Se você está procurando uma solução rápida para isso, consulte as outras respostas que apresentam 7zipou split.Isto é mais umdiversãosolução.

Acabei escrevendo um pequeno script Python 2 para conseguir isso.


# Author: Alex Finkel 
# Email: [email protected]

# This program splits a large binary file into smaller pieces, and can also 
# reassemble them into the original file.

# To split a file, it takes the name of the file, the name of an output 
# directory, and a number representing the number of desired pieces.

# To unsplit a file, it takes the name of a directory, and the name of an 
# output file.

from sys import exit, argv
from os import path, listdir

def split(file_to_split, output_directory, number_of_chunks):
    f = open(file_to_split, 'rb')
    assert path.isdir(output_directory)
    bytes_per_file = path.getsize(file_to_split)/int(number_of_chunks) + 1
    for i in range(1, int(number_of_chunks)+1):
        next_file = open(path.join(output_directory, str(i)), 'wb')
        next_file.write(f.read(bytes_per_file))
        next_file.close()
    f.close()
                
def unsplit(directory_name, output_name):
    assert path.isdir(directory_name)
    files = map(lambda x: str(x), sorted(map(lambda x: int(x), listdir(directory_name))))
    out = open(output_name, 'wb')
    for file in files:
        f = open(path.join(directory_name, file), 'rb')
        out.write(f.read())
        f.close()
    out.close()
        
    
if len(argv) == 4:
    split(argv[1], argv[2], argv[3])
elif len(argv) == 3:
    unsplit(argv[1], argv[2])
else:
    print "python split_large_file.py file_to_split output_directory number_of_chunks"
    print "python split_large_file.py directory name_of_output_file"
    exit()

Responder3

Outra opção: use o splitcomando do GNU Coreutils:

split --bytes=4G infile /media/FAT32drive/outprefix

para dividir o arquivo em pedaços de 4 GB e salvar os pedaços na unidade de saída.

O arquivo original pode ser recuperado concatenando os pedaços (com nomes de arquivos classificados em ordem alfabética).

Para informações de uso, consulte osplitmanual.

Coreutils, incluindo split, devem ser instalados por padrão no Linux e Mac OS X. No Windows, édisponível no GnuWin32, ou do Cygwin.

Responder4

Para criar arquivos com tamanho máximo permitido em vfat (2³²-1 bytes), utilize o seguinte comando (em bash):

split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix

ou, se você não quiser usar a matemática embutida do bash:

split --bytes=4294967295 infile /media/FAT32drive/outprefix

O '--bytes=4G' falha, porque 4G é igual a 2³² bytes, que é exatamente um byte a mais que o tamanho máximo de arquivo no vFAT.

informação relacionada