迁移到 SoftLayer: 手动将 Linux 实例从 SCE 迁移到 SoftLayer

学习如何将一个 Linux® 实例从 IBM® SmartCloud® Enterprise 迁移到 IBM SoftLayer。

Catalin Tudor Bazavan, IBM SmartCloud Enterprise 镜像中心, IBM

IBM SmartCloud Enterprise 镜像中心定义了在 IBM SoftLayer 上为 IBM SmartCloud Enterprise 和 IBM SmartCloud Infrastructure 创建高质量主镜像的流程和最佳实践。它还为 IBM 小组和外部合作伙伴提供指导。该中心负责创建、测试、升级和维护大量基于 Windows、RedHat 和 SuSE 并且兼容 SmartCloud 的操作系统镜像。



Mihai Garbia, IT 专家, IBM

/developerworks/i/p-gmihai.jpgMihai Garbia 是一名主题专家,专攻 IBM SmartCloud Enterprise 上的镜像开发和支持。他关注的领域包括云计算架构、虚拟化、编程,以及涉及 UNIX 和 Windows 系统的自动化。



Stefan Ioan, IBM SmartCloud Enterprise 镜像中心, IBM

IBM SmartCloud Enterprise 镜像中心定义了在 IBM SoftLayer 上为 IBM SmartCloud Enterprise 和 IBM SmartCloud Infrastructure 创建高质量主镜像的流程和最佳实践。它还为 IBM 小组和外部合作伙伴提供指导。该中心负责创建、测试、升级和维护大量基于 Windows、RedHat 和 SuSE 并且兼容 SmartCloud 的操作系统镜像。



2014 年 3 月 03 日

本文提供了通过将数据复制到一个活动系统,手动将一个 Red Hat Enterprise Linux (RHEL) VM 实例从 SmartCloud Enterprise (SCE) 迁移到 SoftLayer 基础架构的步骤。目标驱动器数据被来自 SCE 镜像的数据覆盖。执行本文中详细介绍的步骤很重要。

先决条件

迁移过程的先决条件是:

  • 一个 IBM SmartCloud Enterprise 帐户。
  • 一个 SoftLayer 帐户。
  • SCE 中的一个您希望全部迁移的已捕获镜像,因为它是 SCE 中分配的存储,而且它的大小足够包含您想要备份的镜像。
  • SCE 中一个您希望从中发起传输的正在运行的 RHEL 实例。
  • SoftLayer 中一个置备的 RHEL 实例,有足够的空闲磁盘空间来保存 SCE 镜像。

有关置备 SCE 实例和存储的信息,请参阅 “用户指南”,可通过 SCE 管理控制面板中的 Support 选项卡找到。

要创建一个 SoftLayer 实例,可登录到 SoftLayer Customer Portal,转到 Sales > Products > Cloud Instances,并从弹出窗口选择一个具有合适配置的 RHEL 产品。


复制并准备要迁移的镜像

复制镜像

  1. 在您的镜像上启用复制权限:
    1. 在 SCE 控制面板中,单击 View Asset Catalog
    2. 选择 My Dashboard
    3. 单击与您的镜像同名的资产。
    4. 单击 Modify asset(使用右上角的铅笔图标)。
    5. 将 Copy allowed 字段设置为 Y。
    6. 单击 Update 保存您的更改。
  2. 使用 SSH 连接到 SCE RHEL 实例并切换到根用户 (sudo -s)。
  3. 设置用于 API 访问的基础变量:
    PROD_BASE_URL="https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331"

    使用您用来登录到 SCE 门户的相同的用户名和密码。

    PROD_USER=SCE_username:SCE_password

    找到镜像 ID:单击 SCE 控制面板上的镜像列表中的实例。这是您想要导出到 SoftLayer 实例的镜像。

    imageID=333789

    找到存储 ID:单击 SCE 控制面板上的存储列表中的存储区。

    storageID=654321
  4. 发起 copy 命令:
    curl -s -u $PROD_USER -X PUT -d "imageId=$imageID" $PROD_BASE_URL/storage/$storageID | 
    xmllint --c14n - | XMLLINT_INDENT=$'\t' xmllint --encode UTF-8 --format -

准备镜像

