サーバのデータ移行

最終的にはOSバージョンアップしましたが、何かの時の為にと失敗した内容のメモです。

サーバ用に使っていたPCが壊れました。幸いHDDは無傷でしたが既に古いPCで同じものは有りません。
そこでなぜかノートPCが用意されてこれでよろしくとのこと・・・
マザーボードからCPUもメモリもHDDサイズも何もかも違いますがそこに全てのデータを移行し
使えるようにしなければいけなくなりました。

dumpを取ってrescureモードでリストアする事をすぐに思いつきましたが
旧サーバのdumpを取れるHDDがありません。
さらにインストールしたメディアもありません。
※私が構築したサーバでは無いです
ひとまず直接ハードディスクからコピーできるddコマンドを使ってデータ移行してみる事にしました。

旧サーバのHDDを取り出してUSB接続にします。
それを新しくもらったノートPCにUSBで接続します。

linuxOSのCDを入れて、linux rescureモードで立ち上げます。

diskのフォーマットを聞かれるが既にフォーマット済みなので「NO」で進めます。

レスキューモードで立ち上がってきたらひとまず認識状況を確認

sh-3.2# fdisk -l
Disk /dev/sda: 251.0 GB, 251041677312 bytes
255 heads, 63 sectors/track, 30520 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/xvdc1 * 1 1044 8385898+ 83 Linux
/dev/xvdc2 1045 2088 8385930 83 Linux
/dev/xvdc3 2089 2610 4192965 82 Linux swap / Solaris
/dev/xvdc4 2611 30515 224146912+ 5 拡張領域
/dev/xvdc5 2611 30515 224146881 83 Linux

Disk /dev/sdb: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System

どうやらUSBで接続している方をsdaとして認識している模様
ノートPCのDiskはまだ何もされていない状態です。

まずfdiskで旧ディスクのパーティションとまったく同じパーティションを作成します。
1~3がプライマリ、4に拡張を入れて5に拡張パーティションをつくります。

sh-3.2# fdisk /dev/sdb

n

extended
primary

w

作成が終わったら
ddコマンドにてデバイスを丸ごとコピーします。
エラーが発生した時の事を考えてエラーは無視させます。

# dd if=/dev/sda of=/dev/sdb bs=512 conv=noerror,sync

エラーもなく問題なく完了

再起動するとkernelパニックで起動できない・・・

> mount:could not find filesystem ‘/dev/root’
> setuproot:moving /dev failed:No such file or directory
> setuproot:error /proc :No such file or directory
> setuproot:error /sys :No such file or directory
> switchroot: mount failed:No such file or directory

エラー内容をみるとrootパーティションが見つけられないようでした

そこでもう一度rescureモードで起動

grub.confを編集
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-8.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-8.el5 ro
root=LABEL=/ ⇒ root=/dev/sda1 直接デバイスを指定
initrd /boot/initrd-2.6.18-8.el5.img

再起動しましたがやはり同じ所でエラー
initrd.img部分の問題が考えられるので再設定をしようとした所、
depmodでカーネルが違う事に気がつく
元のOSはcentOS5、レスキューに使ってるOSはcentOS5.4
仕方ないのでカーネルバージョンを5.4に合わせて作ってみる

initrdの再設定

chroot /mnt/sysimage
depmod -a
uname -r
mv /boot/initrd-******.img /boot/initrd-******.img.org
mkinitrd /boot/initrd-*****.img *******

再起動しましたが結局エラー

カーネルの再構築も考えましたがなんとCentOS5.4のカーネル2.6.18-164.el5は
コンパイルできませんでした。
“`init/built- in.o’ に必要なターゲット `init/main.o’ を make するルールがありません。中止。”と言われる。

困った・・・

今日(2013年6月25日)CentOS5.0を探す事も難しい

そのあといろいろ調べたのですがどうやらブートドライブをIDEからSATAに変更した事が
問題のようでした。

必要なモジュールを入れてinitrdを再作成すればよいようです。

カーネルの再構築の実施

linux rescueでカーネルを再構築する事は初めてですがやってみました。
現在2.6.18-8.el5
入れるもの2.6.18-348.el5

kernel-2.6.18-348.el5.src.rpmをダウンロード

ネットワークの設定をせずに入っていたので既存のネットワークを起動します。
# /etc/init.d/network [OK]
無事起動

直接wgetもできるかもですがひとまずローカルのlinuxサーバからsftpで取ってきます。
※sftpなので元のssh_keyに登録されていないサーバは新規で登録できないので注意

とりあえず以前接続してssh_key登録のあるサーバからダウンロードしました。

rpmインストールを実施

# rpm -ivh kernel-2.6.18-348.el5.src.rpm

warning: user mockbuild does not exitst – using root
warning: group mockbuild does not exitst – using root

上記のエラーが大量にでました。

恐る恐るkernelソース関連ファイルがあるかどうか確認
/usr/src/redhat/SPECS/
/usr/src/redhat/SOURCES/

お!ちゃんとできてる

とりあえずスルーして作業を進める

ハードウェアを確認してパッチを適用する
# uname -m
i686

# rpmbuild -bp –target=i686 /usr/src/redhat/SPECS/kernel.spec

Error: Failed build dependencies:

依存関係のエラーがでました。

ここは依存関係を無視して進みます。

# rpmbuild -bp –nodeps –target=i686 /usr/src/redhat/SPECS/kernel.spec

一応終わりました。

/usr/src/redhat/BUILD/kernel-2.6.18 ができてその下に
linux-2.6.18-348.el5.i686というフォルダができているので移動

# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18-348.el5.i686

ここにはカーネルをビルドする為のファイルがあります。
そのままでもいいかもしれませんがひとまず初期化します。
もし現在の.configをとっておきたいのであればどこかに退避して下さい。

初期化
# make mrproper

やはり大量にwarningがでるがスルー

初期設定ファイルをコピーする
# cp configs/kernel-2.6.18-i686.config .config

カーネルに組み込む設定をする
# make menuconfig

GRUBなのでbzImageでコンパイルする
# make bzImage

なぜかループしている模様・・・
warning: Clock skew detected. Your build may be incomplete.

と出ている。時刻がおかしいようだ。

# ntpdate NTPサーバ

時刻を合わせると進みました。

Root device is (8, 1)
Boot sector 512 bytes.
Setup is 7266 bytes.
System is 1858 kB
Kernel: arch/i386/boot/bzImage is ready

終わるとarch/i386/boot/bzImageという名前のカーネルが作成される

モジュールのコンパイルとインストールの実行
# make modules
# make modules_install

カーネルの配置
作成したカーネルをbootディレクトリに移動する
名前はなんでもいいがひとまず下記の通りにしました。

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.18-348.el5

# cp System.map /boot/System.map-2.6.18-348.el5

カーネル起動に必要なモジュールを待ちめて

# mkinitrd /boot/initrd-2.6.18-348.el5.img 2.6.18-prep

GRUBの設定

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/sda1
# initrd /boot/initrd-version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-8.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=/LABEL=/
title CentOS-base (2.6.18-348.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-348.el5 ro root=LABEL=/
initrd /boot/initrd-2.6.18-348.el5.img

結局NGですた・・・

OS入れなおしかと思ってとりあえず最後にOSのバージョンアップ
を実施しました。(元のOSがもうないので)

バージョンアップしたら正常に動きました・・・

う~ん、何が問題だったのか謎のままです(´;ω;`)

コメントする