<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA["Solaris容器迁移指南" 主题的最后发表文章]]></title>
		<link>http://bbs.163jsp.com/posts/list/7.html</link>
		<description><![CDATA[最后发表在 "Solaris容器迁移指南" 主题的信息]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Solaris容器迁移指南</title>
				<description><![CDATA[ [color=#FF6600][size=18][b]Solaris容器迁移指南[/b][/size][/color] 英文原文地址：  <a class="snap_shots" href="http://www.sun.com/software/solaris/howtoguides/moving_containers.jsp" target="_blank" rel="nofollow">http://www.sun.com/software/solaris/howtoguides/moving_containers.jsp</a><br /> 				<br /> [size=18][b]怎样移动一个Solaris容器[/b][/size]<br /> 　　本指南指导对Solaris 10有经验的用户、系统管理员和开发者正确地使用新的功能－允许迁移Solaris 10容器从一个计算机移到另一个计算机。本指南以对这个功能的简单的需求讨论开始，然后接着是使用这个功能的3个例子。<br /> <br /> 　　提示:在这个指南中描述的技术在Solaris快递版(Solaris Express)版本中可用，不久将会在Solaris 10的更新中可用。<br /> <br /> 　　通过移动一个容器及代码例子和图解来一步一步地指导用户。看过这个指南之后，一个用户将能通过下述步骤来移动一个Solaris容器：<br /> <br />     ● 创建一个容器<br />     ● 分离容器<br />     ● 移动容器到新的计算机<br />     ● 附加容器到新的计算机<br /> <br /> 为了详细，代码范例提供了3种不同情况：<br /> <br />     ● 每个系统仅有一个文件系统<br />     ● 每个系统有容器安装到Solaris ZFS文件系统上<br />     ● 每个系统有容器使用Solaris卷管理器安装到Solaris UFS文件系统上<br /> <br /> [b]目录[/b]<br />    1. Solaris容器迁移: 概述<br />    2. Solaris容器迁移: 三个例子<br />    3. 更多信息<br />  <br /> [size=18][b]Solaris容器迁移:概述[/b][/size]<br /> 　　商业用户试图减少他们数据中心的计算机的数量，而不减少他们架构的灵活性或者因为不必要的管理复杂性而束缚他们。一些现存的服务器虚拟化技术符合这个目标，其中包括 Solaris 10 操作系统的一个功能　－　Solaris容器。<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000001.gif[/img]<br /> 图 1 - 合并三个工作负荷到一个系统<br /> 　　架构的灵活性包括在需要的时候有能力移动一个工作负荷从一台计算机移动到另一台计算机。Solaris 10容器包括这个能力。这个文档描述了可用来移动一个容器从一台计算机到另一台计算机的几种情况。<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000002.gif[/img]<br /> 图 2 - 一个Solaris容器从一台计算机移动到另一台计算机的迁移<br /> 　　Solaris容器的功能性由两种类别的功能组成：应用隔离，称为Solaris容器，和由池、项目、处理器集、公平共享调度器和内核参数组成的资源管理。Solaris容器对于数据中心尝试合并多个计算机到少数计算机是很有吸引力的。然而，一个数据中心的环境和需求及工作负荷经常变化，当这些发生时，移动容器从一个计算机到另一个计算机是很有价值的。没有这个能力，数据中心架构师会觉得束缚在一个可能不再是最优化的配置上。<br /> 　　作为一个服务器合并的例子，一个运行Solaris 10的4 CPU的Sun Fire V490上面有4个容器，每一个都运行数据库软件。在这个例子中，每一个容器配置为：<br /> <br />     ● 无限制存取8GB内存<br />     ● 共享存取8GB交换空间<br />     ● 共享使用内部的SCSI带宽<br />     ● 存取共享的在/sbin、/usr和其它文件系统的文件<br />     ● 存取私有的在/etc/、/var和其它文件系统的文件，和一个分配了8GB空间的私有文件系统<br />     ● 经由共享的1GB NIC存取网络<br />     ● 一个IP地指<br />     ● 10个CPU份额<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000003.gif[/img]<br /> 图 3 - 例子配置<br /> 　　公平共享调度器能使CPU资源按比例地分配给应用程序。就是说，每一个应用程序获得一个份额数，表示全部份额数的一部分，全部份额数其反过来表示了整个系统或者一个资源池的处理能力。因此授予上面每一个容器的10个CPU份额保证到一个容器进程上，从总体上，就是最小1/4的系统处理能力，或者近似一个CPU的处理能力。这不是限制一个容器进程到25%　－　处理能力不会被浪费如果它可用。<br /> 　　如图3所示，一个容器安装了一个CRM数据库。在这个例子中，CRM数据库的使用负荷在增加，偶尔会遭遇性能问题。瓶颈可能是不充足的硬件资源，例如存储带宽、CPU处理能力或者内存。性能分析将能决定原因，在一些情况下，问题可以被处理通过简单地修改在同一系统上的容器的配置。<br /> 　　另一方面，如果计算机完全没有足够的计算能力来处理4个工作负荷，最好的方案可能是移动CRM容器到另一个计算机。这不是一个专用于这个任务的计算机就是一个有充足的闲置资源能够为CRM环境提供可接受的性能。最终结果是移动整个工作负荷包括所有配置信息从V490到另一个运行Solaris 10的计算机。余下的三个容器也将从减少的资源竞争中受益。<br /> <br /> =====================================================================================================<br /> [size=18][b]Solaris容器迁移: 三个例子[/b][/size]<br /> 　　这个文档描述了移动一个容器从一个系统到另一个系统的过程。为了全面，包括了三个例子方法。方法之间的区别是保存容器私有文件的文件系统的类型：<br /> <br />     ● 容器驻留在根文件系统上<br />       这是最简单的方法，它的描述焦点在迁移方面。<br /> <br />     ● 容器驻留在一个ZFS文件系统上<br /> 　　ZFS最大化了数据健壮性，能让容器设计者防止一个容器塞满另一个容器正在使用的文件系统。这两个功能集合的组合也增强了隔离性，它是Solaris区域的中心要素。对这样的情况ZFS带来的强项包括比现有的卷文件系统管理器组合有更好的健壮性、更简单的命令序列和字节序列中立性。<br /> <br />     ● 容器驻留在一个内建在Solaris卷管理器逻辑设备上的一个UFS文件系统<br />       这个方法被提供给关于SVM的被标准化了的那些站点。<br /> <br /> [size=18][b]容器驻留在根文件系统上[/b][/size]<br /> 　　这个方法注重移动一个容器所需的步骤。它忽略了对明确的的文件系统类型的考虑。<br /> <br /> [b]创建一个稀疏根区域容器[/b]<br /> 　　这个过程的第一步是创建一个稀疏根容器。容器创建的完整细节讨论在 <a class="snap_shots" href="http://docs.sun.com" target="_blank" rel="nofollow">http://docs.sun.com</a> 或者 Solaris指南'[url=http://bbs.163jsp.com/posts/list/686.html]Solaris容器：合并服务器和应用程序[/url]'，但是这个例子你仅需要考虑这些因素：<br /> <br />     ● 容器的名字将是'twilight'<br />     ● 容器将被手动引导(启动)，不是在系统启动时自动启动<br />     ● 容器在全局区域中的目录是　/zones/roots/twilight<br />     ● 容器将使用网络端口 hme0，IP地址是192.168.0.102<br /> <br /> 　　在这个步骤中的第一个命令是'zonecfg'，它仅仅记录你的配置指令。下面的例子显示如何交互地输入这些指令。通过使用 -f 选项的zonecfg(1M)命令也可以把它们输入到一个文件中。<br /> <br /> 　　注意你可能要使用一个不同的网络设备名称(也就是hme0)和IP地址，这个根据你的系统的实际情况修改。<br /> <br />    1. 创建一个稀疏根容器:<br /> <br />       hostA-global# zonecfg -z twilight <br />       zonecfg:twilight&gt; create <br />       zonecfg:twilight&gt; set zonepath=/zones/roots/twilight <br />       zonecfg:twilight&gt; add net <br />       zonecfg:twilight:net&gt; set physical=hme0 <br />       zonecfg:twilight:net&gt; set address=192.168.0.102 <br />       zonecfg:twilight:net&gt; end <br />       zonecfg:twilight&gt; exit<br /> 　　现在Solaris知道这个容器将有的特征，安装所需的文件是简单的，但是要花费5-30分钟，差不多完全依靠包含这个文件系统的系统磁盘速度。<br /> <br />    2. 安装容器:<br /> <br />       hostA-global# zoneadm -z twilight install <br /> 　　现在放置容器的系统标识信息在正确的位置，这是最有效的方法来快速地让容器准备运行。<br /> <br />    3. 创建sysidcfg文件:<br /> <br />       hostA-global# cat &gt; /zones/roots/twilight/root/etc/sysidcfg <br />       system_locale=C <br />       terminal=dtterm <br />       network_interface=primary { <br />         hostname=twilight <br />       } <br />       timeserver=localhost <br />       security_policy=NONE <br />       name_service=NONE <br />       timezone=US/Eastern <br />       root_password="" <br />       ^D <br /> <br /> 　　容器所需的最后一部分信息可以通过使用下面的名字简单地创建一个空文件来提供。<br />    4. 创建文件:<br /> <br />       hostA-global# touch /zones/roots/twilight/root/etc/.NFS4inst_state.domain <br /> <br /> [b]启动容器和检验它的工作Boot the Container and Verify it Works[/b]<br /> 　　这时，一个可启动的容器驻留在主计算机上。为了将来参考，配置可以图解成如下这样：<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000004.gif[/img]<br /> 图 4 - 在HostA里安装的容器，但是没有运行。<br /> <br /> 　　启动容器是简单和迅速的。<br /> <br />    1. 启动容器：<br /> <br />       hostA-global# zoneadm -z twilight boot<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000005.gif[/img]<br />       图 5 - 启动一个容器创建回送挂载<br /> <br /> 　　现在你可以登录到容器的控制台。<br />    2. 登录到控制台，使用zlogin：<br /> <br />       hostA-global# zlogin -C twilight<br /> <br />       上面指定的sysidcfg文件，root帐号没有设置密码，因此提示密码的时候仅需要按　&lt;ENTER&gt;　键。<br /> <br />    3. 输入'hostname' 和 'zonename' 命令来查看主机名和区域名称：<br /> <br />       twilight# hostname <br />       twilight <br />       twilight# zonename <br />       twilight<br /> <br />    4. 结束zlogin会话，输入这些命令：<br /> <br /> [b]      exit <br />       ~.[/b]<br /> <br /> [b]停止容器[/b]<br /> 　　在移动一个容器之前你必须首先停止它和它的所有程序。<br /> <br />    1. 停止容器，使用zlogin命令：<br /> <br />       hostA-global# zlogin twilight shutdown -y -i 0<br /> <br /> [b]移动容器[/b]<br /> 　　移动一个停止的容器的第一步是从它原来的系统分离它。这步保存关于容器的信息，包括安装包和补丁信息。信息保存在和容器'root'目录相同的目录来简化聚集和移动容器文件的过程。<br /> <br />    1. 分离容器，使用zoneadm命令：<br /> <br />       hostA-global# zoneadm -z twilight detach<br /> <br /> 　　一旦容器被分离，有几种方式来把它从一个系统移动到另一个系统。这个例子使用 pax(1) 和 scp(1). 下一步创建一个pax档案文件，它包含了容器根文件系统所有文件的一个拷贝，移动档案到目标系统，然后解开档案文件。<br /> <br />    2. 创建一个pax档案，使用pax命令：<br /> <br />       hostA-global# cd /zones/roots/twilight <br />       hostA-global# pax -w@f /tmp/twilight.pax -p e *<br /> <br />       这个图显示了原来的计算机现在有一个容器和一个容器私有文件的档案：<br />       [img]http://bbs.163jsp.com/images/post/4444/mov000000006.gif[/img]<br />       图 6 - 容器被分离和归档之后的HostA<br /> <br /> <br />    3. 使用scp命令，拷贝档案到新的系统：<br /> <br />       hostA-global# scp /tmp/twilight.pax root@hostB:/tmp/twilight.pax<br /> <br /> 　　新容器将有一个新的区域名称'dusk'，但是保留原来的主机名和IP地址。因为新的系统与原来的系统具有相同的硬件配置，所以新容器也将使用hme0网络设备。<br /> <br /> 　　现在档案已在新的系统上，其余的工作在新的系统上同样发生。注意命令提示符将会改变来指明这个变化。区域名称的改变不是一个技术上的需求，但是示范了你如何创建一个黄金主容器，并把它拷贝到不同的系统。<br /> <br />    4. 解压档案文件，创建一个目录和使用pax命令：<br /> <br />       hostB-global# mkdir -m 700 -p /zones/roots/dusk <br />       hostB-global# cd /zones/roots/dusk <br />       hostB-global# pax -r@f /tmp/twilight.pax -p e<br /> <br />       这时，文件已经被移动到指定位置，但是你仍然需要附加容器到系统上。<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000007.gif[/img]<br /> 图 7 - 档案已经被拷贝到HostB并解压之后<br /> <br /> [b]附加容器并检验它的工作[/b]<br /> 　　移动容器的最后一步是创建容器配置和附加解压的容器文件。新容器配置的生成和原来容器配置的创建比起来是相当简单的，因为原来的容器的配置被保存在档案中了。<br /> 　　注意，如果目标系统的硬件配置和原来的不一样，下面的配置规范也要相应改变。同样，如果新系统的主网络接口和原来系统的主网络接口不在一个子网上，将需要做一些修改，如一些容器IP地址的组合、存在于新系统的IP地址集合和新系统的路由表。这些改变超出了本文的说明范围。<br /> <br />    1. 使用zonecfg命令创建新的容器配置：<br /> <br />       hostB-global# zonecfg -z dusk <br />       zonecfg:dusk&gt; create -a /zones/roots/dusk <br />       zonecfg:dusk&gt; exit<br /> <br /> 　　提示，zonecfg子命令'create'的'-a'选项的意思是“附加这个目录的容器文件作为新的容器”。<br /> <br /> 　　现在新的容器配置完毕，从其他的系统拷贝过来的容器文件可以被附加了。<br />    2. 附加容器到新的系统，使用zoneadm命令：<br /> <br />       hostB-global# zoneadm -z dusk attach<br /> <br /> 　　附加的过程包括一个检查，来确保移动过来的容器和新系统兼容，包括补丁版本。<br /> 　　在此时，两个容器同时存在并且相同，除了他们的区域名称不同，实际上第一个系统上的容器仍就处于分离状态。<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000008.gif[/img]<br />       图 8 - 合并三个工作负荷到一个系统<br /> <br />       容器准备好了，是启动和使用它的时候了！<br /> <br />    3. 启动容器，使用zoneadm命令：<br /> <br />       hostB-global# zoneadm -z dusk boot <br />       hostB-global# zlogin -C dusk<br /> <br />       虽然区域名称改变了，注意主机名和IP还没有改变。<br /> <br />    4. 检查新容器的区域名称、主机名称和IP地址：<br /> <br />       twilight# zonename <br />       dusk <br />       twilight# hostname <br />       twilight <br />       twilight# ifconfig -a <br />       ... <br />       hme0:1: flags=1000823&lt;UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4&gt; mtu 1500 index <br />       2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255<br /> <br /> 　　提示，这三个区域属性，同样还有其它的，仍然是可以配置的。例如，新容器和原来的容器具有相同的区域名称，你能改变主机名称和IP地址无论何时你需要的话。<br /> 　　这里完成了一个区域的分离和重新附加，有效地移动它从一个服务器到另一个服务器。<br /> <br /> [size=18][b]容器驻留在一个ZFS文件系统上[/b][/size]<br /> 　　前面的部分示范了容器迁移的最简单的可能的情形。那种方法的一个缺陷是一个容器能够填满一个计算机的根文件系统，导致一个拒绝式服务攻击。为了防止这个，每个容器可以安装在它自己的文件系统上。在一些情况下，每个磁盘的最大文件系统数量将会限制一个系统上的容器数量。然而，Solaris ZFS和Solaris UFS/SVM都能在每个磁盘上创建大量的文件系统。这样做允许每系统大量的容器也加强了容器隔离。下面的两部分将示范这个能力。<br /> <br /> 　　这部分示范在一个ZFS文件系统安装一个容器的步骤。文件系统是有限的尺寸，防止这个容器的有限文件系统空间被其它容器使用。这部分使用同以前的例子一样的基本的方法去创建、分离和重新附加容器，为了了简洁，执行这个步骤地命令被复制到下面，但是没有说明。<br /> <br /> [b]为容器创建ZFS文件系统[/b]<br /> 　　使用分派给一个ZFS池的磁盘空间创建ZFS文件系统。不像一个单个的UFS文件系统到一个Solaris卷管理器的映射，多个ZFS文件系统可以被指派到一个ZFS池上。<br /> 　　为了创建一个ZFS池，简单地指定池名称和将要使用的磁盘驱动器。注意，虽然这个例子指定了整个磁盘驱动，也可以使用单独的磁盘分区代替。同样，这个例子也没有使用数据冗余方式，例如磁盘镜像。更多信息参看zpool(1M)手册。<br /> <br />    1. 创建新的ZFS池，使用zpool命令：<br /> <br />       hostA-global# zpool create zone_roots c1t0d0 c1t0d1 c1t0d2 c1t0d3<br /> 　　现在池存在了，你可以告诉ZFS去创建一个文件系统在里面。注意，文件系统名称是"zone_roots/zfszone1"，这些命令没有指定一个前缀"/"。然而，默认系统会显示/zone_roots/zfszone1。参看zfs(1M)手册为了关于这个的一个完整的描述。<br />    2. 创建一个新的ZFS文件系统，使用ZFS命令：<br /> <br />       hostA-global# zfs create zone_roots/zfszone1 <br />       hostA-global# chmod 700 /zone_roots/zfszone1<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000009.gif[/img]<br />       图 9 - 一个ZFS池和它的文件系统<br /> <br /> 　　为容器分派500MB的容量。提示，这个容量可以以后非常简单的增加和减少。<br />    3. 设置文件系统的配额，使用zfs命令：<br /> <br />       hostA-global# zfs set quota=500m zone_roots/zfszone1<br /> 　　此时你可能已经注意到ZFS对于普通的文件系统－卷管理系统的一个优势：管理的简单性。例如，它大约在UFS/SVM或者VxFS/VxVM环境下使用3倍的命令来达到上面4个ZFS命令达到的结果。<br /> <br /> [b]创建一个稀疏根容器，检验它的工作[/b]<br /> 　　为了给你方便，在第一个系统创建一个新容器所需的命令被列在下面。完整的解释参看上面题为"容器驻留在根文件系统"的部分。<br /> <br /> hostA-global# zonecfg -z zfszone1 <br /> zonecfg:zfszone1&gt; create <br /> zonecfg:zfszone1&gt; set zonepath=/zone_roots/zfszone1 <br /> zonecfg:zfszone1&gt; add net <br /> zonecfg:zfszone1:net&gt; set physical=hme0 <br /> zonecfg:zfszone1:net&gt; set address=192.168.0.102 <br /> zonecfg:zfszone1:net&gt; end <br /> zonecfg:zfszone1&gt; exit <br /> <br /> hostA-global# zoneadm -z zfszone1 install <br /> <br /> hostA-global# cat &gt; /zone_roots/zfszone1/root/etc/sysidcfg <br /> system_locale=C <br /> terminal=dtterm <br /> network_interface=primary { <br />   hostname=zfszone1 <br /> }<br /> timeserver=localhost <br /> security_policy=NONE <br /> name_service=NONE <br /> timezone=US/Eastern <br /> root_password="" <br /> ^D <br /> <br /> hostA-global# touch /zone_roots/zfszone1/root/etc/.NFS4inst_state.domain <br /> hostA-global# zoneadm -z zfszone1 boot <br /> hostA-global# zlogin -C zfszone1<br /> 　　ZFS文件系统提供了许多命令让你观察文件系统的使用情况和状态。虽然下面的命令对于迁移一个容器不是必须的，它们突出了容器实际使用了多少的磁盘空间。<br /> <br />    1. 列出当前的ZFS文件系统，使用zfs list命令：<br /> <br />       hostA-global# zfs list <br />       NAME                  USED    AVAIL   REFER   MOUNTPOINT <br />       zone_roots            73.3M   24.9G   9.50K   /zone_roots <br />       zone_roots/zfszone1   72.9M   427M    72.9M   /zone_roots/zfszone1<br /> <br />       提示，虽然池有25GB的磁盘空间，文件系统可使用500MB，容器已经仅仅使用了73MB。<br />    2. 在活动的ZFS文件系统上查看3次3-秒间隔的I/O统计，使用zpool iostat命令：<br /> <br />       hostA-global# zpool iostat 3 3 <br />                       capacity         operations         bandwidth <br />       pool          used     avail    read     write    read     write <br />       ----------    -----    -----    -----    -----    -----    ----- <br />       zone_roots    73.3M    25.1G    0       1         492      70.2K <br />       zone_roots    73.3M    25.1G    0       1         0        0 <br />       zone_roots    73.3M    25.1G    0       1         0        0<br /> <br /> 　　有关ZFS命令的更多信息可以在&lt;&lt;[url=http://docs.sun.com/app/docs/doc/819-5461?l=zh]ZFS管理指南[/url]&gt;&gt;中找到。<br /> <br /> 　　现在容器必须被停下来为了把它移动到其它的系统。<br />    3. 停止容器，使用zlogin命令：<br /> <br />       hostA-global# zlogin zfszone1 shutdown -y -i 0<br /> <br /> [b]分离容器，创建它的档案，移动它到目标系统[/b]<br /> 　　容器现在可以分离和移动了。<br /> <br />    1. 分离容器，使用zoneadm命令：<br /> <br />       hostA-global# zoneadm -z zfszone1 detach<br /> <br /> 　　这个方法将要使用ZFS的备份功能。备份功能仅在一个快照上操作来提高数据完整性。因此首先创建一个文件系统的快照：<br />    2. 创建一个ZFS快照，使用ZFS命令：<br /> <br />       hostA-global# zfs snapshot zone_roots/zfszone1@Snap1<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000010.gif[/img]<br />       图 10 - 一个ZFS快照<br /> 　　ZFS子命令打包一个ZFS文件系统的所有文件和目录并归档它们。对于这个例子，简单把档案放到一个文件中。<br /> <br />    3. 备份ZFS快照，使用zfs命令：<br /> <br />       hostA-global# zfs send zone_roots/zfszone1@Snap1 &gt; /tmp/zfszone1.Backup1<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000011.gif[/img]<br />       图11 - 一个ZFS档案<br /> 　　移动容器的归档拷贝到新的系统。这有一个在适当配置的系统上scp命令的语法的例子。<br /> <br />    4. 拷贝档案，使用scp命令：<br /> <br />       hostA-global# scp /tmp/zfszone1.Backup1 root@hostB:/tmp/zfszone1.Backup1<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000012.gif[/img]<br />       图 12 - 拷贝一个ZFS档案<br /> <br /> [b]在新系统创建一个新池并在其中恢复档案[/b]<br /> 　　现在档案已经被移到新的系统，剩下的所有工作将在新系统进行。注意命令行提示符将改变来说明这个。ZFS 子命令'receive'将用来解压档案。虽然它能自动创建一个文件系统，它需要一个池在其中来恢复文件系统。<br /> <br />    1. 在新的系统上创建一个ZFS池，使用zpool命令：<br /> <br />       hostB-global# zpool create zone_roots c1t0d0 c1t0d1 c1t0d2<br /> <br /> 　　现在文件系统可以被恢复到池里。必须指定的参数仅是新文件系统的名称。<br /> <br />    2. 在新的系统恢复ZFS文件系统，使用zfs命令：<br /> <br />       hostB-global# zfs receive zone_roots/zfszone2 &lt; /tmp/zfszone1.Backup1<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000013.gif[/img]<br />       图 13 - 解压一个ZFS档案<br /> <br />    3. To list the current ZFS state, use the zfs command:<br /> <br />       hostB-global# zfs list <br />       NAME                        USED    AVAIL   REFER  MOUNTPOINT <br />       zone_roots                  73.3M   24.9G   10K    /zone_roots <br />       zone_roots/zfszone2         73.0M   24.9G   73.0M  /zone_roots/zfszone2 <br />       zone_roots/zfszone2@Snap1   0       -       73.0M  -<br /> <br /> 　　注意备份和恢复一个文件系统的步骤没有携带原来文件系统的500MB配合设置。如果新的文件系统上需要一个配额，必须在恢复文件系统之后设置这个配额。同时注意为备份文件系统而创建的快照随同文件系统被恢复。快照可以删除掉以节省磁盘空间和简化ZFS配置。<br /> <br /> [b]附加容器并验证它的工作[/b]<br /> 　　最后的事情就是在适当的位置正确地去附加容器到新的系统。<br /> <br />    1. 为容器创建新的配置，使用zonecfg命令：<br /> <br />       hostB-global# zonecfg -z zfszone2 <br />       zonecfg:zfszone2&gt; create -a /zone_roots/zfszone2 <br />       zonecfg:zfszone2&gt; exit<br /> <br />    2. 附加和启动容器，使用zoneadm命令：<br /> <br />       hostB-global# zoneadm -z zfszone2 attach <br />       hostB-global# zoneadm -z zfszone2 boot<br /> <br />    3. 现在检查容器的区域名称、主机名和IP地址：<br /> <br />       twilight# zonename <br />       zfszone2 <br />       twilight# hostname <br />       zfszone1 <br />       twilight# ifconfig -a <br />       ... <br />       hme0:1: flags=1000823&lt;UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4&gt; mtu 1500 index <br />       2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255<br /> <br /> 　　虽然区域名称已经改变，但是注意主机名和IP地址没有变。<br /> 　　这部分示范了分离和附加一个区域，有效地把它从一个服务器移动到另一个服务器。说明ZFS文件系统管理简单的ZFS的一些功能也被展示了。<br /> <br /> [size=18][b]容器驻留在UFS/SVM文件系统[/b][/size]<br /> 　　这个方法和前面使用ZFS的部分完成相同的目标。代替ZFS，它使用UNIX文件系统(UFS)和Solaris卷管理器(SVM)。为达到每磁盘有大量的文件系统，使用了SVM软分区。<br /> 　　虽然使用SVM软分区对于安装容器在一个UFS文件系统上不是必须的，它是最简单的方法来使用UFS实现许多的容器，还确保一个容器不占用其它容器的文件系统空间。特别是软分区允许在一个磁盘上有许多文件系统，没有它们，你必须限制你自己到每磁盘少数容器或者每个磁盘片安装多个区域。后面的方案允许一个容器使用文件系统的所有空闲空间，潜在地阻止了其它容器的正确操作。<br /> 　　因为在ZFS例子中，这部分使用了相同的基本方法来创建、分离和重新附加容器。因此又，执行这些步骤的命令被复制到下面，但是没有做说明。<br /> <br /> [b]创建一个SVM软分区和一个UFS系统在软分区上[/b]<br /> 　　这个例子使用两个磁盘来创建一个5GB镜像逻辑设备，从那里创建一个200MB软分区为容器使用。<br /> 　　在为你自己的系统配置SVM之前，你必须明白指定逻辑设别状态数据库复本的数目和布置的规则。在metadb(1M)手册有描述。这个例子为数据和复本使用两个磁盘。在这个情况下，规则指示两个复本必须在每个磁盘分别创建。另外，每个磁盘定义一个5GB分区作为镜像，所有容器将安装在里面。例子使用设备c1t4d0s0、c1t4d0s1、c2t12d0s0 和 c2t12d0s1作为SVM数据库分区，设备c1t4d0s3和c2t12d0s3作为镜像。创建这些磁盘分区的命令的描述超出了本文的范围。<br /> <br /> 在下面的例子呈现了下面的磁盘布局：<br /> <br /> c1t4d0s0    20MB   metadata DB <br /> c1t4d0s1    20MB   metadata DB <br /> c1t4d0s3    5GB    data partition <br /> c2t12d0s0   20MB   metadata DB <br /> c2t12d0s1   20MB   metadata DB <br /> c2t12d0s3   5GB    data partition<br /> <br /> 生成磁盘分区之后，创建SVM数据库和它的复本。<br /> <br />    1. 创建SVM数据库和它的复本，使用meta命令：<br /> <br />       hostA-global# metadb -a -f c1t4d0s0 c1t4d0s1 c2t12d0s0 c2t12d0s1<br /> <br /> 　　下一步创建两个‘逻辑磁盘’－虚拟设备每个包含一个磁盘分区。<br />    2. 创建逻辑磁盘，使用metainit命令：<br /> <br />       hostA-global# metainit d11 1 1 c1t4d0s3 <br />       hostA-global# metainit d12 1 1 c2t12d0s3<br /> <br /> 　　现在创建第三个逻辑磁盘－另一个虚拟设备－为了创建一个镜像的虚拟设备。这个命令同样也指定了两个镜像的一个。<br /> <br />    3. 创建镜像的第一部分，使用metainit命令：<br /> <br />       hostA-global# metainit d10 -m d11<br /> <br /> 　　第二个虚拟设备现在可以作为第一个逻辑磁盘的镜像添加。<br />    4. 添加第二个逻辑磁盘到镜像，使用metattach命令：<br /> <br />       hostA-global# metattach d10 d12<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000014.gif[/img]<br />       图 14 - Solaris卷管理器逻辑设备<br /> 　　一个"软分区"是SVM的一个功能，它允许在一个逻辑磁盘上创建多个虚拟分区。创建一个需要在 metainit 加 -p 选项。<br /> <br />    5. 创建一个新的软分区，使用metainit命令：<br /> <br />       hostA-global# metainit d100 -p d10 200M<br /> <br /> 　　一旦卷存在和应用了一个容量在上面，就可以在其上创建UFS文件系统了。<br /> <br />    6. 创建新的UFS文件系统，使用mkdir、newfs、mount和chmod命令：<br /> <br />       hostA-global# mkdir -p /zones/roots/ufszone1 <br />       hostA-global# newfs /dev/md/dsk/d100 <br />       newfs: construct a new file system /dev/md/rdsk/d100: (y/n)? y <br />       ... <br />       hostA-global# mount /dev/md/dsk/d100 /zones/roots/ufszone1 <br />       hostA-global# chmod 700 /zones/roots/ufszone1<br /> 　　如果你想Solaris在下次系统启动的时候挂载那个设备，你必须在/etc/vfstab中添加适当的纪录。对于这个例子，记录类似如下：<br /> <br />       /dev/md/dsk/d100   /dev/md/rdsk/d100   /zones/roots/ufszone1  ufs  1  yes  -<br /> [img]http://bbs.163jsp.com/images/post/4444/mov000000015.gif[/img]<br />       图 15 - Solaris卷管理器软分区<br /> <br /> [b]创建一个系数根容器，验证它的工作Create a Sparse-Root Container, and Verify that it Works[/b]<br /> 　　为了给你方便，在第一个系统创建一个新容器需要的所有命令在下面被列出。对于完整的说明参看上面的部分。<br /> <br /> hostA-global# zonecfg -z ufszone1 <br /> zonecfg:ufszone1&gt; create <br /> zonecfg:ufszone1&gt; set zonepath=/zones/roots/ufszone1 <br /> zonecfg:ufszone1&gt; add net <br /> zonecfg:ufszone1&gt; set physical=hme0 <br /> zonecfg:ufszone1&gt; set address=192.168.0.102 <br /> zonecfg:ufszone1&gt; end <br /> zonecfg:ufszone1&gt; exit <br /> <br /> hostA-global# zoneadm -z ufszone1 install <br /> <br /> hostA-global# cat &gt; /zones/roots/ufszone1/root/etc/sysidcfg <br /> system_locale=C <br /> terminal=dtterm <br /> network_interface=primary { <br />   hostname=ufszone1 <br /> }<br /> timeserver=localhost <br /> security_policy=NONE <br /> name_service=NONE <br /> timezone=US/Eastern <br /> root_password="" <br /> ^D <br /> <br /> hostA-global# touch /zones/roots/ufszone1/root/etc/.NFS4inst_state.domain <br /> hostA-global# zoneadm -z ufszone1 boot <br /> hostA-global# zlogin -C ufszone1<br /> 　　上面的sysidcfg文件没有为root帐号指定密码，因此在提示密码的时候仅需按&lt;ENTER&gt;建。输入 'hostname' 和 'zonename' 命令来查看主机名和区域名称。<br /> <br />    1. 检查新容器的区域名称和主机名:<br /> <br />       ufszone1# hostname <br />       ufszone1 <br />       ufszone1# zonename <br />       ufszone1<br /> <br />    2. 结束zlogin会话，输入这些命令：<br /> <br /> [b]      exit <br />       ~.[/b]<br /> <br />    3. 为了移动容器先停止容器，使用zlogin命令：<br /> <br />       hostA-global# zlogin ufszone1 shutdown -y -i 0<br /> <br /> <br /> [b]分离容器并移动它[/b]<br /> 　　现在停止容器并准备移动到其它的系统。首先，从系统分离容器。<br /> <br />    1. 从系统分离容器，使用zoneadm命令：<br /> <br />       hostA-global# zoneadm -z ufszone1 detach<br /> <br /> 　　Solaris pax(1)命令是一个不依赖硬件的档案工具。下面显示的语法创建一个名为/tmp/ufszone1.pax的档案文件。<br />    2. 打包容器文件到一个单个的档案，首先进入到zonepath然后使用pax命令：<br /> <br />       hostA-global# cd /zones/roots/ufszone1 <br />       hostA-global# pax -w@f /tmp/ufszone1.pax -p e *<br /> <br /> 　　和前面的例子一样，使用任一文件传输方法来移动档案文件。<br />    3. 为安全移动档案，使用scp命令：<br /> <br />       hostA-global# scp /tmp/ufszone1.pax root@hostB:/tmp/ufszone1.pax<br /> <br /> <br /> [b]在新系统上创建一个SVM软分区和UFS文件系统，并把档案恢复到上面[/b]<br /> 　　在新系统上，重复上面使用的UFS和SVM相关命令创建文件系统，用'ufszone2' 替换 'ufszone1'。确保你创建了/zones/roots/usfzone2文件系统。<br /> 　　当文件系统准备好的时候，解开容器的档案到新系统。<br /> <br />    1. 解压档案到新的系统，cd到zonepath并使用pax命令：<br /> <br />       hostB-global# cd /zones/roots/ufszone2 <br />       hostB-global# pax -r@f /tmp/ufszone1.pax -p e<br /> <br /> <br /> [b]附加容器并验证它的工作[/b]<br /> 　　现在文件系统已经创建，容器文件已解压到上面，可以配置容器并附加到新系统了。<br /> <br />    1. 配置容器，使用zonecfg命令：<br /> <br />       hostB-global# zonecfg -z ufszone2 <br />       zonecfg:ufszone2&gt; create -a /zones/roots/ufszone2 <br />       zonecfg:ufszone2&gt; exit<br /> <br />    2. 附加和启动容器，使用zoneadm命令：<br /> <br />       hostB-global# zoneadm -z ufszone2 attach <br />       hostB-global# zoneadm -z ufszone2 boot<br /> <br /> 　　现在容器已经运行，像以前一样，你可以登录到里面，检查一些事情例如主机名、区域名称和IP地址。<br />    3. 登录到容器的控制台，使用 zloging -C 命令：<br /> <br />       hostB-global# zlogin -C ufszone2 <br />       ufszone1# hostname <br />       ufszone1 <br />       ufszone1# zonename <br />       ufszone2 <br />       ufszone1# ifconfig -a <br />       ... <br />       hme0:1: flags=1000823&lt;UP,BROADCAST,NOTRAILERS,MULTICAST,IPv4&gt; mtu 1500 index <br />       2 inet 192.168.0.102 netmask ffffff00 broadcast 192.168.0.255<br /> <br /> 　　注意，虽然区域名称改变了，但是主机名和IP地址仍然没变。<br /> 　　本部分示范了使用UFS和SVM来分离和重新附加一个区域，有效地把它从一个服务器迁移到另一个服务器。<br /> <br /> =====================================================================================================<br />  <br /> [size=18][b]更多信息[/b][/size]<br /> 　　虽然这个指南提供了迁移容器从一个服务器到几个使用不同文件系统的服务器需要的基本步骤，包括Sun的革命性的ZFS文件系统，它仅仅是一个介绍来提供你的Solaris容器的应用－更加精确的配置也是可能的。关于Solaris容器、ZFS文件系统、和本指南触及的主体的更多信息，请访问 <a class="snap_shots" href="http://www.sun.com/solaris" target="_blank" rel="nofollow">http://www.sun.com/solaris</a> 。<br /> <br /> Solaris ZFS管理指南<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zfs/docs/zfsadmin.pdf</a><br /> <br /> Solaris容器－资源管理和Solaris区域<br /> <a class="snap_shots" href="http://docs.sun.com/app/docs/doc/817-1592" target="_blank" rel="nofollow">http://docs.sun.com/app/docs/doc/817-1592</a><br /> <br /> Solaris手册<br /> <a class="snap_shots" href="http://docs.sun.com/" target="_blank" rel="nofollow">http://docs.sun.com/</a><br /> <br /> Solaris ZFS学习中心(包括视频介绍和演示)	<br /> <a class="snap_shots" href="http://sun.com/solaris/zfs" target="_blank" rel="nofollow">http://sun.com/solaris/zfs</a><br /> <br /> Solaris容器学习中心<br /> <a class="snap_shots" href="http://sun.com/solaris/containers" target="_blank" rel="nofollow">http://sun.com/solaris/containers</a><br /> <br /> Solaris容器指南<br /> <a class="snap_shots" href="http://sun.com/solaris/howtoguides/containers" target="_blank" rel="nofollow">http://sun.com/solaris/howtoguides/containers</a><br /> <br /> ZFS常见问答<br /> <a class="snap_shots" href="http://sun.com/solaris/zfs/faq" target="_blank" rel="nofollow">http://sun.com/solaris/zfs/faq</a><br /> <br /> 附加的问和答<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zfs/faq" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zfs/faq</a><br /> <br /> Solaris区域和容器常见问答<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zones/faq" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zones/faq</a><br /> <br /> OpenSolaris ZFS社区<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zfs" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zfs</a><br /> <br /> Sun ZFS博客<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zfs/blogs" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zfs/blogs</a><br /> <br /> OpenSolaris Zones Community<br /> 	<br /> <a class="snap_shots" href="http://opensolaris.org/os/community/zones" target="_blank" rel="nofollow">http://opensolaris.org/os/community/zones</a>]]></description>
				<guid isPermaLink="true">http://bbs.163jsp.com/posts/preList/687/1153.html</guid>
				<link>http://bbs.163jsp.com/posts/preList/687/1153.html</link>
				<pubDate><![CDATA[Sun, 2 Dec 2007 01:54:14]]> GMT</pubDate>
				<author><![CDATA[ unix]]></author>
			</item>
			<item>
				<title>Solaris容器迁移指南</title>
				<description><![CDATA[ 楼主辛苦！]]></description>
				<guid isPermaLink="true">http://bbs.163jsp.com/posts/preList/687/1418.html</guid>
				<link>http://bbs.163jsp.com/posts/preList/687/1418.html</link>
				<pubDate><![CDATA[Thu, 13 Dec 2007 14:59:44]]> GMT</pubDate>
				<author><![CDATA[ cpu]]></author>
			</item>
			<item>
				<title>Solaris容器迁移指南</title>
				<description><![CDATA[ 真是Solaris容器和区域的好文章，[b][size=24]顶[/size][/b]了！]]></description>
				<guid isPermaLink="true">http://bbs.163jsp.com/posts/preList/687/1446.html</guid>
				<link>http://bbs.163jsp.com/posts/preList/687/1446.html</link>
				<pubDate><![CDATA[Sat, 15 Dec 2007 23:51:09]]> GMT</pubDate>
				<author><![CDATA[ phoenix]]></author>
			</item>
			<item>
				<title>Solaris容器迁移指南</title>
				<description><![CDATA[ 看来Solaris很适合用来架设VPS主机。]]></description>
				<guid isPermaLink="true">http://bbs.163jsp.com/posts/preList/687/1498.html</guid>
				<link>http://bbs.163jsp.com/posts/preList/687/1498.html</link>
				<pubDate><![CDATA[Tue, 18 Dec 2007 00:20:19]]> GMT</pubDate>
				<author><![CDATA[ titan]]></author>
			</item>
	</channel>
</rss>