2009-02-18 29 views
8

Tôi có công việc nhà này, nơi tôi phải chuyển một tập tin rất lớn từ một nguồn sang nhiều máy bằng cách sử dụng bittorrent kinda của thuật toán. Ban đầu tôi cắt các tập tin thành từng phần và tôi chuyển các khối thành tất cả các mục tiêu. Mục tiêu có trí thông minh để chia sẻ các phần họ có với các mục tiêu khác. Nó hoạt động tốt. Tôi muốn chuyển một tập tin 4GB vì vậy tôi tarred bốn tập tin 1GB. Nó đã không lỗi khi tôi tạo ra các tập tin tar 4GB nhưng ở đầu kia trong khi lắp ráp tất cả các khối trở lại tập tin ban đầu nó lỗi ra nói rằng giới hạn kích thước tập tin vượt quá. Làm thế nào tôi có thể đi về giải quyết vấn đề giới hạn 2GB này?Cách tạo tệp có kích thước lớn hơn 2GB trong Linux/Unix?

+0

Bạn đang chạy hệ thống tệp, phiên bản hạt nhân và phiên bản/phiên bản nào? – womble

+0

Được gắn thẻ lại để thêm linux –

Trả lời

11

tôi có thể nghĩ đến hai lý do có thể:

  • Bạn không cần phải Large File Support cho phép trong hạt nhân Linux bạn
  • ứng dụng của bạn không được biên soạn với sự hỗ trợ tập tin lớn (bạn có thể cần phải vượt qua gcc thêm cờ để cho nó để sử dụng các phiên bản 64-bit của một số tập tin I/O chức năng. ví dụ gcc -D_FILE_OFFSET_BITS=64)
+0

Đừng quên ít nhất phải đề cập đến hệ thống tệp (trình điều khiển). Một số FS-es có giới hạn tùy ý. Chỉ Btrfs, ZFS và có lẽ một số khác có khả năng 128bit (kết quả là ví dụ [16 exabyte (16 × 1018 byte) - Kích thước tối đa của một tệp] (http://en.wikipedia.org/wiki/ZFS#Capacity)) – sehe

+0

Lưu ý: '_FILE_OFFSET_BITS' chuyển' O_LARGEFILE' vào syscall 'mở' trên vòm chính xác, nhưng ' _FILE_OFFSET_BITS' được ưu tiên cho tính di động: https://stackoverflow.com/questions/2888425/is-o-largefile- tập tin cần thiết-chỉ-to-ghi-một-lớn –

4

Điều này tùy thuộc vào số filesystem type. Khi sử dụng ext3, tôi không gặp vấn đề gì với các tệp lớn hơn đáng kể.

Nếu đĩa cơ bản là FAT, NTFS hoặc CIFS (SMB), bạn cũng phải đảm bảo bạn sử dụng phiên bản mới nhất của trình điều khiển thích hợp. Có một số trình điều khiển cũ hơn có giới hạn kích thước tệp như những giới hạn bạn gặp phải.

3

Điều này có thể liên quan đến system limitation configuration không?

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

Nếu bạn không muốn bất kỳ giới hạn loại bỏ fsize từ /etc/security/limits.conf.

1

Nếu hệ thống của bạn hỗ trợ nó, bạn có thể nhận được gợi ý với: man largefile.

1

bạn nên sử dụng fseeko và ftello, xem fseeko(3) Lưu ý bạn nên xác định #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64 
#include <stdio.h> 
Các vấn đề liên quan