Ubuntu 12.04 サーバー再構築(14) V2P 仮想環境を物理環境へ移行する

Ubuntu 12.04 をサーバーとして復帰させるための環境設定は全て行った。

だが、既にサーバーはDHCPでありDNSなので、これなくしてインターネットに接続することができない。よって、現在作成したVMwareの環境をまるごと複製し、1つは動かしておきながら、もう一つのシステムのパーティションをイメージ化、物理システムに流し込むことにした。



作業のおおまかな流れは以下の通り。

  1. knoppix_v7.0.2 のダウンロード、DVDの作成。
    HDDに対する操作を行う。
  2. ホストマシン(Windows7)の共有ディレクトリ設定の変更。(不思議エラーの回避)
  3. 作成したWMwareの環境をまるごと複製。
    1つはそのまま起動し、1つはknoppixで起動する。
  4. knoppixで起動したシステムでパーティションイメージファイルを作成する。
  5. 物理システムをknoppixで起動し、パーティションイメージファイルを復元する。
  6. 物理システムを起動して、最終設定をする。

以降、手順を記載する。
ただし、knoppixのダウンロードとメディアへの焼き込み方法は割愛。


■ホストマシン(Windows7)の共有ディレクトリ設定の変更

この手順をまとめながら実行していたら、パーティションのイメージファイルを作成している所で容量不足のエラーが発生した。

色々見てみると、Windows7の共有ディレクトリをLinuxからマウントしようとすると
mount error(12): Cannot allocate memory
というエラーが出たという情報が甚だ多数あるので、やってみると同じエラーが出た。

解決方法はレジストリ値 IRPStackSize の値を十分に増やす、ということらしい。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\IRPStackSize
DWORDで作成して30を設定。

ウチの場合はキーが無かったのでデフォルト値の15が適用されているのかな。
3ずつ増やして試す、というのが解決方法だそうなので・・・

んー、じゃあ一気に30で、と設定してWindows7を再起動したら問題解消した。


■作成したWMwareの環境をまるごと複製

VMwareの環境をまるごとコピーして2システムを起動する。

  1. VMwareで構築したシステムを止める。
  2. 構築したシステムをディレクトリごとコピーする。コピー元をa-system, コピー先をb-systemと呼ぶことにする。
  3. a-systemをそのまま起動してLANを管理させる。
  4. b-systemにはknoppixのディスクイメージをマウントして起動する。
    なお、VMwareはデフォルトでHDDを優先して起動するので、VMwareの起動直後にBIOS設定を呼び出してCD/DVDが優先されるように設定を変更する必要がある。

■knoppixで起動したシステムでパーティションイメージファイルを作成する

b-system側で構築したシステムのパーティションをイメージ化する。

  1. b-systemで SSH Server を起動する。
  2. 操作用のマシンからSSH接続する。
  3. b-systemのHDDの空き領域に0を埋め込む。
  4. ホストマシンの共有ディレクトリをマウントする。事前にアクセスできることを確認しておく。
  5. partimageでシステムが入ったパーティションをイメージファイルにする。

具体的には以下を実行する。

b-systemで起動したknoppixで スタート→Knoppix→Start SSH Serverを実行してパスワードを決めておく。これでssh接続ができるようになる。

IPアドレスはdhcpサーバーが自動で割り振るが、dnsがホスト名を管理しているので、microknoppixというホスト名で接続ができる。Start SSH Serverを実行した時に決めたパスワードで接続ができる。

sshで接続したらHDDの空き領域に0を書き込む。これにより、VMwareのHDDイメージファイルはほぼ最大のサイズになるが、後の操作で作成するパーティションのイメージは小さくなる。
無駄なデータをイメージ化→復元しなくて良いのでオススメ。

$ sudo dd if=/dev/zero of=/zero bs=256M

0を書き込んだ巨大なファイルを削除する。

$ sudo rm -f /zero

次に、GPartedでパーティションのサイズを調整する。
コピー先のHDDより小さくしておかないと復元ができないのでサイズを調整する。

スタート → 設定 → GParted

で /dev/sda1 のサイズを縮小しておく。
この操作は短時間で終了する。

ホストマシン(Windows)の共有ディレクトリを作る。ここにパーティションのイメージを保存するつもり。Windowsの操作方法なので、具体的な手順は割愛。

