ウェブサイト検索

xfsdumpとxfsrestoreを使用してxfsファイルシステムをバックアップおよび復元する方法


XFSは1993年にシリコン・グラフィックスによって最初に開発されたジャーナリングファイルシステムであり、2000年にGPLライセンスの下でリリースされ、2001年にLinuxカーネルに移植されました。その高いスケーラビリティとパフォーマンスにより、XFSは最近のRed Hat Enterprise Linuxおよびそのクローンのデフォルトファイルシステムとなりました。

このチュートリアルでは、Linux上でxfsdumpおよびxfsrestoreユーティリティを使用してXFSバックアップを作成および復元する方法を見ていきます。

このチュートリアルでは、あなたは学びます:

  • XFSファイルシステムのフルバックアップと増分バックアップを作成および復元する方法
  • バックアップで特定のファイルのサブセットのみを除外/含める方法
  • バックアップに含まれるファイルのリストを表示する方法

インストール

xfsdumpとxfsrestoreユーティリティは、すべての主要なLinuxディストリビューションの公式リポジトリにパッケージ化されて含まれているため、それぞれのパッケージマネージャーを使用して簡単にインストールできます。たとえば、FedoraやRocky LinuxなどのRed Hatファミリーに属するディストリビューションでは、dnfを使用してインストールを実行できます。両方のユーティリティは「xfsdump」パッケージに含まれています。

sudo dnf install xfsdump

DebianおよびDebianベースのディストリビューションでは、代わりにaptを使用できます。

sudo apt install xfsdump

もしArchlinuxを使用している場合は、pacmanを使用して同じ操作を実行できます:

sudo pacman -S xfsdump

インストールが完了したら、最初のバックアップを作成できます。どうするか見てみましょう。

xfsdumpを使用してバックアップを作成する

Xfsdumpはバックアップをファイルとして保存したり、テープデバイスに書き込んだりすることができます。本記事では前者のアプローチを探ります。xfsdumpを使用してXFSファイルシステムのバックアップを作成するのは非常に簡単です。最も基本的な場合、ユーティリティを呼び出し、バックアップしたいファイルシステムのマウントポイント(ファイルシステムはマウントされている必要があります)とバックアップの宛先を指定します。後者は-fオプションで指定され、前者はコマンドの引数として渡されます。

ブートファイルシステム(/bootにマウントされている)のバックアップを/data/boot.xfsdumpファイル(名前と拡張子は任意)に作成したいとします。管理者権限で、次のコマンドを実行します:

sudo xfsdump -f /data/boot.xfsdump /boot

コマンドを発行すると、ダンプセッションを識別するためのラベルと、バックアップを行っているメディアを識別するための別のラベルを提供するように求められます。ラベルはバックアップインベントリに記録され(この後詳しく説明します)、特にテープドライブでバックアップを作成する際に便利です。この例では、「session_0」というラベルを使用してセッションとデータパーツをメディアラベルとして識別します。

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> session_0

============================ media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> datapart

タスクを非対話式にするには、単にセッションとメディアラベルをそれぞれの-Lおよび-Mオプションの引数として提供すればよいです。

sudo xfsdump -L session_0 -M datapart -f /data/boot.xfsdump /boot

増分バックアップを作成する

前の例で見たコマンドは、ファイルシステム内のすべてのファイルを含むフルバックアップまたはレベル0バックアップを生成します。しかし、xfsdumpを使用することで、増分バックアップも作成できます。増分バックアップは、前回のバックアップ(フルまたは増分自体)が実行されてからの変更のみを含みます。このため、通常、非常に迅速に実行されます。

増分バックアップを作成するには、xfsdumpを呼び出すときに-lオプションの引数としてバックアップレベル(0-9)を指定するだけです。このオプションを省略すると、前回の通り、レベル0のバックアップが作成されます。レベル1のバックアップを行うには、次のように実行します:

sudo xfsdump -l 1 -L session_1 -M datapart -f /data/boot.xfsdump1 /boot

レベル1のバックアップは、インベントリに記録された最後のレベル0のバックアップに対して実行されます。バックアップのレベルは徐々に増やさなければならないことは自明です。例えば、レベル2のバックアップが存在しない場合、レベル3のバックアップを作成することはできません。

バックアップからファイルを除外する

時々、バックアップに含めたいファイルのサブセットのみを含めたい場合があります。その目的を達成するために、基本的に3つの戦略を使用することができます:

  1. 特定のサイズを超えるファイルを除外する
  2. 「ノーダンプ」属性でタグ付けされたファイルを除外してください。
  3. 特定のディレクトリに含まれるファイルのみを含める

特定のサイズより大きいファイルを除外する

特定のサイズを超えるファイルをファイルシステムのバックアップから除外するには、-zオプションを使用し、引数としてキロバイトで表されたサイズのしきい値を渡します。次のコマンドを使うと、10メガバイト(10000キロバイト)以上のファイルを除外できます:

sudo xfsrestore -t -f /data/boot.xfsdump

恣意的なファイルを除く

ファイルシステムのバックアップから任意のファイルを除外するには、代わりにそれらに no dump 属性を付ける必要があります。Linuxでのファイルシステム属性の管理についてのチュートリアルで説明したように、この作業は chattr ユーティリティを使用して実行できます。たとえば、/boot/excludeme ファイルをバックアップから除外したい場合、その上に「no dump」属性を設定するには、次のように実行します:

sudo chattr +d /boot/excludeme

「no dump」属性はdで識別されます。それに前に付けた「+」記号は、属性を有効にしたいことを意味します。今、タグ付けされたファイルをバックアップから除外するには、単に-eオプションを使ってxfsdumpを呼び出せば良いのです:

