1. HOME
  2. テックブログ
  3. さくらのVPSでOSバックアップ&リストアしてみた(CentOS7+LVM)

さくらのVPSでOSバックアップ&リストアしてみた(CentOS7+LVM)

現在とあるサービスで、さくらのVPSを使用しているが、同じミドルのバージョンの環境をさくらのVPS上に、もう1つ構築する必要が出てきた。
OSが若干古く、そのまま新規インストールしても、同じミドルのバージョンとならなかったりして、色々面倒なので、OSイメージをまるごとバックアップしてリストアすることにする。

ただ、通常、自分がOSイメージからリストアする際、OSインストーラーのトラブルシューティングからminimum状態でディスクにイメージ書き込みとかするから、ネットワーク経由ではなく、ローカルの追加ディスクにOSイメージのデータを置いて、そこからリストアしていた。

しかし、さくらのVPSは、追加ディスクがないので、バックアップデータを保存しておくことができない。
そこで、ネットワーク経由でリストアできるように、LinuxのLiveCDから起動して、ネットワーク経由でのOSリストアにトライしてみたので、その手順を備忘録的に書いてます。

※ちなみに、巷では、MondoRescueを使ってバックアップ&リストアをやる手順がすごく簡単で良さそうですが、(個人的に)あまり追加でインストール等はしたくなかったので、既存のアリモノだけでリストアする手順を記載してます。

環境

環境さくらのVPS
リージョンバックアップ元・リストア先、どこでもOK
(東京、石狩、大阪)(大阪、いつの間にか増えてたね。。)
OSCentOS 7.x
(多少古くても基本手順は変わらないです)
ディスク種別SSD
ディスク構成boot:xfs
root:lvm+xfs
LiveCDCentOS-7-x86_64-LiveGNOME-1511.iso
(一応、バックアップ元がCentOS7系なので、合わせてみました。)
バックアップデータ保管先他のさくらVPS上のLinux(CentOS7を使用)
※別にさくらVPSじゃなくても、ネットワークに繋がるローカル上のLinuxとか何でもOK。

大まかな手順と構成

ざっくり手順はこんな感じです。
① バックアップ元の構成確認
②(SSH経由で)xfsdump でバックアップ → バックアップデータ保管先のLinuxに保存。
③ さくらのVPSに、CentOS7 LiveCD をSFTPでアップロード & 起動
④ LiveCDのネットワーク、SSH等設定
⑤ リストア - ディスク再構成
⑥ SSH経由でデータリストア
⑦ OS固有設定変更

構成図

※今回は適切な環境がなかったので、別の環境からsshで接続してますが、同じさくらのVPSで同じリージョンであれば、同一LAN内でNFSサーバーなどを使ってマウントして、バックアップデータの出力やリストアすることも可能です。(こっちの方が速度は速いでしょう。)

Diskイメージ バックアップ

では、バックアップ元のSSDの構成等を確認してから、バックアップデータを取得しましょう。
※以降、特に断りのない限り、rootユーザーでの操作となります。

バックアップ元構成確認

バックアップ元のサーバーにSSHでログインし、構成情報を確認する。

構成確認

ディスク情報
# parted -l
↓これはLVMのSWAP領域
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/centos_ik1–123–65432-swap: 4178MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
ディスクフラグ:

番号  開始 終了    サイズ ファイルシステム  フラグ
 1    0.00B  4178MB 4178MB  linux-swap(v1)


↓これはLVMのroot領域。
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/centos_ik1–123–65432-root: 103GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
ディスクフラグ:

番号  開始 終了   サイズ ファイルシステム  フラグ
 1    0.00B  103GB 103GB   xfs


↓これが今回一番欲しいSSDの構成情報。
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 429GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始   終了 サイズ  タイプ ファイルシステム  フラグ
 1    1049kB  525MB 524MB   primary xfs             boot
 2    525MB   107GB 107GB   primary             lvm

※ちなみに、SSD容量400GBとなっているが、構築当初はSSD100GBであり、その後、プラン変更した為、SSD最大容量と実際に使用してるパーティション領域の容量は異なっていますが、気にしないでください。(特に容量が足りないわけではないので、パーティション容量も未拡張。)


マウント情報 / ディスク使用容量の確認
# df -hT
ファイルシス                            タイプ サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos_ik1–123–65432-root xfs         96G 3.0G   93G    4% /
devtmpfs                                devtmpfs 7.9G 0 7.9G 0% /dev
tmpfs                                   tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs                                   tmpfs 7.9G 33M 7.9G 1% /run
tmpfs                                   tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/vda1                               xfs 497M 144M 354M 29% /boot
tmpfs                                   tmpfs 1.6G 0 1.6G 0% /run/user/0
tmpfs                                   tmpfs 1.6G 0 1.6G 0% /run/user/1000
→3GBしかないので、バックアップ・リストア時間も早そう。

