[Logo]
  [Groups] 163JSP  [Search] 搜索   [Recent Topics] 最新主题   [Hottest Topics] 热门主题   [Members]  会员列表   [Register] 会员注册 /  [Login] 登入 
[Logo]
Solaris容器迁移指南  XML
论坛首页 » 操作系统(OS)
发表人 内容
unix
侠客
[Avatar]

注册时间: 17/11/2007 11:45:50
文章: 96
离线

Solaris容器迁移指南 英文原文地址: http://www.sun.com/software/solaris/howtoguides/moving_containers.jsp

怎样移动一个Solaris容器
  本指南指导对Solaris 10有经验的用户、系统管理员和开发者正确地使用新的功能-允许迁移Solaris 10容器从一个计算机移到另一个计算机。本指南以对这个功能的简单的需求讨论开始,然后接着是使用这个功能的3个例子。

  提示:在这个指南中描述的技术在Solaris快递版(Solaris Express)版本中可用,不久将会在Solaris 10的更新中可用。

  通过移动一个容器及代码例子和图解来一步一步地指导用户。看过这个指南之后,一个用户将能通过下述步骤来移动一个Solaris容器:

● 创建一个容器
● 分离容器
● 移动容器到新的计算机
● 附加容器到新的计算机

为了详细,代码范例提供了3种不同情况:

● 每个系统仅有一个文件系统
● 每个系统有容器安装到Solaris ZFS文件系统上
● 每个系统有容器使用Solaris卷管理器安装到Solaris UFS文件系统上

目录
1. Solaris容器迁移: 概述
2. Solaris容器迁移: 三个例子
3. 更多信息

Solaris容器迁移:概述
  商业用户试图减少他们数据中心的计算机的数量,而不减少他们架构的灵活性或者因为不必要的管理复杂性而束缚他们。一些现存的服务器虚拟化技术符合这个目标,其中包括 Solaris 10 操作系统的一个功能 - Solaris容器。

图 1 - 合并三个工作负荷到一个系统
  架构的灵活性包括在需要的时候有能力移动一个工作负荷从一台计算机移动到另一台计算机。Solaris 10容器包括这个能力。这个文档描述了可用来移动一个容器从一台计算机到另一台计算机的几种情况。

图 2 - 一个Solaris容器从一台计算机移动到另一台计算机的迁移
  Solaris容器的功能性由两种类别的功能组成:应用隔离,称为Solaris容器,和由池、项目、处理器集、公平共享调度器和内核参数组成的资源管理。Solaris容器对于数据中心尝试合并多个计算机到少数计算机是很有吸引力的。然而,一个数据中心的环境和需求及工作负荷经常变化,当这些发生时,移动容器从一个计算机到另一个计算机是很有价值的。没有这个能力,数据中心架构师会觉得束缚在一个可能不再是最优化的配置上。
  作为一个服务器合并的例子,一个运行Solaris 10的4 CPU的Sun Fire V490上面有4个容器,每一个都运行数据库软件。在这个例子中,每一个容器配置为:

● 无限制存取8GB内存
● 共享存取8GB交换空间
● 共享使用内部的SCSI带宽
● 存取共享的在/sbin、/usr和其它文件系统的文件
● 存取私有的在/etc/、/var和其它文件系统的文件,和一个分配了8GB空间的私有文件系统
● 经由共享的1GB NIC存取网络
● 一个IP地指
● 10个CPU份额