使用相同的基础变量值,从上面的同一个 SCE 实例完成一些步骤。

  1. 将存储区附加到镜像。找到实例 ID:单击 SCE 控制面板上的镜像列表中的实例。
    instanceID=123456

    找到存储 ID:单击 SCE 控制面板上的存储列表中的存储区。

    storageID=654321

    附加存储区:

    DATA="type=attach&storageID=$storageID"
    curl -s -u $PROD_USER -X PUT -d $DATA $PROD_BASE_URL/instances/$instanceID | xmllint
    --c14n - | XMLLINT_INDENT=$'\t' xmllint --encode UTF-8 --format -
  2. 要分离存储区,可结合使用上面的命令和以下变量:
    DATA="type=detach&storageID=$storageID"
  3. 获取附加的存储设备的名称(在本例中为 /dev/vdh1):
    # fdisk -l | grep ^/dev
    WARNING: GPT (GUID Partition Table) detected on '/dev/vdh'! The util fdisk 
    doesn't support GPT. Use GNU Parted.
    /dev/vda1 * 63 192779 96358+ 83 Linux
    /dev/vda2 192784 125831167 62819192 83 Linux
    /dev/vdb1 63 8385929 4192933+ 82 Linux swap / Solaris
    /dev/vdh1 1 125829119 62914559+ ee GPT
  4. 挂载存储:
    mount /dev/vdh1 /mnt/test
  5. 压缩该镜像以缩短传输时间:
    # cd /mnt/test/image
    # tar -czvf imagename.tgz imagename.img
  6. 生成 .tgz 文件的一个校验,用于传输验证:
    # sha1sum /mnt/test/image/imagename.tgz
    fd58475c3f5634322ec34896964fd1cbecf52625

将镜像传输到 SoftLayer 实例

将您的 SSH 私钥(您在置备 SoftLayer 实例时选择的密钥)复制到 SCE 实例。在下面的示例中,SoftLayer 实例可通过公共 IP 50.97.210.68 进行访问。有关网络配置的详细信息,可在 SoftLayer 控制面板中找到。

  1. 确保它拥有正确的权限:
    # chmod 600 /home/idcuser/sshkey
  2. 通过 SCP 和 nohup 发起传输,确保连接不会断开:
    # nohup scp -i /home/idcuser/sshkey /mnt/test/image/imagename.tgz root@50.97.210.68:/tmp &

    请注意,您正在连接到 SoftLayer 实例的根用户。

  3. 连接到 SoftLayer 实例并生成该镜像的一个 checksum 来验证传输。它应该与之前在 SCE 镜像上生成的校验和相匹配:
    # ssh -i $SLkey root@50.97.210.68
    
    [root@mihaig ~]# sha1sum /tmp/imagename.tgz
    fd58475c3f5634322ec34896964fd1cbecf52625

在急救 (Rescue) 模式下重新启动

接下来的步骤将覆盖 SoftLayer 实例的操作系统。因为此操作无法在系统运行时完成,所以您需要在急救模式下进行引导。

在 SoftLayer 控制面板中,转到实例配置,并从 Actions 菜单选择 Rescue。此操作的完成需要一定的时间。在完成此操作时,您会获得电子邮件通知(发送到向 SoftLayer 帐户注册的地址),该实例将在急救模式下进行引导。

SoftLayer 的急救镜像提供了一个完全有效的环境,提供了网络和 yum 支持。您可以像在一个完整安装的系统中那样执行任何任务。在实例在急救模式下进行引导时,网络配置与活动的系统相同,以便您可通过 SSH 远程访问它(推荐方式)。您还可以使用 Actions 菜单中的 KVM 控制台(您必须首先建立一个 VPN 连接;有关此连接的信息可在 SoftLayer KnowledgeLayer 中找到)。


从 SCE 挂载镜像文件

要从 SCE 镜像传输文件并覆盖 SoftLayer 实例的操作系统,您需要设置来源和目标目录。

设置来源,这是从 SCE 复制的镜像文件。RAW 镜像文件可挂载为循环设备,以便您可以从中提取数据。以下步骤使用 rhel64-x86-13-09-02.img 作为示例。

  1. 创建一个挂载点并挂载该镜像文件:
    # mkdir /mnt/src_dir
    # mount /dev/xvdc2 /mnt/src_dir
  2. 检查镜像文件特征(要挂载它,您需要使用分区偏移):
    # file rhel64-x86-13-09-02.img
    rhel64-x86-13-09-02.img: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, 
    boot drive 0x80, 1st sector stage2 0xc8800, GRUB version 0.94; partition 1: ID=0x83, 
    active, starthead 32, startsector 2048, 2048000 sectors; partition 2: ID=0x83, 
    starthead 155, startsector 2050048, 8664674 sectors, code offset 0x48

    您需要来自第二个分区的信息,第一个分区为 /boot,它原封不动地保留在 SoftLayer 上。记下第二个分区的开始扇区值(在上面的示例中为 2050048,您的值可能有所不同),并将它乘以 512:2050048*512=1049624576。这个数字是您需要的挂载偏移。

  3. 创建一个挂载点并挂载该镜像文件:
    # mkdir /mnt/source
    # mount -o loop,offset=1049624576 /mnt/src_dir/rhel64-x86-13-09-02.img /mnt/source