その他情報(一応確認)
# cat /etc/fstab
/dev/mapper/centos_ik1–123–65432-root /                       xfs defaults 1 1
UUID=12345678-90ab-cdef-edcb-a09876543210 /boot                   xfs defaults 1 2
/dev/mapper/centos_ik1–123–65432-swap swap                    swap defaults 0 0

# e2label /dev/vda1
→なし
# e2label /dev/vda2
→なし

# swapon -s
Filename                                Type Size Used Priority
/dev/dm-1                               partition 4079612 0 -1

# blkid
/dev/vda1: UUID=”12345678-90ab-cdef-edcb-a09876543210″ TYPE=”xfs”
/dev/vda2: UUID=”2JzxR0-mrr3-Ko1H-1vaq-OPOr-kqpc-9ccw2l” TYPE=”LVM2_member”
/dev/mapper/centos_ik1–123–65432-root: UUID=”abcdef01-2345-6789-abcd-ef0123456789″ TYPE=”xfs”
/dev/mapper/centos_ik1–123–65432-swap: UUID=”98765432-10fe-dcba-9876-543210fedcba” TYPE=”swap”

LVM関連
# pvdisplay
  — Physical volume —
  PV Name               /dev/vda2
  VG Name               centos_ik1-123-65432
  PV Size               99.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              25474
  Free PE               0
  Allocated PE          25474
  PV UUID               2JzxR0-mrr3-Ko1H-1vaq-OPOr-kqpc-9ccw2l

# vgdisplay
  — Volume group —
  VG Name               centos_ik1-123-65432
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  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       25474 / <99.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               RLwnHx-0Snq-22JP-iH2K-4kly-3Z4Y-mnB41L

# lvdisplay
  — Logical volume —
  LV Path                /dev/centos_ik1-123-65432/root
  LV Name                root
  VG Name                centos_ik1-123-65432
  LV UUID                LEexWQ-LiU5-gg3g-jLQB-iHeW-Dmwa-gtYUb9
  LV Write Access        read/write
  LV Creation host, time ik1-123-65432.vs.sakura.ne.jp, 2018-05-31 12:53:45 +0900
  LV Status              available
  # open                 1
  LV Size                <95.62 GiB
  Current LE             24478
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  – currently set to     8192
  Block device           253:0

  — Logical volume —
  LV Path                /dev/centos_ik1-123-65432/swap
  LV Name                swap
  VG Name                centos_ik1-123-65432
  LV UUID                BvREsF-bTsW-F5k6-EsPA-5u8c-KT0y-MP48kj
  LV Write Access        read/write
  LV Creation host, time ik1-123-65432.vs.sakura.ne.jp, 2018-05-31 12:53:46 +0900
  LV Status              available
  # open                 2
  LV Size                3.89 GiB
  Current LE             996
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  – currently set to     8192
  Block device           253:1
          996
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  – currently set to     8192
  Block device           253:1

(参考)
ちなみに、LVMは以下のようにシンボリックリンクで構成されているだけでした。

brw-rw—- 1 root disk 253, 0 2019/11/26 12:22:27 /dev/dm-0
brw-rw—- 1 root disk 253, 1 2019/11/26 12:22:27 /dev/dm-1
lrwxrwxrwx 1 root root 7 2019/11/26 12:22:27 /dev/mapper/centos_ik1–123–65432-root -> ../dm-0
lrwxrwxrwx 1 root root 7 2019/11/26 12:22:27 /dev/mapper/centos_ik1–123–65432-swap -> ../dm-1
lrwxrwxrwx 1 root root 7 2019/11/26 12:22:27 /dev/centos_ik1-123-65432/root -> ../dm-0
lrwxrwxrwx 1 root root 7 2019/11/26 12:22:27 /dev/centos_ik1-123-65432/swap -> ../dm-1

xfsdump でバックアップ

さて、構成確認ができたので、バックアップしていきましょう。
今回の対象は、
・boot 領域 : /dev/vda1
・root 領域 : /dev/centos_ik1-123-65432/root
のみバックアップ取得すればOKです。

可能であれば、シングルモード「init 1」で実行が望ましい(特にDBがある場合)ですが、今回はDBがあっても、DB自体も後でリストアしちゃうんで、そのまま行っちゃいます。

