twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル LinuxにおけるBtrfsのスナップショットとロールバックの作成と管理(パート2)

LinuxにおけるBtrfsのスナップショットとロールバックの作成と管理(パート2)

原文はこちらです。

  前回のチュートリアル (英語版) で、Btrfs の実験環境の構築を行い、ストレージ ボリュームの作成方法を勉強しました。今回は、必要なときにスナップショットを取る方法と、任意の時点のファイルシステムの内容へロールバックする方法を学びます。これは、バックアップを置き換えるものではありません。しかし、正しいとわかっている時点の内容に戻すための非常に良い道具です。たとえば、アップグレードに失敗した時のように、ごちゃごちゃに混乱してしまったとき、何が起こったかを解析するためにとれる良い方法です。

素晴らしいサブボリューム

  Btrfs の素晴らしく使い勝手の良い機能の 1 つにサブボリュームがあります。Btrfs のサブボリュームは、あたかも 1 つのブロック デバイスのように動作しますが、POSIX に定義されたファイルの名前空間内で、独立した存在となっています。サブボリュームは精巧な仕組みになっていて、簡単に作成でき、Btrfs のストレージ プールを複数のサブボリュームとして管理します。それぞれ独立してマウント、アンマウントが行え、しかも、ディスクのパーティション分けを必要としません。サブボリュームは、固定的な領域割り当てを必要としません。データの追加、削除に応じて、ストレージプールから動的に領域割り当てを行います。ディレクトリを作成するのと同様の手軽さでサブボリュームを作成でき、さらに階層構造を持つディレクトリと同じにサブボリュームをネストすることができます。トップ レベルのサブボリュームとその中のサブボリュームは、デフォルトでマウントされます。デフォルトを変更して、トップ レベルのサブボリュームをマウントせずに、サブボリュームをマウントすることもできます。

スナップショットは、サブボリュームの特殊な形です。サブボリュームのコピーですが、親や子となるサブボリュームを持ちません。スナップショットは、ファイルのコピーを作成せず、元のサブボリュームのデータやメタデータを共有します。そのため、領域の節約になり、作成速度も速くなります。元のサブボリュームとは独立しているため、スナップショットにファイルを追加しても、元のサブボリュームには追加されません。スナップショットのスナップショットも作成できますが、それぞれ、別々のものとして扱われます。

サブボリュームの作成、削除

 サブボリュームの作成は、ディレクトリの作成と同様に簡単です。btrfs コマンドを使います。次の例では、マウントされたトップレベルのサブボリューム上に、3 つの新しいサブボリュームを作成します。

# btrfs subvolume create /btrfs/sub1
# btrfs subvolume create /btrfs/sub2
# btrfs subvolume create /btrfs/sub2/sub3

 新しく作成した各サブボリュームは、自動的にマウントされ、あたかもディレクトリの階層構造のように見えます (図 1)。

fig-1 btrfs subvolumes

 サブボリュームを見るための特別な btrfs コマンドが用意されています。

# btrfs subvolume list /btrfs
ID 260 gen 22 top level 5 path sub1
ID 261 gen 22 top level 5 path sub2
ID 262 gen 22 top level 5 path sub2/sub3

 サブボリュームを個別にマウントするためには、まず、トップレベルのサブボリュームをアンマウントし、続けてサブボリュームを ID 指定でマウントします。

# umount /btrfs/
# mount -o subvolid=261 /dev/sdd1 /btrfs/

/dev/sdd3 と同じ Btrfs ストレージ プールに含まれる /dev/sdd1 を指定しています。ストレージ プール内のブロック デバイスをマウントする方法を理解してください。次に Subvolid 261 をデフォルトに設定します。

# btrfs subvolume set-default 261 /btrfs

いったんアンマウントして、トップレベルのサブボリュームとしてマウントします。

# umount /btrfs/   
# mount /dev/sdd3 /btrfs/

この状態では、1 つのサブボリュームしか見えません。元の状態に戻すためには、トップレベル サブボリュームを意味する ID 0 を利用してリセットします。

# btrfs subvolume set-default 0 /btrfs/

 これでマウント状態を解除し、再マウントして、すべてが元の状態に戻ります。サブボリュームを削除する時は、マウントされていることを確認して次のようにします。

# btrfs subvolume delete /btrfs/sub2/sub3

 サブボリュームを含むサブボリュームを削除することはできません。まず、一番下のサブボリュームの削除から始めて、順番に上のサブボリュームを削除します。

 mount コマンドで指定できることは、すべて /etc/fstab に記述できます。パート1blkid コマンドの例を思い出してください。このコマンドを使って、正しいラベルや UUID を入手します。そして、サブボリューム ID を btrfs subvolume list コマンドで入手します。結果をまとめて、次のように /etc/fstab に指定します。

LABEL=testbtrfs  /btrfs defaults,subvolid=269 0 0

 mount /btrfs を実行してください。簡単ですね。

スナップショットを試す

 これで、スナップショットの生成に取り掛かれます。非常に楽しく、簡単です。まず、サブボリュームにいくつかファイルをコピーしましょう。そして、そのサブボリュームのスナップショットをとります。

# btrfs subvolume snapshot /btrfs/sub1 /btrfs/sub1/snapshot

 snapshot  という部分の名称は、自由に指定できます。たとえば、時刻だったり、わかりやすい識別子だったりです。ファイルシステム内に、新しいサブボリュームができるのと同様に新しいスナップショットが作成されます。そして、スナップショットは、元のサブボリュームのすべてのファイルを持っています。元のサブボリュームとは独立していますから、元のサブボリュームに影響を与えずに、スナップショットをいじることができます。

 なにかひどいことをして、元の状態に戻したいとしましょう。元のきれいな状態でスナップショットを作成しておきます。最初に、壊れたサブボリュームをアンマウントします。スナップショットを同じところにマウントします。壊れたサブボリュームは、もう不要であれば削除し、スナップショットに元のサブボリュームと同じ名前を付けます。こうすれば、/etc/fstab の設定を変えずにすみます。昔からある mv コマンドが使えます。

# mv /btrfs/snapshotname /btrfs/subvolumename

 GUI のツールはないでしょうか。SUSEのSnapper が、GUI を持った素敵な btrfs 管理ツールです。RPM を採用している他のディストリビューションや、Debian、Xubuntu 用のパッケージも用意されています。おそらく多数のディストリビューションに含まれるようになるでしょう。

fig-2 snapper

 最後まで、読んでくれてありがとう。参考文献を列挙しておきます。

参考文献
Matthias Eckermann's LinuxCon 2013 Btrfs slides
Btrfs Wiki
Btrfs FAQ
man btrfs
man mv
man mount
man fstab
man blkid

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2017/12/06 2017年 12月 05日
  2. Today's Linux 2017/12/05 2017年 12月 04日
  3. Today's Linux 2017/12/08 2017年 12月 07日
  4. Today's Linux 2017/12/07 2017年 12月 06日
  5. Today's Linux 2017/12/12 2017年 12月 11日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!