ハードリンクがたくさんあると、ファイル操作が遅くなる?

削除に関しては、原理上、(少なくとも古典的な UNIX のファイルシステムでは)i-node のリンクカウントを -1 するだけなので、遅くなりません。むしろ、データ領域の bitmap に対する操作が不要なぶん、速くなります。
参照: システムプログラム概論 - ファイルシステム 1 2

実験: サンプルとして、

  • 総ディレクトリ数 2221
  • 階層数 3
  • ファイルサイズ 1000 バイト
  • 総ファイル数 28060
  • ディスク領域 237MB

というディレクトリツリーを作成する。これを、cp -a と cp -al でそれぞ れ 30 セット複製する。1 セットを削除するのに要する時間は、

  • cp -a (実体)            9.6 秒
  • cp -al (リンク)         3.6 秒

となり、ハードリンクを削除するほうがずっと速い。

大量のハードリンクがあると遅くなる操作の例としては、du があります。du はリンクを二重カウントしないように i-node を追跡するため、大量のハードリンクがあると動作が遅くなります。

Leave a Reply