現在、非常に大きなファイル (約 6 GB) をある Linux サーバーから別のサーバーに転送するプロジェクトに取り組んでいます。サーバーは Debian Squeeze で実行されます。主な目標を達成するために、最初にファイルの名前とサイズを宛先マシンに送信し、ソース マシンから段階的に受信するデータ ブロックを格納するための空のファイルを作成します。私の問題は、サーバーで 6 GB のファイルの作成に時間がかかりすぎることです。より明確にするために、次の C ルーチンを使用して新しいファイルを作成します。
void create_file(char* f_name, long long f_size) {
char* bs, *of, *s_f_size, *count;
if((pid = fork()) < 0) {
perror("fork() failed.");
return;
}
if(pid == 0) {
//Call execl
of = (char*) malloc(sizeof(char)*(strlen("of=") + strlen(f_name) + 1));
s_f_size = (char*) malloc(sizeof(char)*32);
sprintf(s_f_size, "%lld", file_size);
count = (char*) malloc(sizeof(char)*(strlen("count=") + strlen(s_f_size) + 1));
strcpy(of, "of=");
strcat(of, f_name);
strcpy(count, "count=");
strcat(count, s_f_size);
ret = execl("/bin/dd", "dd", "if=/dev/zero", of, "bs=1", count, (char*) 0);
if(ret < 0) {
perror("execl() failed");
free(s_f_size);
free(of);
free(count);
return;
}else {
free(s_f_size);
free(of);
free(count);
return;
}
}else {
status = 0;
wpid = wait(&status);
}
}
Linux の dd コマンドを使用したのは、6 GB の空のファイルを作成する最も簡単な方法だと考えたからです。ただし、完了するまでに約 15 分かかります。空のファイルをより速く作成する方法はありますか? 私は何を間違っていますか?
お時間をいただきありがとうございます。
ニック