サーバ大量構築時のキモ ~Clonezillaの自動リストアディスク~
Pocket

以前にも紹介したClonezillaでのOSクローンだけども、これにはひとつ問題がある。

リストアの際、1台1台に手動でリストア設定を行わなければならないということだ。これは面倒臭い!

できれば、サーバの筐体にClonezilla OSのディスクを挿入したら、自動的にリストアが始まるようにしたい。

まずは実現可能かどうか、調べてみた。

The scenario – Clonezilla Live Doc

http://clonezilla.org/fine-print-live-doc.php?path=./clonezilla-live/doc/05_Preseed_options_to_do_job_after_booting/00-modify-syslinux-isolinux-cfg.doc

Customizing clonezilla iso for creating automatic backup image -All that Network-

http://allthatnetwork.blogspot.jp/2012/10/customizing-clonezilla-iso-for-creating.html

Sponsored Links

どうやら「syslinux/isolinux.cfg」を編集して、「/live/mystartup」というスクリプトを作成したClonezillaのカスタムディスクを用いる事で実現出来そうだ。

ただし、問題なのがClonezillaのバージョン。どうやら、これらはClonezillaのバージョンが現行のもの(メジャーバージョンが2以上)では採用出来ない方法のようだ。(「/opt/drb1」なんてフォルダ存在していないし)

そのため、使用するClonezillaのバージョンに注意してもらいたい。

今回は参考にしたページと同一バージョンの「Clonezilla Live 1.2.12-67」を採用する。こちらのページからダウンロードするといい。

ダウンロード以降の手順を簡単に記述すると以下。

  1. 「mystartup」というスクリプトを作成する
  2. Clonezillaからコピーした「syslinux/isolinux.cfg」を編集する
  3. 「mystartup」スクリプトを「/live」フォルダ直下に設置する
  4. 編集したClonezillaをディスクに焼く(ISOファイルにするでも可)

カスタムディスクの作成は、WindowsでやってもLinuxでやっても手順に違いは無いと思うけど、Windowsの場合はファイルシステムの違いを意識しないといけないような気がするので今回はUbuntuでカスタムディスクを作成していく。

使用するUbuntuは仮想マシンで構わない。今回は面倒なのでESXi上にすでに存在しているものを使っているが、現場によってはVirtual Boxでもいい。

また、環境はDHCPでIPアドレスが払い出されるものとして記述する。

Ubuntuに『ISO Master』をインストール

まずはUbuntuでISOファイルを作成したりするために『ISO Master』をインストールする。なお、すでにインストール済の場合はとばしてもらっていい。

sudo apt-get install isomaster

これでISO Masterが使えるようになった。

スクリプト『mystartup』作成

「/live」直下に設置するスクリプトファイル「mystartup」を作成する。
このスクリプトだが、実はClonezilla liveでコマンドプロンプトから操作すると、「/opt/drb1/samples/」フォルダ配下にサンプルのソースが存在している。

今回はそのサンプルのうちのひとつ「/opt/drb1/samples/custom-ocs-1」を参考にしている。

mystartup

#!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL
#
# In this example, it will allow your user to use clonezilla live to choose 
# (1) A samba server as clonezilla home image where images exist.
# (2) Choose an image to restore to disk.
 
# When this script is ready, you can run
# /opt/drbl/sbin/ocs-iso -g en_US.UTF-8 -k NONE -s -m ./custom-ocs-1
# to create the iso file for CD/DVD. or
# /opt/drbl/sbin/ocs-live-dev -g en_US.UTF-8 -k NONE -s -c -m ./custom-ocs-1
# to create the zip file for USB flash drive.
 
# Begin of the scripts:
# Load DRBL setting and functions
DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/opt/drbl/}"
 
. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
. $DRBL_SCRIPT_PATH/conf/drbl-ocs.conf
. $DRBL_SCRIPT_PATH/sbin/ocs-functions
 
# load the setting for clonezilla live.
[ -e /etc/ocs/ocs-live.conf ] && . /etc/ocs/ocs-live.conf
# Load language files. For English, use "en_US.UTF-8". For Traditional Chinese, use "zh_TW.UTF-8"
ask_and_load_lang_set en_US.UTF-8
 
# The above is almost necessary, it is recommended to include them in your own custom-ocs.
# From here, you can write your own scripts.
 
