2016-06-16

ハードリンク

golangでバックアップ用のプログラムを書いたのは
多分2013年の7月だった。

当時はgoのバージョンが1.1で、windowsでは
ハードリンクがサポートされていなかったので、
exec.Command("cmd", "/c", "mklink", "/H", dst, src)
という方法でハードリンクを生成していた。
goroutineを駆使していくら並列度をあげても、
os/exec.Commandを使っているのがボトルネックで、
75GBのバックアップに15分以上かかっていた。

1.4からwindowsでも
os.Link(src, dst)
でハードリンクが作れるようになっていたらしく、
これに差し替えたところ4分くらいで終わるようになった。
Go 1.4 Release Notes

リリースノートはちゃんと読まんといかんね。
(でもリリースノートにはSymlinkについてしか書かれていない)

No comments:

Post a Comment