サーバ運用の要の1つであるバックアップの取得方法です。

一昔前までは、データの整合性を保つため、Linuxをシングルユーザモードで起動してバックアップを取得する必要があり

シングルユーザモードで起動するため、バックアップ取得中はサービスの停止を余儀なくされていました。

最近のLinuxではLVM(Logical Volume Manager:論理ボリュームマネージャ)が採用されており

LVMのスナップショット機能を使うことでサービスを停止することなくバックアップ(オンラインバックアップ)を取得できるようになりました。

今回もCentOS7を使って設定します。

CentOS7からファイルシステムにxfsが採用されたのでバックアップコマンドは dump ではなく xfsdump コマンドを利用します。

0. LVMとスナップショットについて

スナップショットを利用するにあたり、まずLVMについて理解する必要があります。

LVMは下記で構成されています。

  • 物理ボリューム(physical volume)
  • 論理ボリュームグループ(volume group)
  • 論理ボリューム(logical volume)

構成のイメージは

です。

スナップショットの格納先は、論理ボリュームグループの未使用スペースを使います。

もし未使用スペースが無い場合は、

  • 論理ボリュームグループを拡張する
  • 論理ボリュームを縮小する
  • Linuxインストール時に未使用スペースを確保した構成にする

のいづれかの方法で確保してください。(別途解説します)

未使用スペースの容量は、スナップショットを取得する論理ボリュームの10%から20%程度です。

(ファイルの更新頻度やスナップショットの保持期間によってはさらに必要となる場合があります)

今回は論理ボリュームグループに22.51GBの未使用がある構成を利用します。

# vgdisplay
  --- Volume group ---
  VG Name               VolGroup01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               99.51 GiB
  PE Size               4.00 MiB
  Total PE              25474
  Alloc PE / Size       19712 / 77.00 GiB
  Free  PE / Size       5762 / 22.51 GiB
  VG UUID               ymDTJH-QJmj-OHAo-QNNv-FPal-7fiV-xyZdJb

 

1. スナップショットの取得

早速スナップショットを取得してみます。

現在の論理ボリュームはこちらです。

# lvscan
  ACTIVE            '/dev/VolGroup01/root' [25.00 GiB] inherit
  ACTIVE            '/dev/VolGroup01/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/VolGroup01/home' [50.00 GiB] inherit

/dev/VolGroup01/root と/dev/VolGroup01/home のスナップショットを取得します。

スナップショットのサイズは、今回はざっくり5GB( -L 5G )としました。

実際に運用する際は、ファイルの更新頻度やスナップショットの保持期間にあわせて調整してください。

# lvcreate -s -L 5G -n root_snap /dev/VolGroup01/root
  Logical volume "root_snap" created.
# lvcreate -s -L 5G -n home_snap /dev/VolGroup01/home
  Logical volume "home_snap" created.

Snapshotが増えていれば取得完了です。

# lvscan
  ACTIVE   Original '/dev/VolGroup01/root' [25.00 GiB] inherit
  ACTIVE            '/dev/VolGroup01/swap' [2.00 GiB] inherit
  ACTIVE   Original '/dev/VolGroup01/home' [50.00 GiB] inherit
  ACTIVE   Snapshot '/dev/VolGroup01/root_snap' [5.00 GiB] inherit
  ACTIVE   Snapshot '/dev/VolGroup01/home_snap' [5.00 GiB] inherit

 

2. nfsサーバの準備

バックアップファイルをnfsサーバに格納するため事前にnfsサーバを構築します。

必要なパッケージをインストールします。

# yum install nfs-utils

idmapd.conf ファイル内の記述を自ドメインに修正します。

# vi /etc/idmapd.conf

[General]
#Domain = local.domain.edu
Domain = localdomain       # 追加します。

バックアップデータを保存するディレクトリを作成します。

# mkdir /backup

共有するディレクトリを指定します。

# vi /etc/exports

/backup 192.168.24.0/24(rw,wdelay,no_root_squash,no_subtree_check)

no_root_squash はrootでマウントするためです。

NFS サービスを起動します。

# systemctl start nfs-server
# systemctl enable nfs-server

 

3. バックアップの取得

nfsサーバの共有ディレクトリをマウントします。

# mkdir /backup
# mount -t nfs 192.168.24.63:/backup /backup

xfsdumpコマンドを使ってバックアップを取得します。

まずはディスク構成情報を出力します。

# fdisk -l > /backup/fdisk.txt
# df -k > /backup/df.txt
# pvdisplay > /backup/pv.txt
# vgdisplay > /backup/vg.txt
# lvdisplay > /backup/lv.txt
# cat /etc/fstab > /backup/fstab.txt
# ls -l /dev/disk/by-uuid/ > /backup/uuid.txt

スナップショットを一旦マウントします。マウントしないとバックアップができません。

参考:xfsdumpでdoes not identify a file system

# mkdir /mnt/root_snap
# mkdir /mnt/home_snap
# mount -t xfs -o ro,nouuid /dev/VolGroup01/root_snap /mnt/root_snap
# mount -t xfs -o ro,nouuid /dev/VolGroup01/home_snap /mnt/home_snap

/boot のデバイスを確認します。

# mount | grep /boot
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)

/boot、/root、/homeのバックアップを取得します。

# xfsdump -J -l 0 - /dev/sda1 2>> backup_boot.log | cat | gzip > /backup/boot.dump.gz
# xfsdump -J -l 0 - /dev/VolGroup01/root_snap 2>> backup_root.log | cat | gzip > /backup/root.dump.gz
# xfsdump -J -l 0 - /dev/VolGroup01/home_snap 2>> backup_home.log | cat | gzip > /backup/home.dump.gz

ログファイルが出力されますので内容を確認します。
ステータスが

xfsdump: Dump Status: SUCCESS

となっていればバックアップ処理が完了です。

 

4. 後処理

マウントした各スナップショットを解除します。

# umount /mnt/root_snap/
# umount /mnt/home_snap/

スナップショットを削除します。

参考:スナップショットのパフォーマンス

# lvremove /dev/VolGroup01/root_snap
Do you really want to remove active logical volume root_snap? [y/n]: y
  Logical volume "root_snap" successfully removed
# lvremove /dev/VolGroup01/home_snap
Do you really want to remove active logical volume home_snap? [y/n]: y
  Logical volume "home_snap" successfully removed

スナックショットが削除されていることを確認します。

# lvscan
  ACTIVE            '/dev/VolGroup01/root' [25.00 GiB] inherit
  ACTIVE            '/dev/VolGroup01/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/VolGroup01/home' [50.00 GiB] inherit

 

お疲れ様でした。

 

Joomla templates by a4joomla