カテゴリ: Linuxコマンド集 更新日: 2026/04/08

cp --reflinkオプションの使い方|COW(コピーオンライト)で高速・省スペースなコピーを実現

cp --reflinkオプション|COW(コピーオンライト)で効率的にコピーする
cp --reflinkオプション|COW(コピーオンライト)で効率的にコピーする

先生と生徒の会話形式で理解しよう

生徒

「Linuxで大きなファイルをコピーしたら、すごく時間がかかってディスクもすぐいっぱいになりました……。もっと効率のいいコピー方法ってないんですか?」

先生

「それならcpコマンドの--reflinkオプションを使ってみましょう。コピーオンライトという仕組みで、実際にはデータを複製せずにコピーしたように見せてくれます。」

生徒

「えっ!?コピーしてないのにコピーしたように見えるんですか?」

先生

「そうなんです。必要なときにだけ実際のデータを書き込むしくみです。詳しく説明していきましょう!」

1. コピーオンライト(COW)とは?

1. コピーオンライト(COW)とは?
1. コピーオンライト(COW)とは?

コピーオンライト(Copy-On-Write)とは、ファイルをコピーしたときに、実際のデータは複製せず、「同じ内容を共有した状態」にしておき、どちらかが書き換えられたときに初めて本当に分離するしくみです。

これにより、時間とディスク容量を大きく節約できます。

この機能は、BtrfsXFS(RHEL8以降)などの一部のファイルシステムで対応しています。

2. cp --reflinkの基本的な使い方

2. cp --reflinkの基本的な使い方
2. cp --reflinkの基本的な使い方

--reflinkオプションを付けてcpコマンドを実行すると、コピーオンライトでのコピーが行われます。


cp --reflink=auto original.img copy.img

この例では、original.imgの内容は実際にはコピーされず、copy.imgという別名で参照されるようになります。

ファイルサイズが大きいときほど、効果を実感できます。

3. --reflinkの指定方法と違い

3. --reflinkの指定方法と違い
3. --reflinkの指定方法と違い

--reflinkには、次の3つの指定方法があります。

  • --reflink=auto:できる環境ならCOWコピー。できなければ普通のコピー。
  • --reflink=always:必ずCOWコピー。できない場合はエラー。
  • --reflink=never:通常コピー(COWを使わない)。

基本的にはautoを使っておけば、安全に使えます。

4. 実際に試してみよう(COW対応ファイルシステムの場合)

4. 実際に試してみよう(COW対応ファイルシステムの場合)
4. 実際に試してみよう(COW対応ファイルシステムの場合)

以下のように大きなファイルを作っておきます。


fallocate -l 1G test.img

次に、--reflink付きでコピーします。


cp --reflink=auto test.img copy.img

通常のコピーでは数秒かかるところが、瞬時に完了します。そして、ディスク使用量も増えません。


du -h test.img copy.img
1.0G	test.img
1.0G	copy.img

見かけ上は1GBずつですが、dfコマンドでディスクの空き容量を確認すると、ほとんど減っていないはずです。

5. 通常コピーとの違いを理解しよう

5. 通常コピーとの違いを理解しよう
5. 通常コピーとの違いを理解しよう

普通のcpでは、実際のデータを1バイトずつ読み書きします。時間もかかるし、容量も2倍必要になります。

一方、--reflinkを使えば、中身はコピーせず「リンクのように」別名で存在させるだけなので、スピードも容量効率も非常に高いです。

6. COWの注意点と挙動

6. COWの注意点と挙動
6. COWの注意点と挙動

注意点として、copy.imgを書き換えた瞬間に、その部分だけ本当にディスクに書き込まれます。これが「オンライト」です。

つまり、「コピーしたあと書き換えなければ、実体は1つだけ」ですが、「どちらかを編集すれば、それ以降は別物になる」ということです。

まるで「コピーしたふりをしておいて、必要になるまで本気を出さない」ようなイメージですね。

7. --reflinkが使えるか確認する方法

7. --reflinkが使えるか確認する方法
7. --reflinkが使えるか確認する方法

この機能はすべてのLinux環境で使えるわけではありません。対応しているのは以下のような環境です。

  • Btrfs(最もCOW向け)
  • XFS(Red Hat Enterprise Linux 8以降)

ext4などでは対応していないため、--reflinkを使っても普通のコピーになります。

対応しているか確認するには、stat -f .でファイルシステムの種類を調べてみましょう。


stat -f .

