2009-02-18 6 views
8

J'ai ce travail à la maison où je dois transférer un très gros fichier d'une source à plusieurs machines en utilisant un peu d'algorithme bittorrent. Au départ, je coupe les fichiers en morceaux et je transfère des morceaux à toutes les cibles. Les cibles ont l'intelligence de partager les morceaux qu'elles ont avec d'autres cibles. Ça fonctionne bien. Je voulais transférer un fichier de 4 Go, donc je goudrais quatre fichiers de 1 Go. Il n'a pas commis d'erreur lors de la création du fichier tar de 4 Go, mais à l'autre extrémité, lors de l'assemblage de tous les morceaux dans le fichier d'origine, il a été exclu en disant que la limite de taille de fichier était dépassée. Comment puis-je résoudre ce problème de limitation de 2 Go?Comment créer un fichier de taille supérieure à 2 Go sous Linux/Unix?

+0

Quel système de fichiers, version du noyau et distribution/version utilisez-vous? – womble

+0

Re-tagged pour ajouter linux –

Répondre

11

Je peux penser à deux raisons possibles:

  • Vous n'avez pas Large File Support activé dans votre noyau Linux
  • Votre application est compilée avec le support des grands fichiers (vous devrez peut-être passer gcc supplémentaire drapeaux pour le dire d'utiliser des versions de certains fichiers de fonctions E/S 64 bits. par exemple gcc -D_FILE_OFFSET_BITS=64)
+0

N'oubliez pas d'au moins mentionner le système de fichiers (pilote). Certains FS-es ont des limites arbitraires. Seuls Btrfs, ZFS et peut-être quelques autres ont des capacités de 128 bits (résultant par exemple [16 exaoctets (16 × 1018 octets) - Taille maximale d'un seul fichier] (http://en.wikipedia.org/wiki/ZFS#Capacity) – sehe

+0

Note: '_FILE_OFFSET_BITS' passe' O_LARGEFILE' au syscall 'open' sur l'arc correct, mais ' _FILE_OFFSET_BITS' est préféré pour la portabilité: https://stackoverflow.com/questions/2888425/is-largefile- nécessaire-juste-pour-écrire-un-grand-fichier –

4

Cela dépend du filesystem type. Lorsque vous utilisez ext3, je n'ai pas de tels problèmes avec les fichiers qui sont nettement plus gros.

Si le disque sous-jacent est FAT, NTFS ou CIFS (SMB), vous devez également vous assurer que vous utilisez la dernière version du pilote approprié. Certains pilotes plus anciens ont des limites de taille de fichier comme celles que vous rencontrez.

3

Cela peut-il être relié à un system limitation configuration?

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

Si vous ne voulez pas de limite de retirer fsize/etc/security/limits.conf.

1

Si votre système le prend en charge, vous pouvez obtenir des conseils avec: man largefile.

1

vous devez utiliser fseeko et ftello, voir fseeko(3) Notez que vous devez définir #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64 
#include <stdio.h> 
Questions connexes