b-systemでホストマシンの共有ディレクトリをマウントする。
まず、マウントポイントを作成。

$ sudo mkdir /mnt/landisk

マウントする。ホストマシン(hogehost)のpublicという名前の共有ディレクトリに、ホストマシンのユーザ(hoge)で接続してマウントする。

$ sudo mount.cifs //hogehost/public/ /mnt/landisk -o username=hoge,codepage=utf8,iocharset=utf8

パスワードを聞かれるので、入力するとマウントできる。

partimageを起動し、パーティションをバックアップする。

$ sudo partimage

各項目に以下を入力する。それ以外はデフォルトでいいと思う。

Partition Image 0.6.8画面

  • * Partition to save/restore
    sda1 を選択
  • * Image file to create/use
    /mnt/landisk/hogeserver.img と入力しておく。
  • Action to be done:
    Save partition into a new image file を選択。
  • F5キーで次へ進む。

save partition to image file画面

  • Compression level
    Gzip (.gz: medium speed + small image file) を選択。
  • F5キーで次へ進む。

Partition description画面

  • You can enter a description of the saved partition:
    必要ならメモを入れておく。入れなくても良い。
  • Enterキーで次へ進む。

Ext3fs informations画面

  • 情報表示がされるのでEnterキーで次へ進む。

以上でパーティションのイメージがファイル化される。
終了メッセージが表示されたら Enter キーで partimage を終了させ、システムをシャットダウンする。

これにてb-systemは役目を終えたので、削除。


■物理システムをknoppixで起動し、パーティションイメージファイルを復元する

物理マシンでknoppixを起動する。起動するために knoppix の DVD を焼いておいた。
起動したらSSH Serverを起動しておく。Teratermで操作ができて楽チン。

起動後、ターゲットとなるHDDがどれか確認しておく。
今回は sda がターゲットのHDDだった。

さて、イメージを復元していく。
先ほど保存したパーティションイメージにアクセスするため、マウントポイントを作成してマウントする。

$ sudo mkdir /mnt/landisk
$ sudo mount.cifs //hogehost/public/ /mnt/landisk -o username=hoge,codepage=utf8,iocharset=utf8

パーティションイメージを復元していく。

$ sudo partimage

Partition Image 0.6.8画面

  • * Partition to save/restore
    sda1を選択
  • * Image file to create/use
    /mnt/landisk/hogeserver.img.000 と入力しておく。
  • Action to be done:
    Restore partition from an image file を選択。

restore partition from image file画面

  • そのまま続行。
  • 確認メッセージが表示される。問題がなければ続行。

復元が終わったらシステムを再起動し、パーティションの状態をシステムに読み込ませる。

再起動後、/sda1のサイズをパーティションの実サイズに合わせ、/sda1をマウントしてchrootし、grubを再セットアップする。

$ sudo mount /dev/sda1 /media/sda1         ←マウント
$ sudo mount --bind /dev /media/sda1/dev   ←chrootの準備
$ sudo mount --bind /proc /media/sda1/proc ←chrootの準備
$ sudo chroot /media/sda1                  ←chroot
# grub-install /dev/sda                    ←grubインストール
Installation finished. No error reported.

もしエラーが発生したら、一番下に書いたメモを参照のこと。

シャットダウンし、DVDを取り出す。
そして、Ubuntuが立ち上がることを確認する。


■物理システムを起動して、最終設定をする

物理システムが正しく起動したら、一旦シャットダウンして、再度knoppixで起動する。

partimageで復元できるのは

実パーティションのサイズ≧パーティションイメージ

であり、パーティションイメージの方が小さい今、アクセスできない領域が残ってしまっている。

これを整理する。

$ sudo e2fsck -f /dev/sda1
e2fsck 1.42.2 (9-Apr-2012)
Superblock last mount time is in the future.
        (by less than a day, probably due to the hardware clock being incorrectly set)  Fix? yes
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 233344/3866624 files (0.2% non-contiguous), 11891354/15456512 blocks

この時点でマウントしてdfを見てみると以下の様な結果。まだ、サイズは修正できていない。

$ df -H
/dev/sda1         64G   49G   12G   81% /media/sda1

続いて、以下を実行。e2fsckの後に続けて実行しないとエラーが発生することに注意。

