サーバ内蔵HDDをクローン化
#はじめに
搭載HDDが一本しかないサーバのディスク障害対策を考えます。バックアップをとっておけ!というのがそもそも論なのですが、最短復旧を目的にして「HDDをクローン化しておいて、HDDが飛んだときはいつでも差し替えて使えるようにする」という対策案を検証することになりました。
昔、Mondo Rescueを使ったり、商用のCDブートできるバックアップソフトで対応したことがありましたが、今回はClonezilla-2.6.6.15を使ってみます。
検証に使うマシンにはLinuxが入ってますが、Windowsが入っていても使える手法です。
#用意するもの
-
バックアップ対象のx86_64サーバ(VM on VMware vShpere Hypervisor 6.7u3 )
-
バックアップ先の外付けUSB-HDD
-
リストアする内蔵HDD
-
Clonezilla LiveのISO
#検証イメージ
おおまかな手順はこんなかんじです。
Step.1: Clonezilla Liveで起動
Step.2: 内蔵HDDの中身を外付けHDDにバックアップ
Step.3: 内蔵HDDを交換用のHDDと入れ替えて、外付けHDDからリストア
Step.4: 交換用HDDを抜き出し、予備パーツとする。内蔵HDDを戻して運用再開
#準備作業
Clonezilla LiveのブータブルCDメディアを作成します。作成といっても今回は仮想マシンで読み込めればいいので、実際のCDメディアに書き込みは行いません。ISOを取ってくるだけです。
本家のサイトからダウンロードしましょう。今回のバージョンは、2.6.6-15
https://clonezilla.org/downloads.php
ダウンロード前に3つの選択肢があるので、下記のように選んでダウンロードしました。
Item | Input |
---|---|
CPU architecutre | amd64 |
file type | iso |
repository | auto |
ダウンロードしたISOファイルはVMware vShpere Hypervisor(ESXi)のデータストアに配置します。
#Step.0: 準備作業(仮想マシンの設定変更)
今回の検証には、前に作ってあったCentOS8.1の入っている仮想マシンを使います。
まず、仮想マシンの設定を以下のとおり変更しました。
##Clonezilla Liveのセット
VMware ESXiにアクセスして、対象の仮想マシンの「設定の編集」
を開きます。CD/DVDドライブをデータストアISOファイル
にして、clonezilla-live-2.6.6-15.amd64.iso
を選択します。
##外付けUSB HDDの接続
次にUSB-HDDをVMware ESXiに接続します。今回はUSB3.0規格のものを使いました。これを仮想マシン側で認識させるために仮想マシンの「設定の編集」
を開き、新規デバイスでUSBコントローラ
を選びUSB3.0
を選択して追加します。
##CDブートさせるため処理
仮想マシンはそのまま起動すると仮想ディスクから普通にインスト済みのOSが上がってきてしまいます。CDからブートさせるため、起動時に起動元を選べるようにします。「設定の編集」
で仮想マシンオプションタブを開き、強制的にBIOSセットアップ
にチェックを入れます。こうすることで起動時に何からブートさせるか選ばせることができます。
#Step.1: Clonezilla Liveで起動
早速起動します。OSのブート画面に進まず、Boot Manager
の画面が開かれます。私の環境では以下の通りでした。
Boot normally
CentOS Linux
EFI Virtual disk (0.0)
EFI VMware Virtual SATA CDROM Drive(0.0)
EFI Network
EFI Network 1
EFI VMware Virtual SATA CDROM Drive(0.0)
を選択すると、ISOからブートされてグラフィカルな画面が立ち上がるので、Clonezilla live (Default settings, VGA 800x600)
を選びます。
最初にChoose language
で言語を選びます。はじめ日本語を選んでやってみたのですが、訳が分かりにくいので、私はen_US.UTF-8 English
で進めました。
このあとKeyboard configuration
でキーボード設定に進みます。デフォルトのkeep keep the default keyboard layout - US keboard
を選びました。
Clonezillaの対話画面をメニュー形式ですすめるか、CLIにするか尋ねられます。今回はメニュー形式で操作するためStart_Clonezilla Clonezilla
を選択して開始します。
#Step.2:内蔵HDDの中身を外付けHDDにバックアップ
Clonezillaが立ち上がり、モード選択メニューが表示されます。
device-image work with disks or partitions using image
device-device work directly from a disk or partition to a disk or partition
remote-source Enter source mode of remote device cloning
remote-dest Enter destination mode of remote device cloning
lite-server Enter_Clonezilla_live_lite_server
lite-client Enter_Clonezilla_live_lite_client
こういうソフトって、最初に選ぶのはバックアップ用途かリストア用途かという選択だと勝手に思い込んでたため、このメニュー画面で求められている意味が分からなかったのです。。
実際のバックアップ時の挙動としては
-
device-image
はHDDの内容をイメージファイル(実際はメタ情報を含む複数のファイル群)として、指定した先に作成してくれるモード。 -
device-device
はHDDの内容を別のHDDにまんま書き込んでくれるモード。
という動作でした。
今回はディスクの中身をイメージとして取得したいので、device-image
を選択します。
Clonezilla image directory
画面に進みます。ここではバックアップもしくはリストアしたいデバイスを選びます。
local_dev Use local device
ssh_server Use SSH server
samba_server Use SAMBA server (Network Neighborfood server)
nfs_server Use NFS server
webdav_server Use_WebDAV server
s3_server Use_AWS_S3_server
enter_shell Enter command line prompt. Do it manually
ram_disk Use memory
skip Use existing /home/partimag (Memory! *NOT RECOMMENDED*)
sambaやNFSは、リストアのときに使いそうな選択肢ですね。AWS S3まであるのはびっくりしました。
内蔵HDDのバックアップを接続されたUSB-HDDに作成するので、local_dev
を選択し、OKします。すると次のようなメッセージがながれます。
ocsroot device is local_dev
Preparing the mount point /home/partimag...
If you want to use USB device as a Clonezilla image repository, plese
* Insert USB device into this Machine *now*
* Wait for about 5 secs
* Press Enter key
so that the OS can detect the USB device and later we can mount it as /home/partimg.
press "Enter" to continue.....
USBデバイスをソースデバイスに使いたいときは、このタイミングで差し込めってことですね。私の場合は、もうすでにUSB-HDDは差し込んでいました。Enterを押します。
Every 3.0s: ocs-scan-disk
2020/06/13 05:12:40
You can insert storage device into this machine now if you want to use that, then wait for it to be detected.
Scanning devices... Available disk(s) on this machine:
===================================
Excluding busy partition or disk...
/dev/sda: Virtual_disk_ No_disk_serial_no 21.5GB
/dev/sdb: Transcend_ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2000GB
===================================
Update periodically. Press Ctrl-C to exit this window.
2つのディスクが認識されていることがわかります。一本目が仮想マシンが持つ仮想ディスクです。二本目がTranscend社製の2TBのUSB-HDDです。XXXの箇所はディスクのシリアルナンバーのようなので伏せました。
Ctrl-Cします。
/home/partimagにマウントさせるパーティションを選択します。バックアップ目的の時は、/home/partimagに書き出されますのでバックアップ先のディレクトリを指定するメニューです。
sda1 600M_vfat_NO_NAME(In_Virtual_disk_)_No_disk_serial_no
sda2 1G_ext4(In_Virtual_disk_)_No_disk_serial_no
sdb1 1.8T_vfat_0x41:_Dirty_(In_Transcend_)_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USB-HDD中に保存したいので、sdb1を選択します。するとディレクトリの一覧が表示されるので、バックアップしたいディレクトリを選びます。※ディレクトリの一覧の画面は割愛します。
USB-HDDの直下に作ってあったbackupというディレクトリを選びました。結果、以下のようにマウントされました。
Running: mount --bind -o noatime,nodiratime /tmp/ocsroot_bind_root/backup /home partimage
The file system disk space usage:
********************************************************.
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
/dev/sdb1[/backup] vfat 1.8T 113G 1.7T 6% /home/partimag
********************************************************.
Press "Enter" to continue......
操作モードを選択せよとのこと。
Beginner Beginner mode: Accept the default options
Expert Expert mode: Choose your own options
Exit Exit. Enter command line prompt
今回はExpert
モードを選んで、オプションを選びながら進めることにします。
次は、この作業で何をしたいのかを選ぶメニューです。バックアップするのか、リストアするのか、イメージを暗号化するのかなどを選べます。
savedisk Save_local_disk_as_an_image
saveparts Save_local_partitions_as_an_image
restoredisk Restore_an_image_to_local_disk
restoreparts Restore_an_image_to_local_partitions
1-2-mdisks Restore_an_image_to_multiple_local_disks
recovery-iso-zip Creage_recovery_Clonezilla_live
chk-img-restorable Check_the_image_restorable_or_not
cvt-img-compression Convert_image_compression_format_as_another_image
encrypt-img Encrypt_an_existing_unencrypted_image
decrypt-img Decrypt_an_existing_encrypted_image
exit Exit. Enter command line prompt
内蔵HDDをイメージとしてバックアップしたいので、savedisk
を選びました。
イメージファイルを格納するディレクトリ名を指定します。デフォルトだと日付-img
になるようです。
バックアップ元のローカルディスクを選択するメニューが表示されます。
[*] sda 21.5GB_Virtual_disk__No_disk_serial_no
私の環境では、もともとディスクを2本認識(sda,sdb)していて、そのうちsdbをバックアップの書き込み先に指定してるので、表示されるのは1本だけでした。このままOkします。
このあといくつかオプションを設定します。
バックアップに使うコマンド(partclone, partimage, dd, ntfsclone)をどうするか指定します。指定するといっても優先順位を決めるようです。
-q2 Priority: partclone > partimage > dd
-q1 Priority: Only dd ( supports all filesystem, but inefficient)
-q Priority: ntfsclone > partimage > dd
Priority: partimage > dd (no ntfsclone)
デフォルトの-q2
オプションで行きました。
[*] -c Client waits for confirmation before cloning
[*] -j2 Clone the hidden data between MBR and list partition
・・・省略・・・
ここでもデフォルトの-c
と-j2
だけを選んで進めました。
圧縮形式を指定します。
-zip Use parallel gzip compression for multicore/CPU
-z1 gzip compression (fast with a smaller image)
・・・省略・・・
-z0 No compression (fastest but largest image size)
バックアップ元が20GB程なのに対し、バックアップ先は1.8TBもあるので圧縮する意味がないですから、まずは-z0
の圧縮なしにしました。
作成されるイメージファイルは、あるサイズで切り出され、複数のファイルに分かれます。次に定めるオプションは、この切り出しを何MBごとに分けるか指定します。10MB以上で指定する必要があります。またFAT32イメージの場合、4096MB以上にしてはいけないとのことです。それと0にしてもダメです。デフォルトの4096
MBで進めます。
バックアップ前のファイルシステムにfsckをかけるかどうか尋ねられます。
-sfsck Skip checking/repairing source file system
-fsck Interactively check and repair source file system before saving
-fsck-y Auto (Caution!) check and repair source file system before saving
オプションを指定してfsck
かけてみます。
今度は、バックアップ後のイメージがリストアできるようなイメージであるかをチェックするかどうか指定します。なかなか親切な仕様です。
Yes, check the saved image
-scs No, skip checking the saved image
チェックしてもらうことにしました。
バックアップしたイメージファイルを暗号化するかどうかを決めます。
-senc Not to encrypt the image
-enc Encrypt the image
とくに暗号化する必要がないので、-senc
にします。
最後に、バックアップ実行後のアクションを選びます。
-p choose Choose reboot/shutdown/etc when everything is finished
-p cmd Enter command line prompt
-p reboot Reboot
-p poweroff Shutdown
私は終わったらCLIでプロンプトを表示させたいので、-p cmd
にしました。
以上で、設定終了です。
PS. Next time you can run this command directly:
/usr/sbin/ocs-sr -q2 -c -j2 -zip -i 4096 -fsck -senc -p cmd savedisk 2020-06-13-06.img sda
This command is also saved as this file name for later use if necessary: /tmp/ocs-2020-06-13-06-img-2020-06-13-06-51
Enterキーを押して実行させます。実行されると直後に今回のアクションの確認画面が表示されます。これのあとに実際にバックアップが進みます。
The following step is to save the hard disk/partition(s) on this machine as an image:
******************************************************.
Machine: VMware7,1
sda (21.5GB_Virtual_disk__No_disk_serial_no)
sda1 (600M_vfat_0x41:_Dirty_(In_Virtual_disk_)_No_disk_serial_no)
sda2 (1G_ext4(In_Virtual_disk_)_No_disk_serial_no)
sda3 (14.4G_LVM2_member(In_Virtual_disk_)_No_disk_serial_no)
******************************************************.
-> "/home/partimag/2020-06-13-06-img".
fsckを実行する設定している場合は、この後にfsckに関する画面も表示されます。
バックアップが走り出すと、画面上に進捗状況がグラフィカルに表示されます。
完了すると、リストア可能なイメージファイルかを確認してくれます。問題なければジョブが終了します。
Checking if udevd rules have to be restored...
This program is not startedby Clonezilla server, so skip nothing it the job is done.
Finished!
Generating a tag file for this image...
Now syncing - flush filesystem buffers...
Ending /usr/sbin/ocs-sr at YYYY-MM-DD HH:MM:SS UTC...
この後は、バックアップジョブ実行後のアクションとして設定した挙動に入ります。私の場合はコマンドプロンプトが返ってきました。
#Step:3 内蔵HDDを交換用のHDDと入れ替えて、外付けHDDからリストア
クローンHDDを作るためにHDDを交換します。仮想マシンでやっていますので、設定の編集
で22GB程のハードディスクを追加
してやります。そして先ほどまで使ってた仮想ディスクは削除してやりました。ただしデータストア上には残してます。
Clonezilla liveのISOを接続して、もう一度強制的にBIOSセットアップ
にチェックを入れてから起動させます。
開始までの一連の設定は下記の流れです。
- Boot Managerの表示されるので
EFI VMware Virtual SATA CDROM Drive(0.0)
を選びます。 -
Clonezilla live (Default settings, VGA 800x600)
を選びます。 -
Choose language
でen_US.UTF-8 English
を選びます。 -
Keyboard configuration
でkeep keep the default keyboard layout - US keboard
を選びます。 -
Start_Clonezilla Clonezilla
で開始します。
デバイスを指定するステップは以下のように進めました。
- バックアップ済のイメージファイルをリストアしたいので
device-image
を選びます。 - ローカルのディスクを使いたいので
local_dev
を選びます。
Scanning devices... Available disk(s) on this machine:
===================================
Error: /dev/sda: unrecognised disk label
Error: /dev/sda: unrecognised disk label
Excluding busy partition or disk...
Error: /dev/sda: unrecognised disk label
/dev/sda: Virtual_disk_ No_disk_serial_no 22.6GB
/dev/sdb: Transcend_ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2000GB
===================================
仮想ディスクがまっさらだったために、ディスクラベルが認識されないというエラーがでてますが、問題ないので進めます。
- /home/partimagにマウントさせるパーティションを選択します。リストアしたいイメージファイルが格納されているデバイスを選択します。この構成ではUSB-HDD一択なので、表示も1行だけでした。
sdb1 1.8T_vfat_0x41:_Dirty_(In_Transcend_)_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- イメージが格納されているディレクトリを指定します。私の例ではbackupディレクトリです。
Running: mount --bind -o noatime,nodiratime /tmp/ocsroot_bind_root/backup /home partimage
The file system disk space usage:
********************************************************.
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
/dev/sdb1[/backup] vfat 1.8T 113G 1.7T 6% /home/partimag
********************************************************.
Press "Enter" to continue......
- 操作モードを
Expert
にして進みます。 - イメージからリストアさせたいので
restoredisk Restore_an_image_to_local_disk
を選びます。 - イメージファイルを選択します。実際には/backupの直下にあるイメージファイルが格納されてディレクトリが表示されるので、リストアさせたいイメージを選びます。
- 書き込み先のディスクを選択します。私の環境では
/dev/sda 23.6GB_Virtual_disk_ No_disk_serial_no
だけしか表示されないので、そのままOkします。 - この後のオプションはデフォルトを選択しました。
- パーティションテーブルをどうするか聞かれます。
Use the partition table from the image
を選びそのままにします。 - リストア前にイメージを確認するか聞かれます。
Yes, check the image before restoring
でチェックすることにしました。 - 最後にジョブ完了後の挙動は、プロンプトを出したいので、
-p cmd
にします。
先に進めるとリストアが開始されます。途中、2回ほど本当にリストアに進んでいいの?と聞かれました。完了してコマンドプロンプトが返ってきたら、reboot
しましょう。
起動後に、正常性確認をしてみましたが、問題なく起動してきました。
#Step:4 交換用HDDを抜き出し、予備パーツとする。内蔵HDDを戻して運用再開
最後はディスクの戻しです。実機であればHDDを換装すればよいステップです。仮想マシンなので、もともとの仮想ディスクを追加して、リストアした後の仮想ディスクを外しました。こちらも起動させましたが全く問題なしです。
#おわりに
リストアのフローは、バックアップのときのフローと途中まで一緒なのでさくっと書きました。disk-diskの動作も確認しましたが、こちらも簡単でした。
ちょっと私にとっては癖のあるソフトウェアだったので、備忘のために書きました。