Come creare un file di dimensione superiore a 2 GB in Linux / Unix?
Domanda
Ho questo lavoro a casa dove devo trasferire un file di grandi dimensioni da una fonte a più macchine utilizzando bittorrent pò di algoritmo. Inizialmente Sto tagliando i file a pezzi e mi trasferisco a pezzi tutti gli obiettivi. Gli obiettivi hanno l'intelligenza di condividere i pezzi che hanno con altri obiettivi. Funziona bene. Ho voluto trasferire un file da 4 GB in modo da asfaltata quattro file da 1 GB. Non ha errore fuori quando ho creato il file tar da 4 GB, ma dall'altra parte, mentre l'assemblaggio tutti i pezzi al file esso errori originali fuori dicendo limite di dimensione del file superato. Come posso fare per risolvere questo problema limitazione 2GB?
Soluzione
Mi vengono in mente due possibili ragioni:
- Non hai Large File Support abilitato nel kernel Linux
- L'applicazione non è compilato con il supporto di file di grandi dimensioni (potrebbe essere necessario passare gcc flag extra per dirgli di utilizzare le versioni a 64 bit di certo file funzioni di I / O. Es
gcc -D_FILE_OFFSET_BITS=64
)
Altri suggerimenti
Questo dipende dalla filesystem di tipo . Quando si utilizza ext3, non ho questi problemi con i file che sono significativamente più grandi.
Se il disco di base è FAT, NTFS o CIFS (SMB), è inoltre necessario assicurarsi di utilizzare la versione più recente del driver appropriato. Ci sono alcuni vecchi driver che hanno limiti di dimensioni dei file come quelle che si verificano.
Questo potrebbe essere correlato a un configurazione limitazioni del sistema ?
$ ulimit -a
vi /etc/security/limits.conf
vivek hard fsize 1024000
Se non si desidera alcun limite fsize
togliere dal /etc/security/limits.conf
.
Se il sistema lo supporta, è possibile ottenere suggerimenti con:. man largefile
Si dovrebbe usare fseeko e ftello, vedi fseeko (3)
Nota È necessario definire #define _FILE_OFFSET_BITS 64
#define _FILE_OFFSET_BITS 64
#include <stdio.h>