山本です。 ちょっとした TIPS を見つけたので、流してみます。特に ext/tk は .ext に大量のコピーが発生してどうにかならないかと思っていたのですが、 下のようなパッチを当てた上で、 Index: Makefile.sub =================================================================== RCS file: /src/ruby/bcc32/Makefile.sub,v retrieving revision 1.84 diff -u -w -b -p -r1.84 Makefile.sub --- Makefile.sub 25 Oct 2005 16:59:17 -0000 1.84 +++ Makefile.sub 7 Nov 2005 07:56:52 -0000 @@ -340,7 +340,7 @@ s,@AR@,$(AR),;t t s,@ARFLAGS@,$(ARFLAGS) ,;t t s,@LN_S@,$(LN_S),;t t s,@SET_MAKE@,$(SET_MAKE),;t t -s,@CP@,copy > nul,;t t +s,@CP@,hardlink,;t t s,@INSTALL@,copy > nul,;t t s,@INSTALL_PROG@,$$(INSTALL),;t t s,@INSTALL_DATA@,$$(INSTALL),;t t 第一引数に元のファイルパス、第二引数にコピー先のディレクトリを受け取り ハードリンクを生成するようなプログラムを用意すれば、HDD の負荷が低減します。 とりあえず私はこんなのを使っています。(Windows専用) # ろくにテストしてないので、自己責任でお願いします。 #include <iostream> #include <string> #include <windows.h> #include <sys/stat.h> std::string strip(const std::string& path) { std::string::size_type i = path.find_last_not_of('\\'); if (i == std::string::npos) { return path; } else if (path[i] == ':') // root directory { return path.substr(0, i + 2); } else { return path.substr(0, i + 1); } } bool is_directory(const std::string& path) { struct stat st; if (0 == stat(path.c_str(), &st)) { return st.st_mode & S_IFDIR; } else { return false; } } std::string basename(const std::string& path) { std::string::size_type i = path.rfind('\\'); if (i == std::string::npos) { return path; } else { return path.substr(i + 1); } } std::string join(const std::string& dir, const std::string& name) { if (dir.size() >= 1 && dir[dir.size() - 1] == '\\') { return dir + name; } else { return dir + "\\" + name; } } int main(int argc, char* argv[]) { if (argc != 3) { std::cerr << "usage: hardlink src dst" << std::endl; return -1; } std::string src = strip(argv[1]); std::string dst = strip(argv[2]); if (is_directory(dst)) { dst = join(dst, basename(src)); } CreateHardLink(dst.c_str(), src.c_str(), NULL); return 0; }