2009-02-18 17 views
8

Tengo este trabajo en el hogar donde tengo que transferir un archivo muy grande de una fuente a varias máquinas usando bittorrent un poco de algoritmo. Inicialmente estoy cortando los archivos en pedazos y transfiero trozos a todos los objetivos. Los objetivos tienen la inteligencia para compartir los trozos que tienen con otros objetivos. Funciona bien. Quería transferir un archivo de 4GB, así que tomé cuatro archivos de 1GB. No cometí un error al crear el archivo tar de 4 GB, pero en el otro extremo mientras volvía a ensamblar todos los fragmentos del archivo original, se equivoca al decir que se excedió el límite de tamaño de archivo. ¿Cómo puedo resolver este problema de limitación de 2 GB?¿Cómo crear un archivo de tamaño de más de 2 GB en Linux/Unix?

+0

¿Qué sistema de archivos, versión de kernel y versión/distro está ejecutando? – womble

+0

Reetiquetado para agregar Linux –

Respuesta

11

puedo pensar en dos posibles razones:

  • Usted no tiene Large File Support habilitadas en su núcleo de Linux
  • Su aplicación no se compila con soporte de archivos grandes (puede que tenga que pasar gcc adicional banderas para que lo utilice versiones de 64 bits de archivo determinado las funciones de e/S. ej gcc -D_FILE_OFFSET_BITS=64)
+0

No olvide mencionar al menos el sistema de archivos (controlador). Algunos FS-es tienen límites arbitrarios. Solo Btrfs, ZFS y quizás algunos otros tienen capacidades de 128 bits (resultando, por ejemplo, [16 exabytes (16 × 1018 bytes) - Tamaño máximo de un solo archivo] (http://en.wikipedia.org/wiki/ZFS#Capacity)) – sehe

+0

Nota: '_FILE_OFFSET_BITS' pasa' O_LARGEFILE' al 'open' syscall en el arco correcto, pero ' _FILE_OFFSET_BITS' se prefiere para la portabilidad: https://stackoverflow.com/questions/2888425/is-o-largefile- needed-just-to-write-a-large-file –

4

Esto depende de filesystem type. Cuando uso ext3, no tengo tales problemas con archivos que son significativamente más grandes.

Si el disco subyacente es FAT, NTFS o CIFS (SMB), también debe asegurarse de utilizar la última versión del controlador apropiado. Hay algunos controladores más antiguos que tienen límites de tamaño de archivo como los que experimenta.

3

¿Esto podría estar relacionado con un system limitation configuration?

$ ulimit -a 
vi /etc/security/limits.conf 
vivek  hard fsize 1024000 

Si no desea eliminar cualquier límite fsize de /etc/security/limits.conf.

1

Si su sistema lo admite, puede obtener sugerencias con: man largefile.

1

debe utilizar fseeko y ftello, véase Nota fseeko(3) debe definir #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64 
#include <stdio.h> 
Cuestiones relacionadas