バックアップ時のコマンド書式はこんな感じ。

xfsdump -J - バックアップ対象ディスク > 出力ファイル名

※xfsdump コマンドオプション
-l 0  ダンプレベル0(フルバックアップ)
-J     dump inventory databaseを更新しない
-f          バックアップ出力先のファイルを指定します。

今回は、リモートでデータを遠隔の端末に保存しておくので、sshを使って接続させます。

さくらのVPS(バックアップ元サーバー)から、外部の端末(BackupDataHostIP)に接続できる場合はこんな感じ。

バックアップ元サーバーからの操作
# xfsdump -J – /dev/vda1 | ssh -i ~/.ssh/id_XXX USER@BackupDataHostIP “cat > /backup/Cent7_LVMxfs_vda1.dmp”
# xfsdump -J – /dev/centos_ik1-123-65432/root | ssh -i ~/.ssh/id_XXX USER@BackupDataHostIP “cat > /backup/Cent7_LVMxfs_vda2.dmp”

外部の端末から、バックアップ元のサーバーに接続する場合はこんな感じ。

外部の端末からの操作
# ssh -i ~/.ssh/id_XXX USER@BackupOrgHostIP sudo xfsdump -J – /dev/sda1  > /backup/Cent7_LVMxfs_vda1.dmp
# ssh -i ~/.ssh/id_XXX USER@BackupOrgHostIP sudo xfsdump -J – /dev/centos_ik1-123-65432/root  > /backup/Cent7_LVMxfs_vda2.dmp

これでバックアップデータが取得できました。(おそよ5分程度?)

外部の端末からの操作
# ll
-rw-r–r– 1 root root   123650424 2019/11/26 12:41:09 Cent7_LVMxfs_vda1.dmp
-rw-r–r– 1 root root  2968785088 2019/11/26 12:52:18 Cent7_LVMxfs_vda2.dmp

リストア

上記で取得したデータを、新しく契約したさくらのVPSにリストアしていきます。

LiveCD ダウンロード

CentOS7 LiveCDをダウンロードしておきます。
http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME-1908.iso

LiveCD アップロード & さくらのVPS起動

さくらのVPSに、CentOS7 LiveCD をSFTPでアップロードして、LiveCDで起動させます。
さくらのVPS サーバー管理コントロールパネルにログインし、該当のサーバーの「各種設定」→「OSインストール」を選択。

「OSインストール形式の選択」で、「ISOイメージ」を選択すると、「SFTPアカウントを発行する」ボタンが現れるので、これをクリック。

「ISOイメージアップロード先情報」が現れるので、その指示に従って、WinSCPなどのツールを使って、LiveCDにアップロードする。

アップロードしたところ。

しばらくすると、「ISOイメージ情報」が表示されることを確認し、「設定内容を確認する」ボタンをクリックします。

内容確認して、「インストールを実行する」をクリックします。

しばらくすると、「VNCコンソール」が表示されるので、クリックしてVNCコンソールを開きます。
(表示されなかったときは、上部の「>_コンソール」→「VNCコンソール」から開きます。

こんな感じの画面が開くので、マウスで画面全体をドラッグして、ロック画面からログイン画面にします。

日本語


日本語がいいいい

位置情報いらない

「使いはじめる」クリック

これで、LiveCDの起動は完了。
次からは初期設定していきます。

LiveCD初期設定

このままではネットワークに接続できないので、LiveCDの設定を最低限していきます。
左上の「Applications」→「Terminal」を開いて、以降、コマンド入力していきます。

rootにスイッチ

$ su –
#

IP設定

# nmtui

「Eddit a connection」選択

「Wired connection 1」 (eth0 とかじゃないんだね。。)

さくらのVPSのRestoreHost側のネットワーク情報を確認して、IP/Gatewayをこんな感じで設定していきます。
DNSは何でもいいので、適当なDNSを使います。

設定できたら、「<OK>」→「<Back>」→「Quit」で、元のコンソールに戻ってきます。

接続確認
# ping yahoo.co.jp
64 bytes from f1.top.vip.ssk.yahoo.co.jp (182.22.59.229): icmp_seq=1 ttl=53 time=3.93 ms
64 bytes from f1.top.vip.ssk.yahoo.co.jp (182.22.59.229): icmp_seq=2 ttl=53 time=3.94 ms
→こんな感じの応答があること。

※応答がない場合は、nmtuiで再度設定確認後、

# nmcli c down “Wired connection 1”
# nmcli c up “Wired connection 1”

をやってみる。

rootパスワード変更

# passwd root
→適当に。

SSH起動

# stemctl restart sshd
# stemctl status sshd -l

外部の端末からSSHできるか確認。

# ssh root@RestoreHost
→パスワードを入力して、ログインできることを確認。

※これ以降は、SSHでリモートログインして、操作していきます。
(その方がコピペなどの操作が楽ちんなので!)

パーテション再作成

パーテションを再作成していきます。

# parted -l
・・・
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB BIOS bios_grub
2 2097kB 526MB 524MB ext4 Microsoft
3 526MB 4821MB 4295MB linux-swap(v1) Linux
4 4821MB 215GB 210GB ext4 Microsoft
→現在は、何か入ってる。。? 気にせず削除。

ディスク初期化&再構成
元のディスクに合わせてパーティションなどを設定していきます。
# parted /dev/vda
(parted) mktable
New disk label type? msdos

(parted) print
Model: Virtio Block Devi
ce (virtblk)
Disk /dev/vda: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags

(parted) mkpart
パーティション タイプ? primary/extended? primary
ファイルシステムの種類? [ext2]? xfs
開始? 1049k
終了? 525M

(parted) print
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary
(parted) set 1
Flag to Invert? boot
New state? [on]/off? on

(parted) print
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary boot

(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 525MB
End? 107GB

(parted) set 2
Flag to Invert? lvm
New state? [on]/off? on

(parted) print
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary boot
2 525MB 107GB 106GB primary lvm


(parted) quit


※さくらのVPSの仕様が変わり、同じプランでもディスク容量が以前より増えてるけど、気にせず以前と同じ容量のパーティションを作成してます。必要に応じて容量増やしてあげてください。


LVM作成
これも元のLVMに合わせて設定していきます。


Physical Volume 作成
# pvcreate /dev/vda2


Volume Group作成
# vgcreate centos_ik1-123-65432 /dev/vda2


Logical Volume作成(SWAP、4GB)
# lvcreate -n swap -L 4g centos_ik1-123-65432


Logical Volume作成(root、残り全部)
# lvcreate -n root -l 100%FREE centos_ik1-123-65432



フォーマット
# mkfs.xfs /dev/vda1
# mkfs.xfs /dev/centos_ik1-123-65432/root

リストア

ここまでで前準備は完了です。ここからデータリストアしていきます。

vda1(boot)領域リストア

RestoreHost

マウント用のダミーフォルダ作成
# mkdir /tst

パーティション1 リストア。
# mount /dev/vda1 /tst

BackupDataHost

※ここだけ、リモートのBackupDataHostから操作する
# cat /backup/Cent7_LVMxfs_vda1.dmp | ssh root@RestoreHostIP xfsrestore -J -p 60 -r – /tst

RestoreHost

# ls /tst/
→boot領域のデータが格納されていること。
# umount /tst

lvm(root)領域リストア

RestoreHost

rootも、同様に実施。
# mount /dev/centos_ik1-123-65432/root /tst

BackupDataHost

ここだけ、リモートのBackupDataHostから操作する
# cat /backup/Cent7_LVMxfs_vda2.dmp | ssh root@RestoreHostIP xfsrestore -J -p 60 -r – /tst

RestoreHost

# ls /tst/
→root領域のデータが格納されていること。
# umount /tst

※LVM領域が上手く認識してくれない場合

#sfdisk -R /dev/vda

を実施してみる。

環境固有設定など

これでデータのリストアは完了しました。ここからは環境固有の設定等をしていきます。

各種設定

一度、全部マウントして、色々設定する。
# mount /dev/centos_ik1-123-65432/root /tst
# mount /dev/vda1 /tst/boot
# mount –bind /dev /tst/dev
# mount –bind /proc /tst/proc

UUID確認
# blkid
/dev/vda1: UUID=”06329ba0-d636-40f6-b03a-a67426b88066″ TYPE=”xfs”
/dev/vda2: UUID=”zkMGiz-cN1c-Wk1D-axOu-gUpd-E2An-OWBOFs”
TYPE=”LVM2_member”
/dev/mapper/centos_ik1–123–65432-root: UUID=”10a6a236-56fe-474a-a9a0-ebc10258ca3b” TYPE=”xfs”

UUID設定 →元のUUIDを、上記で確認したUUIDに直す。
# cp -rp /tst/boot/grub2/grub.cfg /tst/boot/grub2/grub.cfg.org
vda1のUUID
# sed -i -e “s/12345678-90ab-cdef-edcb-a09876543210/06329ba0-d636-40f6-b03a-a67426b88066/g” /tst/boot/grub2/grub.cfg
vda2のUUID(たぶんないけど)
# sed -i -e “s/2JzxR0-mrr3-Ko1H-1vaq-OPOr-kqpc-9ccw2l/zkMGiz-cN1c-Wk1D-axOu-gUpd-E2An-OWBOFs/g” /tst/boot/grub2/grub.cfg
root(LVM)のUUID
# sed -i -e “s/abcdef01-2345-6789-abcd-ef0123456789/10a6a236-56fe-474a-a9a0-ebc10258ca3b/g” /tst/boot/grub2/grub.cfg

fstab設定
# cp -rp /tst/etc/fstab /tst/etc/fstab.org
vda1のUUID
# sed -i -e “s/12345678-90ab-cdef-edcb-a09876543210/06329ba0-d636-40f6-b03a-a67426b88066/g” /tst/etc/fstab
vda2のUUID(たぶんないけど)
# sed -i -e “s/2JzxR0-mrr3-Ko1H-1vaq-OPOr-kqpc-9ccw2l/zkMGiz-cN1c-Wk1D-axOu-gUpd-E2An-OWBOFs/g” /tst/etc/fstab
root(LVM)のUUID
# sed -i -e “s/abcdef01-2345-6789-abcd-ef0123456789/10a6a236-56fe-474a-a9a0-ebc10258ca3b/g” /tst/etc/fstab
※fstab は、/dev/sdaX を指定してもOK。

以下はchrootして色々設定
# chroot /tst

MBR作成
# grub2-install /dev/vda
Installing for i386-pc platform.
device node not found  →複数出力されるが、気にしない

Installation finished. No error reported.


SWAP設定
# mkswap /dev/mapper/centos_ik1–123–65432-swap
# swapon -a
# swapon -s
Filename Type Size Used Priority
/dev/dm-3 partition 4194300 0 -2

IP設定
vi /etc/sysconfig/network-scripts/ifcfg-eth0
この辺は削除
#UUID=xxx-xxx-xxx-xxx
#IPV6ADDR=xxx:xxx:xxx:xxx…:xxx/64
#IPV6INIT=yes
#DNS3=2401:2500::1
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_DEFAULTGW=fe80::1
#IPV6_PRIVACY=no
#HWADDR=xx:xx:xx:xx:xx:xx

この辺はRestoreHostのIPに変更。
IPADDR=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.1
GATEWAY0=xxx.xxx.xxx.1

以下も必要に応じて同様に変更。(ここら辺はローカル用)
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth2


これらのIPも必要に応じて変更しとく。 # vi /etc/hosts


cron停止
# vi /etc/crontab
→必要に応じて、cronコメントアウト

SSHホスト鍵変更(必要に応じて。)
既存の鍵退避

# cd /etc/ssh/
# mv ssh_host_ecdsa_key ssh_host_ecdsa_key.org
# mv ssh_host_ecdsa_key.pub ssh_host_ecdsa_key.pub.org
鍵生成
# ssh-keygen -t ecdsa -b 256
Enter file in which to save the key (/root/.ssh/id_ecdsa):ssh_host_ecdsa_key
Enter passphrase (empty for no passphrase): [そのままEnter]
Enter same passphrase again: [そのままEnter]

ホスト名の変更(必要に応じて。)
# nmcli g hostname xxxxx.local

chroot終了
# exit

再起動
# reboot

※rebootしても再起動せず、そのまま終了するので、さくらVPSのコンソールから起動してあげる。

起動

⇒VPS起動

無事にOS起動してくれました!
起動後、グローバルIPへのアクセスや、各ミドル・サービス等の動作確認、他の固有設定等もあれば忘れずに行ってくださいね。

これで、さくらのVPS上に、サーバーリストアが完了しました。

最後に

今回は、さくらのVPS上でのリストアをメインに記載しましたが、応用すれば、他のVPSやクラウド、オンプレ等での相互間のバックアップ・リストアにも使えます。
ご自身の使ってる環境のバックアップ・リストアや、移設・移行の参考になれば幸いです。

ただ、今回はLVM+xfsの形式でのバックアップ方法とリストア方法を記載しましたが、ext3とかext4、LVMなしのxfsだったり、また違うOSであればZFSやufsだったりすると、手法が若干異なってきたりします(基本的な手順・流れは同じですが)ので、そのあたりは追々記載していくつもりです。。。


この記事を書いた人

インフラMr.Y
インターネットサービス事業本部 プロダクト開発本部 第一開発グループ
インフラMr.Y

おすすめの記事