さくらのVPSでOSバックアップ&リストアしてみた(CentOS7+LVM)
現在とあるサービスで、さくらのVPSを使用しているが、同じミドルのバージョンの環境をさくらのVPS上に、もう1つ構築する必要が出てきた。
OSが若干古く、そのまま新規インストールしても、同じミドルのバージョンとならなかったりして、色々面倒なので、OSイメージをまるごとバックアップしてリストアすることにする。
ただ、通常、自分がOSイメージからリストアする際、OSインストーラーのトラブルシューティングからminimum状態でディスクにイメージ書き込みとかするから、ネットワーク経由ではなく、ローカルの追加ディスクにOSイメージのデータを置いて、そこからリストアしていた。
しかし、さくらのVPSは、追加ディスクがないので、バックアップデータを保存しておくことができない。
そこで、ネットワーク経由でリストアできるように、LinuxのLiveCDから起動して、ネットワーク経由でのOSリストアにトライしてみたので、その手順を備忘録的に書いてます。
※ちなみに、巷では、MondoRescueを使ってバックアップ&リストアをやる手順がすごく簡単で良さそうですが、(個人的に)あまり追加でインストール等はしたくなかったので、既存のアリモノだけでリストアする手順を記載してます。
環境
環境 | さくらのVPS |
---|---|
リージョン | バックアップ元・リストア先、どこでもOK (東京、石狩、大阪)(大阪、いつの間にか増えてたね。。) |
OS | CentOS 7.x (多少古くても基本手順は変わらないです) |
ディスク種別 | SSD |
ディスク構成 | boot:xfs root:lvm+xfs |
LiveCD | CentOS-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だったりすると、手法が若干異なってきたりします(基本的な手順・流れは同じですが)ので、そのあたりは追々記載していくつもりです。。。