图 3 - 例子配置
  公平共享调度器能使CPU资源按比例地分配给应用程序。就是说,每一个应用程序获得一个份额数,表示全部份额数的一部分,全部份额数其反过来表示了整个系统或者一个资源池的处理能力。因此授予上面每一个容器的10个CPU份额保证到一个容器进程上,从总体上,就是最小1/4的系统处理能力,或者近似一个CPU的处理能力。这不是限制一个容器进程到25% - 处理能力不会被浪费如果它可用。
  如图3所示,一个容器安装了一个CRM数据库。在这个例子中,CRM数据库的使用负荷在增加,偶尔会遭遇性能问题。瓶颈可能是不充足的硬件资源,例如存储带宽、CPU处理能力或者内存。性能分析将能决定原因,在一些情况下,问题可以被处理通过简单地修改在同一系统上的容器的配置。
  另一方面,如果计算机完全没有足够的计算能力来处理4个工作负荷,最好的方案可能是移动CRM容器到另一个计算机。这不是一个专用于这个任务的计算机就是一个有充足的闲置资源能够为CRM环境提供可接受的性能。最终结果是移动整个工作负荷包括所有配置信息从V490到另一个运行Solaris 10的计算机。余下的三个容器也将从减少的资源竞争中受益。

=====================================================================================================
Solaris容器迁移: 三个例子
  这个文档描述了移动一个容器从一个系统到另一个系统的过程。为了全面,包括了三个例子方法。方法之间的区别是保存容器私有文件的文件系统的类型:

● 容器驻留在根文件系统上
这是最简单的方法,它的描述焦点在迁移方面。

● 容器驻留在一个ZFS文件系统上
  ZFS最大化了数据健壮性,能让容器设计者防止一个容器塞满另一个容器正在使用的文件系统。这两个功能集合的组合也增强了隔离性,它是Solaris区域的中心要素。对这样的情况ZFS带来的强项包括比现有的卷文件系统管理器组合有更好的健壮性、更简单的命令序列和字节序列中立性。

● 容器驻留在一个内建在Solaris卷管理器逻辑设备上的一个UFS文件系统
这个方法被提供给关于SVM的被标准化了的那些站点。

容器驻留在根文件系统上
  这个方法注重移动一个容器所需的步骤。它忽略了对明确的的文件系统类型的考虑。

创建一个稀疏根区域容器
  这个过程的第一步是创建一个稀疏根容器。容器创建的完整细节讨论在 http://docs.sun.com 或者 Solaris指南'Solaris容器:合并服务器和应用程序',但是这个例子你仅需要考虑这些因素:

● 容器的名字将是'twilight'
● 容器将被手动引导(启动),不是在系统启动时自动启动
● 容器在全局区域中的目录是 /zones/roots/twilight
● 容器将使用网络端口 hme0,IP地址是192.168.0.102

  在这个步骤中的第一个命令是'zonecfg',它仅仅记录你的配置指令。下面的例子显示如何交互地输入这些指令。通过使用 -f 选项的zonecfg(1M)命令也可以把它们输入到一个文件中。

  注意你可能要使用一个不同的网络设备名称(也就是hme0)和IP地址,这个根据你的系统的实际情况修改。

1. 创建一个稀疏根容器:

hostA-global# zonecfg -z twilight
zonecfg:twilight> create
zonecfg:twilight> set zonepath=/zones/roots/twilight
zonecfg:twilight> add net
zonecfg:twilight:net> set physical=hme0
zonecfg:twilight:net> set address=192.168.0.102
zonecfg:twilight:net> end
zonecfg:twilight> exit
  现在Solaris知道这个容器将有的特征,安装所需的文件是简单的,但是要花费5-30分钟,差不多完全依靠包含这个文件系统的系统磁盘速度。

2. 安装容器:

hostA-global# zoneadm -z twilight install
  现在放置容器的系统标识信息在正确的位置,这是最有效的方法来快速地让容器准备运行。

3. 创建sysidcfg文件:

hostA-global# cat > /zones/roots/twilight/root/etc/sysidcfg
system_locale=C
terminal=dtterm
network_interface=primary {
hostname=twilight
}
timeserver=localhost
security_policy=NONE
name_service=NONE
timezone=US/Eastern
root_password=""
^D

  容器所需的最后一部分信息可以通过使用下面的名字简单地创建一个空文件来提供。
4. 创建文件:

hostA-global# touch /zones/roots/twilight/root/etc/.NFS4inst_state.domain

启动容器和检验它的工作Boot the Container and Verify it Works
  这时,一个可启动的容器驻留在主计算机上。为了将来参考,配置可以图解成如下这样:

图 4 - 在HostA里安装的容器,但是没有运行。

  启动容器是简单和迅速的。

1. 启动容器:

hostA-global# zoneadm -z twilight boot

图 5 - 启动一个容器创建回送挂载

  现在你可以登录到容器的控制台。
2. 登录到控制台,使用zlogin:

hostA-global# zlogin -C twilight

上面指定的sysidcfg文件,root帐号没有设置密码,因此提示密码的时候仅需要按 <ENTER> 键。

3. 输入'hostname' 和 'zonename' 命令来查看主机名和区域名称:

twilight# hostname
twilight
twilight# zonename
twilight

4. 结束zlogin会话,输入这些命令:

exit
~.


停止容器
  在移动一个容器之前你必须首先停止它和它的所有程序。

1. 停止容器,使用zlogin命令:

hostA-global# zlogin twilight shutdown -y -i 0

移动容器
  移动一个停止的容器的第一步是从它原来的系统分离它。这步保存关于容器的信息,包括安装包和补丁信息。信息保存在和容器'root'目录相同的目录来简化聚集和移动容器文件的过程。

1. 分离容器,使用zoneadm命令:

hostA-global# zoneadm -z twilight detach

  一旦容器被分离,有几种方式来把它从一个系统移动到另一个系统。这个例子使用 pax(1) 和 scp(1). 下一步创建一个pax档案文件,它包含了容器根文件系统所有文件的一个拷贝,移动档案到目标系统,然后解开档案文件。

2. 创建一个pax档案,使用pax命令:

hostA-global# cd /zones/roots/twilight
hostA-global# pax -w@f /tmp/twilight.pax -p e *

这个图显示了原来的计算机现在有一个容器和一个容器私有文件的档案:

图 6 - 容器被分离和归档之后的HostA


3. 使用scp命令,拷贝档案到新的系统:

hostA-global# scp /tmp/twilight.pax root@hostB:/tmp/twilight.pax

  新容器将有一个新的区域名称'dusk',但是保留原来的主机名和IP地址。因为新的系统与原来的系统具有相同的硬件配置,所以新容器也将使用hme0网络设备。

  现在档案已在新的系统上,其余的工作在新的系统上同样发生。注意命令提示符将会改变来指明这个变化。区域名称的改变不是一个技术上的需求,但是示范了你如何创建一个黄金主容器,并把它拷贝到不同的系统。

4. 解压档案文件,创建一个目录和使用pax命令:

hostB-global# mkdir -m 700 -p /zones/roots/dusk
hostB-global# cd /zones/roots/dusk
hostB-global# pax -r@f /tmp/twilight.pax -p e

这时,文件已经被移动到指定位置,但是你仍然需要附加容器到系统上。

图 7 - 档案已经被拷贝到HostB并解压之后

附加容器并检验它的工作
  移动容器的最后一步是创建容器配置和附加解压的容器文件。新容器配置的生成和原来容器配置的创建比起来是相当简单的,因为原来的容器的配置被保存在档案中了。
  注意,如果目标系统的硬件配置和原来的不一样,下面的配置规范也要相应改变。同样,如果新系统的主网络接口和原来系统的主网络接口不在一个子网上,将需要做一些修改,如一些容器IP地址的组合、存在于新系统的IP地址集合和新系统的路由表。这些改变超出了本文的说明范围。

1. 使用zonecfg命令创建新的容器配置:

hostB-global# zonecfg -z dusk
zonecfg:dusk> create -a /zones/roots/dusk
zonecfg:dusk> exit

  提示,zonecfg子命令'create'的'-a'选项的意思是“附加这个目录的容器文件作为新的容器”。

  现在新的容器配置完毕,从其他的系统拷贝过来的容器文件可以被附加了。
2. 附加容器到新的系统,使用zoneadm命令:

hostB-global# zoneadm -z dusk attach

  附加的过程包括一个检查,来确保移动过来的容器和新系统兼容,包括补丁版本。
  在此时,两个容器同时存在并且相同,除了他们的区域名称不同,实际上第一个系统上的容器仍就处于分离状态。

图 8 - 合并三个工作负荷到一个系统

容器准备好了,是启动和使用它的时候了!

3. 启动容器,使用zoneadm命令:

hostB-global# zoneadm -z dusk boot
hostB-global# zlogin -C dusk

虽然区域名称改变了,注意主机名和IP还没有改变。

4. 检查新容器的区域名称、主机名称和IP地址:

twilight# zonename
dusk
twilight# hostname
twilight
twilight# ifconfig -a
...
hme0:1: flags=1000823<UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4> mtu 1500 index
2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255

  提示,这三个区域属性,同样还有其它的,仍然是可以配置的。例如,新容器和原来的容器具有相同的区域名称,你能改变主机名称和IP地址无论何时你需要的话。
  这里完成了一个区域的分离和重新附加,有效地移动它从一个服务器到另一个服务器。

容器驻留在一个ZFS文件系统上
  前面的部分示范了容器迁移的最简单的可能的情形。那种方法的一个缺陷是一个容器能够填满一个计算机的根文件系统,导致一个拒绝式服务攻击。为了防止这个,每个容器可以安装在它自己的文件系统上。在一些情况下,每个磁盘的最大文件系统数量将会限制一个系统上的容器数量。然而,Solaris ZFS和Solaris UFS/SVM都能在每个磁盘上创建大量的文件系统。这样做允许每系统大量的容器也加强了容器隔离。下面的两部分将示范这个能力。

  这部分示范在一个ZFS文件系统安装一个容器的步骤。文件系统是有限的尺寸,防止这个容器的有限文件系统空间被其它容器使用。这部分使用同以前的例子一样的基本的方法去创建、分离和重新附加容器,为了了简洁,执行这个步骤地命令被复制到下面,但是没有说明。

为容器创建ZFS文件系统
  使用分派给一个ZFS池的磁盘空间创建ZFS文件系统。不像一个单个的UFS文件系统到一个Solaris卷管理器的映射,多个ZFS文件系统可以被指派到一个ZFS池上。
  为了创建一个ZFS池,简单地指定池名称和将要使用的磁盘驱动器。注意,虽然这个例子指定了整个磁盘驱动,也可以使用单独的磁盘分区代替。同样,这个例子也没有使用数据冗余方式,例如磁盘镜像。更多信息参看zpool(1M)手册。

1. 创建新的ZFS池,使用zpool命令:

hostA-global# zpool create zone_roots c1t0d0 c1t0d1 c1t0d2 c1t0d3
  现在池存在了,你可以告诉ZFS去创建一个文件系统在里面。注意,文件系统名称是"zone_roots/zfszone1",这些命令没有指定一个前缀"/"。然而,默认系统会显示/zone_roots/zfszone1。参看zfs(1M)手册为了关于这个的一个完整的描述。
2. 创建一个新的ZFS文件系统,使用ZFS命令:

hostA-global# zfs create zone_roots/zfszone1
hostA-global# chmod 700 /zone_roots/zfszone1

图 9 - 一个ZFS池和它的文件系统

  为容器分派500MB的容量。提示,这个容量可以以后非常简单的增加和减少。
3. 设置文件系统的配额,使用zfs命令:

hostA-global# zfs set quota=500m zone_roots/zfszone1
  此时你可能已经注意到ZFS对于普通的文件系统-卷管理系统的一个优势:管理的简单性。例如,它大约在UFS/SVM或者VxFS/VxVM环境下使用3倍的命令来达到上面4个ZFS命令达到的结果。

创建一个稀疏根容器,检验它的工作
  为了给你方便,在第一个系统创建一个新容器所需的命令被列在下面。完整的解释参看上面题为"容器驻留在根文件系统"的部分。

hostA-global# zonecfg -z zfszone1
zonecfg:zfszone1> create
zonecfg:zfszone1> set zonepath=/zone_roots/zfszone1
zonecfg:zfszone1> add net
zonecfg:zfszone1:net> set physical=hme0
zonecfg:zfszone1:net> set address=192.168.0.102
zonecfg:zfszone1:net> end
zonecfg:zfszone1> exit

hostA-global# zoneadm -z zfszone1 install

hostA-global# cat > /zone_roots/zfszone1/root/etc/sysidcfg
system_locale=C
terminal=dtterm
network_interface=primary {
hostname=zfszone1
}
timeserver=localhost
security_policy=NONE
name_service=NONE
timezone=US/Eastern
root_password=""
^D

hostA-global# touch /zone_roots/zfszone1/root/etc/.NFS4inst_state.domain
hostA-global# zoneadm -z zfszone1 boot
hostA-global# zlogin -C zfszone1
  ZFS文件系统提供了许多命令让你观察文件系统的使用情况和状态。虽然下面的命令对于迁移一个容器不是必须的,它们突出了容器实际使用了多少的磁盘空间。

1. 列出当前的ZFS文件系统,使用zfs list命令:

hostA-global# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zone_roots 73.3M 24.9G 9.50K /zone_roots
zone_roots/zfszone1 72.9M 427M 72.9M /zone_roots/zfszone1

提示,虽然池有25GB的磁盘空间,文件系统可使用500MB,容器已经仅仅使用了73MB。
2. 在活动的ZFS文件系统上查看3次3-秒间隔的I/O统计,使用zpool iostat命令:

hostA-global# zpool iostat 3 3
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
zone_roots 73.3M 25.1G 0 1 492 70.2K
zone_roots 73.3M 25.1G 0 1 0 0
zone_roots 73.3M 25.1G 0 1 0 0

  有关ZFS命令的更多信息可以在<<ZFS管理指南>>中找到。

  现在容器必须被停下来为了把它移动到其它的系统。
3. 停止容器,使用zlogin命令:

hostA-global# zlogin zfszone1 shutdown -y -i 0

分离容器,创建它的档案,移动它到目标系统
  容器现在可以分离和移动了。

1. 分离容器,使用zoneadm命令:

hostA-global# zoneadm -z zfszone1 detach

  这个方法将要使用ZFS的备份功能。备份功能仅在一个快照上操作来提高数据完整性。因此首先创建一个文件系统的快照:
2. 创建一个ZFS快照,使用ZFS命令:

hostA-global# zfs snapshot zone_roots/zfszone1@Snap1

图 10 - 一个ZFS快照
  ZFS子命令打包一个ZFS文件系统的所有文件和目录并归档它们。对于这个例子,简单把档案放到一个文件中。

3. 备份ZFS快照,使用zfs命令:

hostA-global# zfs send zone_roots/zfszone1@Snap1 > /tmp/zfszone1.Backup1

图11 - 一个ZFS档案
  移动容器的归档拷贝到新的系统。这有一个在适当配置的系统上scp命令的语法的例子。

4. 拷贝档案,使用scp命令:

hostA-global# scp /tmp/zfszone1.Backup1 root@hostB:/tmp/zfszone1.Backup1

图 12 - 拷贝一个ZFS档案

在新系统创建一个新池并在其中恢复档案
  现在档案已经被移到新的系统,剩下的所有工作将在新系统进行。注意命令行提示符将改变来说明这个。ZFS 子命令'receive'将用来解压档案。虽然它能自动创建一个文件系统,它需要一个池在其中来恢复文件系统。

1. 在新的系统上创建一个ZFS池,使用zpool命令:

hostB-global# zpool create zone_roots c1t0d0 c1t0d1 c1t0d2

  现在文件系统可以被恢复到池里。必须指定的参数仅是新文件系统的名称。

2. 在新的系统恢复ZFS文件系统,使用zfs命令:

hostB-global# zfs receive zone_roots/zfszone2 < /tmp/zfszone1.Backup1

图 13 - 解压一个ZFS档案

3. To list the current ZFS state, use the zfs command:

hostB-global# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zone_roots 73.3M 24.9G 10K /zone_roots
zone_roots/zfszone2 73.0M 24.9G 73.0M /zone_roots/zfszone2
zone_roots/zfszone2@Snap1 0 - 73.0M -

  注意备份和恢复一个文件系统的步骤没有携带原来文件系统的500MB配合设置。如果新的文件系统上需要一个配额,必须在恢复文件系统之后设置这个配额。同时注意为备份文件系统而创建的快照随同文件系统被恢复。快照可以删除掉以节省磁盘空间和简化ZFS配置。

附加容器并验证它的工作
  最后的事情就是在适当的位置正确地去附加容器到新的系统。

1. 为容器创建新的配置,使用zonecfg命令:

hostB-global# zonecfg -z zfszone2
zonecfg:zfszone2> create -a /zone_roots/zfszone2
zonecfg:zfszone2> exit

2. 附加和启动容器,使用zoneadm命令:

hostB-global# zoneadm -z zfszone2 attach
hostB-global# zoneadm -z zfszone2 boot

3. 现在检查容器的区域名称、主机名和IP地址:

twilight# zonename
zfszone2
twilight# hostname
zfszone1
twilight# ifconfig -a
...
hme0:1: flags=1000823<UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4> mtu 1500 index
2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255

  虽然区域名称已经改变,但是注意主机名和IP地址没有变。
  这部分示范了分离和附加一个区域,有效地把它从一个服务器移动到另一个服务器。说明ZFS文件系统管理简单的ZFS的一些功能也被展示了。

容器驻留在UFS/SVM文件系统
  这个方法和前面使用ZFS的部分完成相同的目标。代替ZFS,它使用UNIX文件系统(UFS)和Solaris卷管理器(SVM)。为达到每磁盘有大量的文件系统,使用了SVM软分区。
  虽然使用SVM软分区对于安装容器在一个UFS文件系统上不是必须的,它是最简单的方法来使用UFS实现许多的容器,还确保一个容器不占用其它容器的文件系统空间。特别是软分区允许在一个磁盘上有许多文件系统,没有它们,你必须限制你自己到每磁盘少数容器或者每个磁盘片安装多个区域。后面的方案允许一个容器使用文件系统的所有空闲空间,潜在地阻止了其它容器的正确操作。
  因为在ZFS例子中,这部分使用了相同的基本方法来创建、分离和重新附加容器。因此又,执行这些步骤的命令被复制到下面,但是没有做说明。

创建一个SVM软分区和一个UFS系统在软分区上
  这个例子使用两个磁盘来创建一个5GB镜像逻辑设备,从那里创建一个200MB软分区为容器使用。
  在为你自己的系统配置SVM之前,你必须明白指定逻辑设别状态数据库复本的数目和布置的规则。在metadb(1M)手册有描述。这个例子为数据和复本使用两个磁盘。在这个情况下,规则指示两个复本必须在每个磁盘分别创建。另外,每个磁盘定义一个5GB分区作为镜像,所有容器将安装在里面。例子使用设备c1t4d0s0、c1t4d0s1、c2t12d0s0 和 c2t12d0s1作为SVM数据库分区,设备c1t4d0s3和c2t12d0s3作为镜像。创建这些磁盘分区的命令的描述超出了本文的范围。

在下面的例子呈现了下面的磁盘布局:

c1t4d0s0 20MB metadata DB
c1t4d0s1 20MB metadata DB
c1t4d0s3 5GB data partition
c2t12d0s0 20MB metadata DB
c2t12d0s1 20MB metadata DB
c2t12d0s3 5GB data partition

生成磁盘分区之后,创建SVM数据库和它的复本。

1. 创建SVM数据库和它的复本,使用meta命令:

hostA-global# metadb -a -f c1t4d0s0 c1t4d0s1 c2t12d0s0 c2t12d0s1

  下一步创建两个‘逻辑磁盘’-虚拟设备每个包含一个磁盘分区。
2. 创建逻辑磁盘,使用metainit命令:

hostA-global# metainit d11 1 1 c1t4d0s3
hostA-global# metainit d12 1 1 c2t12d0s3

  现在创建第三个逻辑磁盘-另一个虚拟设备-为了创建一个镜像的虚拟设备。这个命令同样也指定了两个镜像的一个。

3. 创建镜像的第一部分,使用metainit命令:

hostA-global# metainit d10 -m d11

  第二个虚拟设备现在可以作为第一个逻辑磁盘的镜像添加。
4. 添加第二个逻辑磁盘到镜像,使用metattach命令:

hostA-global# metattach d10 d12

图 14 - Solaris卷管理器逻辑设备
  一个"软分区"是SVM的一个功能,它允许在一个逻辑磁盘上创建多个虚拟分区。创建一个需要在 metainit 加 -p 选项。

5. 创建一个新的软分区,使用metainit命令:

hostA-global# metainit d100 -p d10 200M

  一旦卷存在和应用了一个容量在上面,就可以在其上创建UFS文件系统了。

6. 创建新的UFS文件系统,使用mkdir、newfs、mount和chmod命令:

hostA-global# mkdir -p /zones/roots/ufszone1
hostA-global# newfs /dev/md/dsk/d100
newfs: construct a new file system /dev/md/rdsk/d100: (y/n)? y
...
hostA-global# mount /dev/md/dsk/d100 /zones/roots/ufszone1
hostA-global# chmod 700 /zones/roots/ufszone1
  如果你想Solaris在下次系统启动的时候挂载那个设备,你必须在/etc/vfstab中添加适当的纪录。对于这个例子,记录类似如下:

/dev/md/dsk/d100 /dev/md/rdsk/d100 /zones/roots/ufszone1 ufs 1 yes -

图 15 - Solaris卷管理器软分区

创建一个系数根容器,验证它的工作Create a Sparse-Root Container, and Verify that it Works
  为了给你方便,在第一个系统创建一个新容器需要的所有命令在下面被列出。对于完整的说明参看上面的部分。

hostA-global# zonecfg -z ufszone1
zonecfg:ufszone1> create
zonecfg:ufszone1> set zonepath=/zones/roots/ufszone1
zonecfg:ufszone1> add net
zonecfg:ufszone1> set physical=hme0
zonecfg:ufszone1> set address=192.168.0.102
zonecfg:ufszone1> end
zonecfg:ufszone1> exit

hostA-global# zoneadm -z ufszone1 install

hostA-global# cat > /zones/roots/ufszone1/root/etc/sysidcfg
system_locale=C
terminal=dtterm
network_interface=primary {
hostname=ufszone1
}
timeserver=localhost
security_policy=NONE
name_service=NONE
timezone=US/Eastern
root_password=""
^D

hostA-global# touch /zones/roots/ufszone1/root/etc/.NFS4inst_state.domain
hostA-global# zoneadm -z ufszone1 boot
hostA-global# zlogin -C ufszone1
  上面的sysidcfg文件没有为root帐号指定密码,因此在提示密码的时候仅需按<ENTER>建。输入 'hostname' 和 'zonename' 命令来查看主机名和区域名称。

1. 检查新容器的区域名称和主机名:

ufszone1# hostname
ufszone1
ufszone1# zonename
ufszone1

2. 结束zlogin会话,输入这些命令:

exit
~.


3. 为了移动容器先停止容器,使用zlogin命令:

hostA-global# zlogin ufszone1 shutdown -y -i 0


分离容器并移动它
  现在停止容器并准备移动到其它的系统。首先,从系统分离容器。

1. 从系统分离容器,使用zoneadm命令:

hostA-global# zoneadm -z ufszone1 detach

  Solaris pax(1)命令是一个不依赖硬件的档案工具。下面显示的语法创建一个名为/tmp/ufszone1.pax的档案文件。
2. 打包容器文件到一个单个的档案,首先进入到zonepath然后使用pax命令:

hostA-global# cd /zones/roots/ufszone1
hostA-global# pax -w@f /tmp/ufszone1.pax -p e *

  和前面的例子一样,使用任一文件传输方法来移动档案文件。
3. 为安全移动档案,使用scp命令:

hostA-global# scp /tmp/ufszone1.pax root@hostB:/tmp/ufszone1.pax


在新系统上创建一个SVM软分区和UFS文件系统,并把档案恢复到上面
  在新系统上,重复上面使用的UFS和SVM相关命令创建文件系统,用'ufszone2' 替换 'ufszone1'。确保你创建了/zones/roots/usfzone2文件系统。
  当文件系统准备好的时候,解开容器的档案到新系统。

1. 解压档案到新的系统,cd到zonepath并使用pax命令:

hostB-global# cd /zones/roots/ufszone2
hostB-global# pax -r@f /tmp/ufszone1.pax -p e


附加容器并验证它的工作
  现在文件系统已经创建,容器文件已解压到上面,可以配置容器并附加到新系统了。

1. 配置容器,使用zonecfg命令:

hostB-global# zonecfg -z ufszone2
zonecfg:ufszone2> create -a /zones/roots/ufszone2
zonecfg:ufszone2> exit

2. 附加和启动容器,使用zoneadm命令:

hostB-global# zoneadm -z ufszone2 attach
hostB-global# zoneadm -z ufszone2 boot

  现在容器已经运行,像以前一样,你可以登录到里面,检查一些事情例如主机名、区域名称和IP地址。
3. 登录到容器的控制台,使用 zloging -C 命令:

hostB-global# zlogin -C ufszone2
ufszone1# hostname
ufszone1
ufszone1# zonename
ufszone2
ufszone1# ifconfig -a
...
hme0:1: flags=1000823<UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4> mtu 1500 index
2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255

  注意,虽然区域名称改变了,但是主机名和IP地址仍然没变。
  本部分示范了使用UFS和SVM来分离和重新附加一个区域,有效地把它从一个服务器迁移到另一个服务器。

=====================================================================================================

更多信息
  虽然这个指南提供了迁移容器从一个服务器到几个使用不同文件系统的服务器需要的基本步骤,包括Sun的革命性的ZFS文件系统,它仅仅是一个介绍来提供你的Solaris容器的应用-更加精确的配置也是可能的。关于Solaris容器、ZFS文件系统、和本指南触及的主体的更多信息,请访问 http://www.sun.com/solaris

Solaris ZFS管理指南
http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf

Solaris容器-资源管理和Solaris区域
http://docs.sun.com/app/docs/doc/817-1592

Solaris手册
http://docs.sun.com/

Solaris ZFS学习中心(包括视频介绍和演示)
http://sun.com/solaris/zfs

Solaris容器学习中心
http://sun.com/solaris/containers

Solaris容器指南
http://sun.com/solaris/howtoguides/containers

ZFS常见问答
http://sun.com/solaris/zfs/faq

附加的问和答
http://opensolaris.org/os/community/zfs/faq

Solaris区域和容器常见问答
http://opensolaris.org/os/community/zones/faq

OpenSolaris ZFS社区
http://opensolaris.org/os/community/zfs

Sun ZFS博客
http://opensolaris.org/os/community/zfs/blogs

OpenSolaris Zones Community

http://opensolaris.org/os/community/zones

这篇文章被编辑了 21 次. 最近一次更新是在 05/12/2007 16:07:55


UNIX JSP空间
cpu

[Avatar]

注册时间: 13/12/2007 11:31:19
文章: 2
离线

楼主辛苦!

CPU
phoenix

[Avatar]

注册时间: 15/12/2007 23:37:17
文章: 9
离线

真是Solaris容器和区域的好文章,了!

西楚有鸟,三年不鸣,不鸣则已,一鸣惊人。不死之鸟,凤凰磐涅,浴火重生,一飞冲天。
titan
步兵
[Avatar]

注册时间: 13/12/2007 09:11:17
文章: 14
离线

看来Solaris很适合用来架设VPS主机。

金刚
[虚拟主机] [域名查询]] [企业邮局]] [订    购]] [常用下载]
论坛首页 » 操作系统(OS)
前往:   
辽ICP备06006685号