# 1. Configure network
 
# dhclient
sudo dhclient eth0
 
# 2. Mount the clonezilla image home. Available types:
# local_dev, ssh_server, samba_server, nfs_server
 
# prep-ocsroot -t samba_server
sudo mount -t cifs -o user="ユーザ名",password="パスワード" "//マウントするフォルダ" /home/partimag
 
sudo /opt/drbl/sbin/ocs-sr -g auto -e1 auto -e2 -b -r -j2 -p reboot restoredisk リストアするディスクイメージのフォルダ(&#12300;2014-04-20-13-img」など) sda
 
# 3. Restore the image
#if mountpoint $ocsroot &>/dev/null; then
#  ocs-sr -g auto -e1 auto -e2 -c -r -j2 -p choose restoredisk "ask_user" "ask_user"
#else
#  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
#  echo "Fail to find the Clonezilla image home $ocsroot!"
#  echo "Program terminated!"
#  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
#fi
 
#
#umount $ocsroot &>/dev/null

ポイントになるのは40行目と44行目。
40行目ではSambaフォルダをマウントさせており、44行目ではリストアのコマンド(ocs-sr)を実行させているので、環境に合わせて修正してもらいたい。

また、34行目でDHCPサーバからIPアドレスを払いだしてもらっているが、ここもifconfigで手動設定が可能なので、環境に合わせてもらいたい。

このスクリプトを作成する上での注意点は2つ。

  1. 権限にプログラムの実行権限をつけること
  2. 改行コードをLinux/UNIXのものにすること
これらに気をつけるため、作成はLinux上でやるほうが望ましい。

『isolinux.cfg』の置き換え

mystartupの作成後、今度は「/isolinux/isolinux.cfg」を以下の内容に置き換える。
一部を修正、追記しているだけだが、ファイルごと置き換えてしまった方がてっとり早い。

isolinux.cfg

# Created by generate-pxe-menu! Do NOT edit unless you know what you are doing! 
# Keep those comment "MENU DEFAULT" and "MENU HIDE"! Do NOT remove them.
# Note!!! If "serial" directive exists, it must be the first directive
default vesamenu.c32
timeout 300
prompt 0
noescape 1
MENU MARGIN 5
 MENU BACKGROUND ocswp.png
# Set the color for unselected menu item and timout message
 MENU COLOR UNSEL 7;32;41 #c0000090 #00000000
 MENU COLOR TIMEOUT_MSG 7;32;41 #c0000090 #00000000
 MENU COLOR TIMEOUT 7;32;41 #c0000090 #00000000
 MENU COLOR HELP 7;32;41 #c0000090 #00000000
 
# MENU MASTER PASSWD
 
say **********************************************************************
say Clonezilla, the OpenSource Clone System.
say NCHC Free Software Labs, Taiwan.
say clonezilla.org, clonezilla.nchc.org.tw
say THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! 
say **********************************************************************
 
# Allow client to edit the parameters
ALLOWOPTIONS 1
 
# simple menu title
MENU TITLE clonezilla.org, clonezilla.nchc.org.tw
 
# Since no network setting in the squashfs image, therefore if ip=frommedia, the network is disabled. That's what we want.
label Clonezilla customize  
  MENU DEFAULT  
  # MENU HIDE  
  MENU LABEL Clonezilla customize (Default settings, VGA 800x600)  
  # MENU PASSWD  
  kernel /live/vmlinuz  
  append initrd=/live/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run="/live/image/live/mystartup" ocs_live_extra_param="" ocs_live_keymap="NONE" ocs_live_batch="yes" ocs_lang="en_US.UTF-8" vga=788 ip=frommedia nosplash  
  TEXT HELP  
  * Clonezilla live version: 1.2.12-67-i686-pae. (C) 2003-2012, NCHC, Taiwan  
  * Disclaimer: Clonezilla comes with ABSOLUTELY NO WARRANTY  
  ENDTEXT  
 
label Clonezilla live
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (Default settings, VGA 800x600)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=788 ip=frommedia  nosplash
  TEXT HELP
  * Clonezilla live version: 1.2.12-67-i686-pae. (C) 2003-2012, NCHC, Taiwan
  * Disclaimer: Clonezilla comes with ABSOLUTELY NO WARRANTY
  ENDTEXT
 
MENU BEGIN Other modes of Clonezilla live
label Clonezilla live 1024x768
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (Default settings, VGA 1024x768)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=791 ip=frommedia  nosplash
  TEXT HELP
  VGA mode 1024x768. OK for most of VGA cards.
  ENDTEXT
 
label Clonezilla live 640x480
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (Default settings, VGA 640x480)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=785 ip=frommedia  nosplash
  TEXT HELP
  VGA mode 640x480. OK for most of VGA cards.
  ENDTEXT
 
label Clonezilla live (To RAM)
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (To RAM. Boot media can be removed later)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" noprompt vga=788 toram=filesystem.squashfs ip=frommedia  nosplash
  TEXT HELP
  All the programs will be copied to RAM, so you can
  remove boot media (CD or USB flash drive) later
  ENDTEXT
 
label Clonezilla live without framebuffer
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (Safe graphic settings, vga=normal)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" ip=frommedia nomodeset vga=normal nosplash
  TEXT HELP
  Disable console frame buffer support
  ENDTEXT
 
label Clonezilla live failsafe mode
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Clonezilla live (Failsafe mode)
  # MENU PASSWD
  kernel /live/vmlinuz
  append initrd=/live/initrd.img boot=live config  noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" acpi=off irqpoll noapic noapm nodma nomce nolapic nosmp ip=frommedia nomodeset vga=normal nosplash
  TEXT HELP
  acpi=off irqpoll noapic noapm nodma nomce nolapic 
  nosmp nomodeset vga=normal nosplash
  ENDTEXT
 
MENU END
label local
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Local operating system in harddrive (if available)
  # MENU PASSWD
  # 2 method to boot local device:
  # (1) For localboot 0, it is decided by boot order in BIOS, so uncomment the follow 1 line if you want this method:
  # localboot 0
 
  # (2) For chain.c32, you can assign the boot device.
  # Ref: extlinux.doc from syslinux
  # Syntax: APPEND [hd|fd]<number> [<partition>]
  # [<partition>] is optional.
  # Ex:
  # Second partition (2) on the first hard disk (hd0);
  # Linux would *typically* call this /dev/hda2 or /dev/sda2, then it's "APPEND hd0 2"
  #
  kernel chain.c32
  append hd0
  TEXT HELP
  Boot local OS from first hard disk if it's available
  ENDTEXT
 
MENU BEGIN Memtest & FreeDOS
 
# Note! *.bin is specially purpose for syslinux, 
# Do NOT use memtest.bin, use memtest instead of memtest.bin
label memtest
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Memory test using Memtest86+
  # MENU PASSWD
  kernel /live/memtest
  TEXT HELP
  Run memory test using Memtest86+
  ENDTEXT
 
label FreeDOS
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL FreeDOS
  # MENU PASSWD
  kernel memdisk
  append initrd=/live/freedos.img
  TEXT HELP
  Run FreeDOS
  ENDTEXT
 
MENU END
label iPXE
  # MENU DEFAULT
  # MENU HIDE
  MENU LABEL Network boot via iPXE
  # MENU PASSWD
  kernel /live/ipxe.lkn
  TEXT HELP
  Run iPXE to enable network (PXE) boot
  ENDTEXT
 
MENU END

ISOファイル作成

さて、書き込み用のファイルが作成できたので、実際にISOファイルを作成する。
ISO Masterの基本的な使い方については、こちらのページを参考にしてもらえればわかると思う。

UbuntuでISO Masterを起動させ、[開く]から元となるClonezillaのLive ディスクを開く。

開いた後、作成した「mystartup」を「/live」フォルダ直下に、「isolinux.cfg」を「/isolinux」直下の同名ファイルと置き換える。

ファイル設置後、[別名で保存]を行ってISOファイルを作成する。

以上で自動リストアディスクの完成。

リストアを行うイメージが4GB以下なのであれば、普通にリストアディスクの作成のほうが望ましいかも…
通常のリストアディスクの作成方法についてはまた今度記述してみる。

また、大規模なシステムなのであればClonezilla Server Editionの方が向いているかもしれない。
これもまた今度書いてみようと思う。

以上、Clonezillaでのsambaを用いた自動リストアディスクの作成方法でした。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。