ハードリンク


[tag:]

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についてしか書かれていない)