sudo xfsdump -e -f /data/boot.xfsdump /boot

特定のディレクトリ内のファイルのみを含む

特定のディレクトリに含まれるファイルのみをバックアップに含めるために、-sオプションを使用します。含めたい各ディレクトリについてオプションを繰り返し、そのディレクトリのパスを引数として渡す必要があります。ディレクトリのパスはファイルシステムのマウントポイントに対して相対的である必要があります。例として、/boot/efiディレクトリとその内容のみをバックアップに含めるには、次のように実行します:

sudo xfsdump -s efi -f /data/boot/xfsdump /boot

xfsrestoreを使用してバックアップを復元する

xfsrestoreユーティリティは、xfsdumpで作成されたバックアップを復元するために使用されます。-Iオプションを指定して呼び出すと、xfsdumpはインベントリに保存されているバックアップを表示します。このインベントリは/var/lib/xfsdump/inventoryディレクトリに保存されています。以下に示すように、コマンドによって生成された出力には、前の例で実施したバックアップが含まれています:

xfsrestore -I
file system 0:
        fs id:          e65721d2-d766-4556-85e2-60c36022aea7
        session 0:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/vda1
                time:           Wed Nov 23 10:49:56 2022
                session label:  "session_0"
                session id:     8e7bf8a3-ef36-4dbe-ae3c-1b31e6361596
                level:          0
                resumed:        NO
                subtree:        NO
                streams:        1
                stream 0:
                        pathname:       /data/boot.xfsdump
                        start:          ino 133 offset 0
                        end:            ino 1573039 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     164174336
                                mfile start:    ino 133 offset 0
                                mfile end:      ino 1573039 offset 0
                                media label:    "datapart"
                                media id:       82475520-22d8-40e7-9304-04136f90f680
        session 1:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/vda1
                time:           Wed Nov 23 10:52:06 2022
                session label:  "session_1"
                session id:     2d0697d1-9058-4d42-a6b9-5981402013ce
                level:          1
                resumed:        NO
                subtree:        NO
                streams:        1
                stream 0:
                        pathname:       /data/boot.xfsdump1
                        start:          ino 0 offset 0
                        end:            ino 1 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     20736
                                mfile start:    ino 0 offset 0
                                mfile end:      ino 1 offset 0
                                media label:    "datapart"
                                media id:       2b2414ca-8f16-46bf-bfd7-016220aff8c3
xfsrestore: Restore Status: SUCCESS

バックアップの内容を一覧表示すること

バックアップを復元する前に、その内容を確認することが望ましいかもしれません。そのためには、-tオプションを使用してxfsdumpを呼び出します。そして、通常通り、-fへの引数としてそのパスを渡すことでバックアップを参照します。/data/boot.xfsdumpとして保存されたバックアップの内容をリストするには、以下のコマンドを実行します:

xfsrestore -t -f /data/boot.xfsdump

フルバックアップの復元

フルバックアップを復元するには、xfsdumpを呼び出し、バックアップのパスとファイルシステムを復元したい場所を指定します。例えば、この記事で実行したフルバックアップを/testディレクトリに復元するには、次のように実行します:

sudo xfsrestore -f /data/boot.xfsdump /test

操作が完了すると、/test ディレクトリにバックアップの一部であったファイルが含まれているのがわかります。ご覧のように、SELinuxコンテキストなどの拡張ファイル属性が保持されています。

ls -Z /test
      system_u:object_r:boot_t:s0 config-5.14.0-70.13.1.el9_0.x86_64
      system_u:object_r:boot_t:s0 efi
      system_u:object_r:boot_t:s0 grub2
      system_u:object_r:boot_t:s0 initramfs-0-rescue-f533a7d261374b28b305da65ada0f15f.img
      system_u:object_r:boot_t:s0 initramfs-5.14.0-70.13.1.el9_0.x86_64.img
      system_u:object_r:boot_t:s0 initramfs-5.14.0-70.13.1.el9_0.x86_64kdump.img
      system_u:object_r:boot_t:s0 loader
      system_u:object_r:boot_t:s0 symvers-5.14.0-70.13.1.el9_0.x86_64.gz
system_u:object_r:system_map_t:s0 System.map-5.14.0-70.13.1.el9_0.x86_64
      system_u:object_r:boot_t:s0 vmlinuz-0-rescue-f533a7d261374b28b305da65ada0f15f
      system_u:object_r:boot_t:s0 vmlinuz-5.14.0-70.13.1.el9_0.x86_64

増分バックアップの復元

増分バックアップを復元するには、最後の完全バックアップから始めて、それ以前に行われたすべてのバックアップの復元が必要です。この戦略を使用する場合、バックアップを復元するたびに、いわゆる「累積」モードを有効にする -r オプションを使用しなければなりません。たとえば、最初の増分バックアップ(レベル 1)を実施したときのファイルシステムの状態を復元したいとします。最初にレベル 0 または完全バックアップを復元し、このときコマンドに -r を追加します。

sudo xfsrestore -r -f /data/boot.xfsdump /test

次に、増分レベル1のバックアップを復元します:

sudo xfsrestore -r -f /data/boot.xfsdump1 /test

結論

このチュートリアルでは、xfsdumpおよびxfsrestoreユーティリティを使用してXFSファイルシステムのバックアップを作成および復元する方法を学びました。フルバックアップと増分バックアップの作成方法、バックアップを復元する際の手順、バックアップの中で特定のファイルのサブセットのみを除外/含める方法を見ました。

関連記事: