コンピュータやソフトウェアのあれこれ@道民(&元道民)
debian
Debian squeezeでXen4.0からkvmへの移行
3月 8th
Xen4.0からkvmへのv2vをやる必要性がでてきたので、以下その記録。
自分用メモなので、どこの環境でもこの手順できるかどうかわからないけど、スジとしては悪くないと思う。
前提条件
- kvmのインストールと設定は終わってる
- Xen側ホストのOSはDebian Squeeze
- KVM側ホストのOSもDebian Squeeze
- 移行対象のVMのOSも当然Debian Squeeze
- Xen側ホストとKVM側ホストは別サーバである
以下のCDというかISOイメージを用意する。
- SystemRescueCD(参考:http://www.sysresccd.org/)
- GRUB2 boot CD(参考:http://oasis.halfmoon.jp/mw/index.php?title=BootCD)
つまり、新しいマシンを買ってきてそこにkvm on sqeuuzeの環境を構築して、そこにxen4.0で動いている古いマシンからVMをv2vするための手順。
アーキテクチャはamd64なので、適時読み替えてください。
1.kvm側ホストにvmをインストールするためのストレージを設定する。
ここでは、kvm側ホストのlvm領域にvmインストール用の領域を確保する。
# lvcreate -L 10G -n example_lv vmpool01vg
Logical volume “example_lv” created
#
2.xen側ホストのVMをshutdownする。
3.xen側ホストからVMのdiskファイルをKVM側ホストにコピーする
4.KVM側ホストでvirt-managerを起動し、VMの新規作成をクリックする。
> virt-manager &
Use ISO ImageにSystemRescuCDを選択する。
インストール先は手順1で作成したlvm領域を指定する。
それ以外は普通にVMを作る
5.KVM側VMの詳細でハードウェアを追加する
ストレージを選択し、手順3でコピーした旧VMのdiskファイルを追加する。タイプはIDE Disk。
6.KVM側ホストでVMを起動する
amd64のvmを移行する場合は、SystemRescuCDのboot画面で64bit kernelを選択する
7.SystemRescuCDがbootしたら、手順1で作成したlvm領域にファイルシステムを作成する
# fdisk /dev/vda
# mkfs.ext4 /dev/vda1
8.手順7で作成したファイルシステムをmountする
# mkdir /mnt/kvm
# mount -t ext4 /dev/vda1 /mnt/kvm
9.手順3でコピーした旧VMのdiskファイルをmountする
# mkdir /mnt/xen
# mount -t ext3 /dev/sda /mnt/xen
10.旧VMの中身を新VMにコピーする
# cd /mnt/xen
# cp -a bin boot etc export home lib lib64 media mnt opt root sbin selinux srv sys tmp usr var /mnt/kvm
11.新VMのファイルシステムに/devと/procのディレクトリをつくる
# cd /mnt/kvm
# mkdir dev
# mkdir proc
# chmod 555 proc
中身はOS起動時に自動的に作成されるのでコピーしたりしないこと。
12.新VMのファイルシステムに対してchrootする
# cd /
# chroot /mnt/kvm
13.kernelをインストールする
# aptitude update
# aptitude install linux-image-2.6-amd64
14./etc/fstabを編集する
/dev/vda1 / ext3 errors=remount-ro 0 1
15.新VMをシャットダウンする。VMの設定でgrub2 boot cdからbootするように設定する。
15.grub2 cdで新VMを起動させる
grubのコマンドラインで以下のコマンドを入力し、新VMのOSをbootさせる。
grub> insmod ext2
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-2.6.32-5-amd64 ro root=/dev/vda1
grub> initrd /boot/initrd.img-2.6.32-5-amd64
grub> boot
16.新VMにログインし、grub2をインストールする
# aptitude install grub
# grub-install /dev/vda
# update-grub2
17.新VMをシャットダウンし、grub2 boot cdを取り除く。
18.新VMをbootさせ正常に起動することと、正常に機能することを確認する。
以上で全行程終わりです。
[Linux][Debian][DB][aptitude]aptitudeでにっちもさっちも行かない状態を脱したときのメモ
7月 30th
数カ月程、aptitudeの以下のようなメッセージに困っていました。
postgresql-8.3 (8.3.7-0lenny1) を設定しています ... Starting PostgreSQL 8.3 database server: mainError: /var/lib/postgresql/8.3/main is not accessible or does not exist failed! failed! invoke-rc.d: initscript postgresql-8.3, action "start" failed. dpkg: postgresql-8.3 の処理中にエラーが発生しました (--configure): サブプロセス post-installation script はエラー終了ステータス 1 を返しました 以下のパッケージの処理中にエラーが発生しました: postgresql-8.3
aptitudeでupgradeなどを行うと、
このようなエラーが毎回つきまといました。
http://comments.gmane.org/gmane.linux.debian.jp.user/19531
ここを見ていろいろやってみたんですが、解決せず。
そしてエラーメッセージが変わりました。
E: パッケージ postgresql-8.3 のファイルの位置を特定できません。おそらくこのパッケージを手動で修正する必要があります。 拡張状態情報を書き込んでいます... 完了 E: パッケージ postgresql-8.3 のファイルの位置を特定できません。おそらくこのパッケージを手動で修正する必要があります。 E: 内部エラー: ダウンロードするパッケージの一覧を作成できませんでした
そして今日、
"E: 内部エラー: ダウンロードするパッケージの一覧を作成できませんでした"
で検索すると、
このページに行き着きました。
http://d.hatena.ne.jp/tanzen/20091025/1256563955
書いてあるようにやってみました。
消せなかったのは "postgresql-8.3" というパッケージだったので、
こんなふうにやってみました。
$ sudo rm /var/lib/dpkg/info/postgresql-8.3.prerm $ sudo dpkg --remove --force-remove-reinstreq postgresql-8.3 dpkg: warning: overriding problem because --force enabled: パッケージが非常に矛盾した状態に陥りました。 削除を行う前にこのパッケージを再インストールすべきです。 (データベースを読み込んでいます ... 現在 X 個のファイルとディレクトリがインストールされています。) postgresql-8.3 を削除しています ...
これで解決してくれたようです。
etch→lennyのはまりどころ postfix編
2月 22nd
lennyではpostfixが2.5になったため、data_direcrtoryというwritableなdirectoryが必要になった。
通常であれば問題発生しないんだけど、postfixを複数起動させてる場合、master.lockファイルで競合が発生して複数起動できない、という事象が発生する。
なので、二つめ以降のpostfixのmain.cfに以下の記述が必要になる。
data_directory = /var/lib/postfix2
このディレクトリは、postfixのオーナが書き込める必要がある。
# chown postfix:postfix /var/lib/postfix2
# chmod 600 /var/lib/postfix2
これで二つめ以降のpostfixを起動させれば、master.lockファイルの競合が発生せずに起動する。
etch→lennyのはまりどころ bind編
2月 22nd
bindが9.5になったせいだと思うんだけど、viewを使ってるときのroot hint zoneとかの扱いが変更になってるので、そのままだとbindが起動しない。
すべてのzoneを、viewの中に書く必要がある。
僕は、named.confに書いてあったroot hintなどをallzone.confというファイルに移動させて、各viewの中でincludeすることで対処した。