Ubuntu 12.04 をサーバーとして復帰させるための環境設定は全て行った。
だが、既にサーバーはDHCPでありDNSなので、これなくしてインターネットに接続することができない。よって、現在作成したVMwareの環境をまるごと複製し、1つは動かしておきながら、もう一つのシステムのパーティションをイメージ化、物理システムに流し込むことにした。
作業のおおまかな流れは以下の通り。
- knoppix_v7.0.2 のダウンロード、DVDの作成。
HDDに対する操作を行う。 - ホストマシン(Windows7)の共有ディレクトリ設定の変更。(不思議エラーの回避)
- 作成したWMwareの環境をまるごと複製。
1つはそのまま起動し、1つはknoppixで起動する。 - knoppixで起動したシステムでパーティションイメージファイルを作成する。
- 物理システムをknoppixで起動し、パーティションイメージファイルを復元する。
- 物理システムを起動して、最終設定をする。
以降、手順を記載する。
ただし、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システムを起動する。
- VMwareで構築したシステムを止める。
- 構築したシステムをディレクトリごとコピーする。コピー元をa-system, コピー先をb-systemと呼ぶことにする。
- a-systemをそのまま起動してLANを管理させる。
- b-systemにはknoppixのディスクイメージをマウントして起動する。
なお、VMwareはデフォルトでHDDを優先して起動するので、VMwareの起動直後にBIOS設定を呼び出してCD/DVDが優先されるように設定を変更する必要がある。
■knoppixで起動したシステムでパーティションイメージファイルを作成する
b-system側で構築したシステムのパーティションをイメージ化する。
- b-systemで SSH Server を起動する。
- 操作用のマシンからSSH接続する。
- b-systemのHDDの空き領域に0を埋め込む。
- ホストマシンの共有ディレクトリをマウントする。事前にアクセスできることを確認しておく。
- 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
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他