また、--reflink=alwaysにしておけば、「使えない環境ではエラーになる」ので、対応状況を確認しやすくなります。

まとめ

まとめ
まとめ

今回はLinuxのcpコマンドにおけるreflinkオプションの使い方について、コピーオンライトという仕組みを中心に詳しく学びました。大容量ファイルのコピーは時間とディスク容量の両方に大きな負担をかける処理ですが、reflinkを活用することでその課題を大きく改善できることが理解できたはずです。

従来のファイルコピーでは、ファイルの中身を一からすべて複製する必要があり、処理時間が長くなるだけでなく、ディスク容量もコピー元と同じだけ消費してしまいます。しかしコピーオンライトを利用したcpコマンドのreflinkオプションを使うと、実際にはデータを複製せず、同じデータを共有する形でコピーを実現できます。これにより高速な処理と省ディスク容量を同時に実現できるのが大きな特徴です。

特にBtrfsやXFSといったコピーオンライトに対応したファイルシステムでは、その効果を最大限に発揮します。大規模なログファイルや仮想ディスクイメージ、バックアップ用途のファイルコピーなどでは、reflinkの有無によってパフォーマンスが大きく変わるため、実務でも非常に重要な知識です。

またreflinkオプションにはauto、always、neverという三つの指定方法があり、それぞれの挙動を理解して使い分けることも重要です。一般的にはautoを利用することで安全にコピーオンライトを活用できますが、確実にCOWを使いたい場合にはalwaysを使うことで、対応していない環境を検知することも可能です。

さらに実際の運用では、コピー後のファイルを編集した場合にのみデータが分離されるという挙動も重要なポイントです。これはオンライトの仕組みによるもので、書き込みが発生した部分だけが新たにディスクへ書き込まれるため、効率的なストレージ利用が可能になります。この動作を理解しておくことで、意図しないディスク消費の増加を防ぐことができます。

以下はreflinkオプションを利用した基本的なコピー例です。大容量ファイルのコピーでも瞬時に処理が完了することが確認できます。


cp --reflink=auto largefile.img copy.img

またディスク使用量の確認も重要です。見かけ上のサイズと実際の使用量が異なる点にも注意しましょう。


du -h largefile.img copy.img
1.0G    largefile.img
1.0G    copy.img

このようにLinuxのcpコマンドとreflinkオプションを組み合わせることで、高速コピー、省容量コピー、効率的なストレージ運用を実現できます。サーバー運用やクラウド環境、開発環境の効率化にも直結するため、日常的に活用できるようにしておくことが重要です。

先生と生徒の振り返り会話

生徒

cpコマンドのreflinkオプションを使うと、実際にはコピーしないでコピーしたように見せる仕組みがあるっていうのが一番驚きでした。

先生

そうですね。それがコピーオンライトという考え方です。必要になるまで実際のデータを複製しないので、効率がとても良いのが特徴です。

生徒

しかもコピーがすごく速いですよね。大きなファイルでも一瞬で終わるのはかなり便利だと思いました。

先生

はい。特にバックアップや仮想マシンのイメージファイルなど、大容量データを扱う場面では大きな効果があります。

生徒

ただ、ファイルシステムが対応していないと使えない点は注意ですね。

先生

その通りです。BtrfsやXFSなどの対応環境で使うことで、初めてreflinkの恩恵を受けられます。

生徒

あと、編集したときに初めてデータがコピーされるという動きも重要ですね。

先生

それがオンライトの部分です。この動きを理解しておくと、ストレージの使い方がより効率的になります。

生徒

Linuxのファイルコピーって奥が深いですね。これからは普通のcpと使い分けていきたいです。

先生

とても良い理解です。実務でも役立つ知識なので、ぜひ積極的に活用していきましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
ファイル・ディレクトリ操作
stat -Lオプションの使い方を解説|シンボリックリンクをたどってファイル情報を確認しよう
New2
ファイル・ディレクトリ操作
realpath -eオプションの使い方を解説!Linuxで存在するファイルのみ絶対パスを取得する方法
New3
テキスト処理とフィルタ
tacコマンドの基本!ファイル内容を逆順に表示する方法
New4
テキスト・データ処理
awk -fオプションの使い方を完全ガイド!初心者でもわかるLinuxテキスト処理の基本
人気記事
No.1
Java&Spring記事人気No1
テキスト・データ処理
catコマンドとは?Linuxでファイル内容を表示・連結する基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
pwdコマンドとは?初心者でもわかる現在の作業ディレクトリの確認方法を解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門