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

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にしておけば、「使えない環境ではエラーになる」ので、対応状況を確認しやすくなります。

関連記事:
カテゴリの一覧へ
新着記事
New1
テキスト・データ処理
grep -sオプションの使い方を完全ガイド!エラーを非表示にして静かに検索しよう
New2
ファイル・ディレクトリ操作
mv --backupオプションの使い方|バックアップを作成しながら安全に移動する方法
New3
ファイル・ディレクトリ操作
lsコマンドの-rオプション|逆順(降順)でファイルを並べる方法を初心者向けに解説!
New4
ファイル・ディレクトリ操作
find -printオプションとは?初心者でも理解できるLinux検索結果の出力方法
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
cdコマンドとは?Linuxでディレクトリを移動する基本を初心者向けに解説
No.3
Java&Spring記事人気No3
テキスト・データ処理
grepコマンドとは?Linuxで文字列を検索する基本をやさしく解説!
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
lsコマンドの-lオプションでファイルの詳細情報を一覧表示しよう!初心者でもわかる使い方と意味を徹底解説