`cp`はディスク上ではデータをコピーしないことがある——reflinkとGNU coreutilsの挙動
概要
LinuxのcpコマンドはXFSやBtrfsなどreflinkをサポートするファイルシステム上では、データをディスクにコピーせず参照を共有する「reflink」機能を使う。GNU coreutils v9.0(2021年)以降がデフォルトでこの挙動を採用しており、コマンドが一瞬で完了する。
詳細
- reflink機能:複数のファイルが同一のデータブロックをディスク上で共有する仕組み。XFS(カーネルv4.9以降)とBtrfsがサポート
- CoW(Copy-on-Write):共有データへの書き込み時のみ新領域を確保して分岐するため、既存データは破壊されない
- cpの挙動:GNU coreutils v9.0以降は
--reflink=autoがデフォルト。対応FSならcp実行直後にsrcとdestがデータを共有し、コマンドが瞬時に完了 - 1GiBのファイルコピーでも一瞬で終わる(ext4では数秒かかる処理が即時完了)
- reflinkはファイル全体だけでなく、一部範囲の共有も可能(ioctl FICLONERANGE)
- Ubuntuなど多くのディストリビューションではXFSのreflink対応がデフォルト有効
参照
- 出典: https://zenn.dev/satoru_takeuchi/articles/4bab372c6dae86
- はてなブックマーク数: 10