Nov
13
我曾经写过两篇文章:[原]把物理系统搬入OpenVZ中 和 [原]使用VMware Converter 3.0/4.0 迁移虚拟机。它们都涉及迁移Linux系统的问题,只是讲述的都是虚拟机环境。现在,我将要描述的是,如何在两台物理服务器上进行迁移或称克隆。
一、原因和准备
需要进行迁移的原因有很多,例如:硬件改变、重新部署时间太长、制作备机等。但它们都是只有一个目的,就是制作一个与原系统几乎完全相同的环境。
这里,必须要准备的有:
迁移的原理是非常简单的,但根据需迁移的Linux系统版本不同,具体操作的工作也有差异。我这里以一个模拟环境,把关键步骤描述出来,更具体的命令操作,仍需根据实际环境做修正。
系统架构如下:
二、选择克隆方式
因安装光盘的拯救模式仅能提供一些必要的命令,所以,我们能进行拷贝的途径比不多,主要有两种:
1、用dd命令按磁盘块方式拷贝
该方式的好处在于,可把Gurb、分区表、分区格式、文件内容等都一次性复制到目标环境中,能大量减少后续的工作量。但缺点是,当源磁盘很大时,传输时间很长。
2、用tar命令按文件拷贝
该方式的好处是,可以按源系统中存放的实际容量大小进行传输,当磁盘很大(实际数据比较小,即空闲空间较多时),能节省很多时间,并且还可以压缩为一个镜像来保存;但缺点也很明显,需要手动分区、格式化、创建Gurb,技术要求比较高。
虽然如此,但我仍建议使用第二种方式,因其灵活性更强。同时,也为了更有效的说明问题,下面也会以第二种方式的步骤来描述。
三、步骤
、格式化分区
在目标环境B机,使用与原系统版本一致的启动光盘引导系统,并进入拯救模式(linux rescue);
然后,参考源系统的情况,用fdisk分区,并用mkfs.ext2或mkfs.ext3格式化硬盘。
※ 注意,这步很关键:因若不使用相同发行版本的光盘进行该操作,很有可能会在完成后面提到的文件数据拷贝工作后,在引导时,因为ext3版本不同,导致不能成功挂载磁盘分区,最终启动失败。而这是不能回退的工作,必须在准备目标环境时做好。
另外,根据源系统的版本不同,例如这里是Red Hat 7.2,分区为ext3格式。但引导光盘只提供mkfs.ext2命令,这时就需要手动加入日志,如:
最后还有一点需要提醒的,我们将会采用按目录拷贝文件的克隆方式,而该方式会忽略分区与目录的挂载关系(如把sda2挂载到/home、sda3挂载到/opt等)。所以,如果您希望目标环境中也把个目录独立存放到不同的分区上,你需要自行分区、格式化。
2、挂载分区
源系统 A机:
首先,用红旗 DC Server 5.0光盘引导系统,进入拯救模式。
(因Red Hat 7.2光盘的拯救模式不提供nc等命令,而DC Server 5.0光盘支持)
通常,在进入拯救模式时的最后一部分,会提示您是否需要自动搜索和挂载分区:
点击“Continue”后,会把根分区挂载到/mnt/sysimage下面:
这是为了后续能按文件方式进行拷贝工作。若系统不能自动挂载,你必须手动进行该工作。
同时,还需要激活网络支持,如分配IP为:192.168.228.10。
目标环境 B机:
实际上,B机上的工作与A机是相同的,这里在拯救模式下,分区的挂载只能是手动进行,例如:
当然,如果你在步骤一时确认需要按多分区挂载目录,在这里,你也需要把分区和目录对应好,例如:
B机的IP为:192.168.228.20。
3、拷贝数据
目标环境 B机:
先在目标环境中做好接收数据的准备:
源系统 A机:
使用tar方式,往目标环境传递数据:
※ 注意,需要把proc和sys两目录排除,因其中的内容是指向内核的映射,是动态生成的,不需拷贝。而更重要的是,有部分文件是不能直接读取的,若用tar打包,会提示错误退出。所以,必须把它们排除。
nc命令的使用,可参考:[原]好用的netcat工具
4、启动准备
当文件传输完成后,为使系统能在目标环境(B机)中运行,仍需进行一些工作,例如:
创建proc和sys目录:
创建分区名称:
创建Grub:
※ 在这里,我遇到一个问题,就是使用DC 5.0的拯救模式创建Red Hat 7.2的Grub,会提示找不到分区。
后来,我重新用Red Hat 7.2的安装光盘,引导到拯救模式,才能完成该工作。但该版本的做法有点不同,不用chroot,只需在拯救模式下,直接运行:
还有一些工作,是要根据源系统的环境来修改的。假设,目标环境的分区与源系统不同,那么,你可能还需要修改/boot/grub/menu.lst、/etc/fstab、/etc/mtab等文件。
最后,如果目标环境与源系统的驱动不同,如这里,源系统是HP 580的机器,使用5i 的cciss驱动模块;而目标环境是虚拟机,使用BUSLogic驱动模块。这样,你还需要手动修改启动镜像:initrd文件,把其中的cciss.o替换为BUSLogic.o(从核心驱动目录/lib/modules/2.4.7-10smp/kernel/drivers/scsi/中提取)。
该步骤需在拯救模式下进行,具体请参考:[原]分析initrd.img文件。
至此,可尝试重启目标机器,看启动过程是否正常。
四、补充
通常情况下,经过上述的步骤后,目标环境应该可以正常启动的。(注意网卡MAC地址,IP是否冲突,应用是否依赖IP,主机名冲突等问题)。
还有一点需要补充的:
1、关于dev目录
就是拯救模式下打包的/dev目录可能与实际系统运行环境有点不同(如缺少/dev/shm文件等)。所以,建议在目标环境已经可以正常启动的情况下(非拯救模式),从正常运行状态下的源系统中,把/dev重新打包及释放到目标环境中。
※ 注意,拷贝时不能把dev目录排除,否则系统是不能启动的。
2、关于dd方式
如果您想使用dd方式克隆,可以在两台机器都已进入拯救模式下,如此操作:
目标环境 B机:
源机器 A机:
正如前面提到的,用该方式,采用的是全盘拷贝,不需考虑分区、创建Grub等问题。
3、克隆为镜像文件
如果仅是为了备份系统,你也可以采取这里的方法,把源系统打包为一个镜像文件:
源系统要做的,就是进入拯救模式后,开始打包即可:
当然,千万不要忘了在正常环境中,把/dev目录也做个单独的备份哦。
一、原因和准备
需要进行迁移的原因有很多,例如:硬件改变、重新部署时间太长、制作备机等。但它们都是只有一个目的,就是制作一个与原系统几乎完全相同的环境。
这里,必须要准备的有:
引用
1、与原系统版本一致的安装光盘;
(至少不能跨越大版本,例如,原系统是红旗 DC 4.1,可以准备DC 4.1 SP1等版本,但不能是DC 5.0及以后的版本。原因在后面有描述)
2、原系统与目标环境的硬件是兼容的,具体来说,就是至少原系统在新硬件环境下是有驱动的。
(这个非常重要,否则即使文件拷贝完成,系统不能启动,也是没有意义的。)
3、两张提供tar、nc等命令的引导光盘。
(要能分别引导源和目标机器,并提供它们需要的网卡和SCSI卡驱动)
(至少不能跨越大版本,例如,原系统是红旗 DC 4.1,可以准备DC 4.1 SP1等版本,但不能是DC 5.0及以后的版本。原因在后面有描述)
2、原系统与目标环境的硬件是兼容的,具体来说,就是至少原系统在新硬件环境下是有驱动的。
(这个非常重要,否则即使文件拷贝完成,系统不能启动,也是没有意义的。)
3、两张提供tar、nc等命令的引导光盘。
(要能分别引导源和目标机器,并提供它们需要的网卡和SCSI卡驱动)
迁移的原理是非常简单的,但根据需迁移的Linux系统版本不同,具体操作的工作也有差异。我这里以一个模拟环境,把关键步骤描述出来,更具体的命令操作,仍需根据实际环境做修正。
系统架构如下:
引用
源系统: 红帽 RedHat 7.2 (硬件为HP DL 580 称为A机)
目标环境:虚拟机VMware ESX 3i (称为B机)
目标环境:虚拟机VMware ESX 3i (称为B机)
二、选择克隆方式
因安装光盘的拯救模式仅能提供一些必要的命令,所以,我们能进行拷贝的途径比不多,主要有两种:
1、用dd命令按磁盘块方式拷贝
该方式的好处在于,可把Gurb、分区表、分区格式、文件内容等都一次性复制到目标环境中,能大量减少后续的工作量。但缺点是,当源磁盘很大时,传输时间很长。
2、用tar命令按文件拷贝
该方式的好处是,可以按源系统中存放的实际容量大小进行传输,当磁盘很大(实际数据比较小,即空闲空间较多时),能节省很多时间,并且还可以压缩为一个镜像来保存;但缺点也很明显,需要手动分区、格式化、创建Gurb,技术要求比较高。
虽然如此,但我仍建议使用第二种方式,因其灵活性更强。同时,也为了更有效的说明问题,下面也会以第二种方式的步骤来描述。
三、步骤
、格式化分区
在目标环境B机,使用与原系统版本一致的启动光盘引导系统,并进入拯救模式(linux rescue);
然后,参考源系统的情况,用fdisk分区,并用mkfs.ext2或mkfs.ext3格式化硬盘。
※ 注意,这步很关键:因若不使用相同发行版本的光盘进行该操作,很有可能会在完成后面提到的文件数据拷贝工作后,在引导时,因为ext3版本不同,导致不能成功挂载磁盘分区,最终启动失败。而这是不能回退的工作,必须在准备目标环境时做好。
另外,根据源系统的版本不同,例如这里是Red Hat 7.2,分区为ext3格式。但引导光盘只提供mkfs.ext2命令,这时就需要手动加入日志,如:
# mkfs.ext2 /dev/sda1
# tune2fs -j /dev/sda1
# tune2fs -j /dev/sda1
最后还有一点需要提醒的,我们将会采用按目录拷贝文件的克隆方式,而该方式会忽略分区与目录的挂载关系(如把sda2挂载到/home、sda3挂载到/opt等)。所以,如果您希望目标环境中也把个目录独立存放到不同的分区上,你需要自行分区、格式化。
2、挂载分区
源系统 A机:
首先,用红旗 DC Server 5.0光盘引导系统,进入拯救模式。
(因Red Hat 7.2光盘的拯救模式不提供nc等命令,而DC Server 5.0光盘支持)
通常,在进入拯救模式时的最后一部分,会提示您是否需要自动搜索和挂载分区:
点击“Continue”后,会把根分区挂载到/mnt/sysimage下面:
这是为了后续能按文件方式进行拷贝工作。若系统不能自动挂载,你必须手动进行该工作。
同时,还需要激活网络支持,如分配IP为:192.168.228.10。
目标环境 B机:
实际上,B机上的工作与A机是相同的,这里在拯救模式下,分区的挂载只能是手动进行,例如:
# mkdir /mnt/disk
# mount -t ext3 /dev/sda1 /mnt/disk
# mount -t ext3 /dev/sda1 /mnt/disk
当然,如果你在步骤一时确认需要按多分区挂载目录,在这里,你也需要把分区和目录对应好,例如:
# mkdir /mnt/disk/home
# mount -t ext3 /dev/sda2 /mnt/disk/home
# mkdir /mnt/disk/opt
# mount -t ext3 /dev/sda3 /mnt/disk/opt
# mount -t ext3 /dev/sda2 /mnt/disk/home
# mkdir /mnt/disk/opt
# mount -t ext3 /dev/sda3 /mnt/disk/opt
B机的IP为:192.168.228.20。
3、拷贝数据
目标环境 B机:
先在目标环境中做好接收数据的准备:
# cd /mnt/disk
# nc -l -p 1234 | tar xzvf -
# nc -l -p 1234 | tar xzvf -
源系统 A机:
使用tar方式,往目标环境传递数据:
# cd /mnt/sysimage
# tar czvf - ./ --exclude ./sys --exclude ./proc --exclude ./lost+found | nc 192.168.228.20 1234
# tar czvf - ./ --exclude ./sys --exclude ./proc --exclude ./lost+found | nc 192.168.228.20 1234
※ 注意,需要把proc和sys两目录排除,因其中的内容是指向内核的映射,是动态生成的,不需拷贝。而更重要的是,有部分文件是不能直接读取的,若用tar打包,会提示错误退出。所以,必须把它们排除。
nc命令的使用,可参考:[原]好用的netcat工具
4、启动准备
当文件传输完成后,为使系统能在目标环境(B机)中运行,仍需进行一些工作,例如:
创建proc和sys目录:
# mkdir -m 755 sys
# mkdir -m 555 proc
# mkdir -m 555 proc
创建分区名称:
# e2label /dev/sda1 /
# e2label /dev/sda2 /home
# e2label /dev/sda3 /opt
# e2label /dev/sda2 /home
# e2label /dev/sda3 /opt
创建Grub:
# chroot /mnt/disk
# grub
root (hd0,0)
setup (hd0)
# grub
root (hd0,0)
setup (hd0)
※ 在这里,我遇到一个问题,就是使用DC 5.0的拯救模式创建Red Hat 7.2的Grub,会提示找不到分区。
后来,我重新用Red Hat 7.2的安装光盘,引导到拯救模式,才能完成该工作。但该版本的做法有点不同,不用chroot,只需在拯救模式下,直接运行:
# grub
root (hd0,0)
setup (hd0)
root (hd0,0)
setup (hd0)
还有一些工作,是要根据源系统的环境来修改的。假设,目标环境的分区与源系统不同,那么,你可能还需要修改/boot/grub/menu.lst、/etc/fstab、/etc/mtab等文件。
最后,如果目标环境与源系统的驱动不同,如这里,源系统是HP 580的机器,使用5i 的cciss驱动模块;而目标环境是虚拟机,使用BUSLogic驱动模块。这样,你还需要手动修改启动镜像:initrd文件,把其中的cciss.o替换为BUSLogic.o(从核心驱动目录/lib/modules/2.4.7-10smp/kernel/drivers/scsi/中提取)。
该步骤需在拯救模式下进行,具体请参考:[原]分析initrd.img文件。
至此,可尝试重启目标机器,看启动过程是否正常。
四、补充
通常情况下,经过上述的步骤后,目标环境应该可以正常启动的。(注意网卡MAC地址,IP是否冲突,应用是否依赖IP,主机名冲突等问题)。
还有一点需要补充的:
1、关于dev目录
就是拯救模式下打包的/dev目录可能与实际系统运行环境有点不同(如缺少/dev/shm文件等)。所以,建议在目标环境已经可以正常启动的情况下(非拯救模式),从正常运行状态下的源系统中,把/dev重新打包及释放到目标环境中。
※ 注意,拷贝时不能把dev目录排除,否则系统是不能启动的。
2、关于dd方式
如果您想使用dd方式克隆,可以在两台机器都已进入拯救模式下,如此操作:
目标环境 B机:
# nc -l -p 1234 | dd of=/dev/sda
源机器 A机:
# dd if=/dev/sda | nc 192.168.228.20 1234
正如前面提到的,用该方式,采用的是全盘拷贝,不需考虑分区、创建Grub等问题。
3、克隆为镜像文件
如果仅是为了备份系统,你也可以采取这里的方法,把源系统打包为一个镜像文件:
# nc -l -p 1234 | dd of=./backup_system.tar.gz
源系统要做的,就是进入拯救模式后,开始打包即可:
# cd /mnt/sysimage
# tar czvf - ./ --exclude ./sys --exclude ./proc --exclude ./lost+found | nc 192.168.228.20 1234
# tar czvf - ./ --exclude ./sys --exclude ./proc --exclude ./lost+found | nc 192.168.228.20 1234
当然,千万不要忘了在正常环境中,把/dev目录也做个单独的备份哦。
ops805
2009/11/13 15:23
最近使用VMware vSphere 4.0,感觉比3.x更好用,稳定性也好。
分页: 1/1 1