备注:如果需要从 SCE 的引导分区提取任何信息,上述过程也适用,只需使用第一个分区的偏移(开始扇区 2048 乘以 512 为 10485760):

mount -o loop,offset=1048576 /mnt/src_dir/rhel64-x86-13-09-02.img /<target>

挂载目标磁盘

要覆盖 SoftLayer 实例上的操作系统,目标分区必须在读写模式下进行挂载。在急救模式下执行以下步骤:

  1. 识别根分区:从 proc 检查分区布局,目标驱动器通常是第一个包含 100GB 系统分区的驱动器(已在 SoftLayer 控制面板中列出):
    # cat /proc/partitions 
    major minor  #blocks  name 
    
     202        0  104857600 xvda 
     202        1     262144 xvda1 
     202        2  104594432 xvda2 
     202       16    2097152 xvdb 
     202       17    2096451 xvdb1 
     202       32  157286400 xvdc 
     202       34  157284351 xvdc2

    在上面的示例中,您可以识别第一个驱动器 (xvda) 上的 ~100 GB xvda2 / (root) 分区。

  2. 挂载 xvda2 根分区:
    # mkdir /mnt/destination
    # mount /dev/xvda2 /mnt/destination

将文件从来源复制到目标

在急救模式下,您可继续将文件从 SCE 镜像实际传输到 SoftLayer 实例。使用工具 rsync,而且我们建议在 SSH 下使用 screen,以便预防网络故障导致的问题。

  1. 在急救模式下安装 screen 并启动一个会话:
    # yum install screen
    # screen -S transfer

    您目前在一个名为 ‘transfer’ 的屏幕会话中工作。如果 SSH 连接中断,传输会在后台保持运行。

  2. 准备排除文件。一些文件需要保持原封不同,这样您才能让新安装正常运行。因为排除内容列表很长,所以可以使用 rsync --exclude-from 功能。在 /root 目录下创建一个名为 exclude.txt 的新文本文件,其中包含以下内容:
    etc/fstab
    etc/sysconfig
    etc/securetty
    etc/rc*
    etc/init*
    etc/ssh
    etc/selinux
    etc/security
    etc/networks
    etc/nsswitch.conf
    etc/ntp.conf
    etc/passwd
    etc/shadow
    etc/sysctl.conf
    etc/yum.conf
    serial-ttyS0.conf 
    serial-ttyS1.conf
  3. 启动文件传输:
    rsync -avhP --exclude-from=exclude.txt /mnt/source/* /mnt/destination/

    警告:不要在一个终端中复制并粘贴上述命令并按下 Enter 键。各种文本编辑器可能在字符中添加格式化内容,让 shell 难以理解并导致问题。如果未正确读取排除文件,一些内容可能被覆盖,迁移过程可能遇到问题。

在传输期间,您可以看到传输的文件列表。如果断开 SSH 连接,则重新连接它并使用 screen -r transfer 来恢复之前启动的会话,然后继续工作。


验证网络设置

rsync 操作不会更改网络设置。请检查它们,以确保新实例能够访问 Internet(通常通过 eth1)和私有网络(通常通过 eth0)。

网络配置细节可在 SoftLayer 控制面板上的 Configuration 选项卡下找到。从这里记下公共网络的默认网关地址,并打开文件 /mnt/destination/etc/sysconfig/network。如果没有 GATEWAY=<IP addr> 行,则使用从控制面板获取的网关 IP 在文件底部添加一行。

文件 /mnt/destination/etc/sysconfig/network 应类似于以下示例:

NETWORKING=yes
HOSTNAME=migration.softlayer.com
GATEWAY=50.97.33.193

验证 eth1 的配置文件。打开 /mnt/destination/etc/sysconfig/network-scripts/ifcfg-eth1 并确保其中的地址与来自控制面板的地址对应。最后,文件 ifcfg-eth1 应类似于以下示例:

DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
HWADDR=06:c4:70:b1:31:9d
IPADDR=50.97.33.197
NETMASK=255.255.255.224

要访问新实例,只需在急救模式外重新引导并等待新系统启动。


身份验证和用户

系统的用户身份验证部分没有被来自 SCE 镜像的数据覆盖,所以有 3 点需要考虑:

  • 现在已启用根用户登录。
  • 已启用密码身份验证。
  • 自定义用户帐户(比如 idcuser)没有迁移。

系统启动后,您可以使用 SoftLayer 控制面板中提供的根用户的凭据,使用 SSH 执行身份验证。

要重新添加 idcuser 帐户,可使用此命令:

# adduser -M -N --gid 500 --uid 500 --groups=idcuser,users -s /bin/bash idcuser

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Linux
ArticleID=964594
ArticleTitle=迁移到 SoftLayer: 手动将 Linux 实例从 SCE 迁移到 SoftLayer
publish-date=03032014