$ sudo resize2fs /dev/sda1
resize2fs 1.42.2 (9-Apr-2012)
Resizing the filesystem on /dev/sda1 to 19275519 (4k) blocks.
The filesystem on /dev/sda1 is now 19275519 blocks long.

この時点でマウントしてdfでみてみると以下のとおりサイズが修正されている。

$ df -H
/dev/sda1         79G   49G   27G   66% /media/sda1

ココでもシステムを再起動してUbuntu12.04が起動することを確認する。

すべての操作がうまく行っているなら、この時点で物理システムが正しく立ち上がってくるはずだ。

起動したら物理システムにモニタをつなぎ、GUIでログインしてネットワーク設定をやり直す。
なお、xmingで接続してもネットワーク接続設定は変えられなかったので要注意。

ネットワーク接続画面を開くと以下の2接続が表示されていた。
Wired connection 1 と
Wired connection 2 の2つになっている。

Wired connection 1 は VMwareで構築した際に使用していた仮想のeth0に割り付けられていたもの。基本的な設定は Wired connection 1 で行なっているので、1に物理システムのeth0を割り当てる。

具体的には、Wired connection 1 を編集ボタンで開き、MACアドレスをeth0のものに取り替える操作を行えば良い。

次にswap領域を再設定する。
最初に用意したswap領域のUUIDを調べる。

$ blkid
/dev/sda1: UUID="nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn" TYPE="ext4"
/dev/sda2: LABEL="Swap" UUID="mmmmmmmm-mmmm-mmmm-mmmm-mmmmmmmmmmmm" TYPE="swap"

これを /etc/fstab に書き込む。

/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda2 during installation
UUID=mmmmmmmm-mmmm-mmmm-mmmm-mmmmmmmmmmmm none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

swapを有効化する。

$ sudo swapon -a

再起動する。

$ sudo reboot

以上の操作で物理システムへの移行が完了した。


■構築用に作ってきたa-systemの設定を変える

構築用に作ってきたa-systemはサブ用に設定を変えていく。
お試しで色々やってみるには良い環境だから。

/etc/hostname
hogeserver2

/etc/hosts
※一部抜粋
127.0.1.1  hogeserver2

更に、dhcp、bind9が起動しないように設定する。

$ sudo sysv-rc-conf

画面上、dhcpは isc-dhcp-$ と表示れることに注意。


■途中で発生したエラーメモ。

最初は –force オプションを付けなくても上手くインストールができたが、swapの領域を調整するために cfdisk でパーティションを切り直し、空き領域を完全に整理したら以下のエラーが出るようになった。

# grub-install /dev/sda
/usr/sbin/grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!.
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
/usr/sbin/grub-setup: エラー: will not proceed with blocklists.

この場合には –force をつけるらしい。

# grub-install --force /dev/sda
/usr/sbin/grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!.
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.

■ホスト名を変えた後に名前解決ができない

ホスト名を変えてもdhcpdが与えるIPアドレスは同一であり、bind9はそれを許容しない。

Jun  1 17:21:06 hogeserver dhcpd: DHCPREQUEST for 172.16.xxx.xx7 from nn:nn:nn:nn:nn:nn (hogeserver2) via eth0
Jun  1 17:21:06 hogeserver dhcpd: DHCPACK on 172.16.xxx.xx7 to nn:nn:nn:nn:nn:nn (hogeserver) via eth0
Jun  1 17:21:06 hogeserver named[952]: client 172.16.xxx.xx7#39299: updating zone 'hogeserver.hogeddns.jp/IN': update unsuccessful: Microknoppix.hogeserver.hogeddns.jp/TXT: 'RRset exists (value dependent)' prerequisite not satisfied (NXRRSET)
Jun  1 17:21:06 hogeserver named[952]: client 172.16.xxx.xx7#43509: update '16.172.in-addr.arpa/IN' denied

今回の場合、変更前に起動していた knoppix のホスト名が Microknoppix であり、これをdhcpdが覚えていた。

以降メモ。結論が出たら更新予定。

ゾーン情報の一覧は以下のコマンドで作成できる。
$ sudo rndc dumpdb -zones

ファイルは以下の通り。
/var/cache/bind/named_dump.db

$ nsupdate
> server hogeserver
> update delete Microknoppix.hogeserver.hogeddns.jp
> bye

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です