影子迁移的使用案例不仅仅是将数据移至 Oracle Solaris 11。当您要启用 ZFS 服务 — 如压缩、重复数据删除和加密 — 而需要进行数据转换时,在服务器的现有文件系统与新文件系统(随后重新命名)之间进行影子迁移可能是实现数据转换的最佳方法。
以下是影子迁移的主要设计要求:
必须能够根据标准数据协议 (NFS) 从任意数据源进行迁移,源系统无需运行特殊软件。
在完成整个迁移过程之前,迁移数据必须可用,并能提供原生的访问性能。
要迁移文件系统的所有数据必须存储在该文件系统本身内,且不依赖于外部数据库,以确保一致性。(有关设计和实施详情,请参见“另请参见”部分中的参考内容。)
示例
下面快速演示影子迁移,您可以自行尝试。本示例从本地文件系统迁移数据。但是,原理同样适用于挂载在 NFS 上的远程文件系统。管理手册中提供了远程文件系统的语法(请参见“另请参见”部分)。
首先,创建要迁移的文件系统
root@solaris:~# zpool create oldstuff c3t4d0
root@solaris:~# zfs create oldstuff/forgotten
然后,填充一些文件:
root@solaris:~# cd /var/adm
root@solaris:/var/adm# find . -print | cpio -pdv /oldstuff/forgotten
需要安装 shadow-migration 软件包,如清单 1 所示:
root@solaris:~# pkg install shadow-migration
Packages to install: 1
Create boot environment: No
Create backup boot environment: No
Services to change: 1
DOWNLOAD PKGS FILESXFER (MB)
Completed 1/1 14/14 0.2/0.2
PHASEACTIONS
Install Phase 39/39
PHASE ITEMS
Package State Update Phase 1/1
Image State Update Phase 2/2
清单 1. 安装 shadow-migration 软件包
然后,启用 shadowd 服务:
root@solaris:~# svcadm enable shadowd
root@solaris:~# svcs shadowd
STATESTIME FMRI
online 7:16:09 svc:/system/filesystem/shadowd:default
将要迁移的文件系统设为只读:
root@solaris:~# zfs set readonly=on oldstuff/forgotten
创建一个新的 ZFS 文件系统,将 shadow 属性设为要迁移的文件系统:
root@solaris:~# zfs create -o shadow=file:///oldstuff/forgotten mypool/remembered
用 shadowstat (1M) 命令查看迁移进度,如清单 2 所示:
root@solaris:~# shadowstat
EST
BYTES BYTES ELAPSED
DATASET XFRDLEFTERRORS TIME
mypool/remembered 92.5M - - 00:00:59
mypool/remembered 99.1M 302M- 00:01:09
mypool/remembered 109M260M- 00:01:19
mypool/remembered 133M304M- 00:01:29
mypool/remembered 149M339M- 00:01:39
mypool/remembered 156M86.4M - 00:01:49
mypool/remembered 156M8E - (completed)
清单 2. 查看迁移进度
如上所述,如果您已创建 /mypool/remembered 并加密,这将是对现有数据进行加密的首选方法。现有数据的压缩或重复数据删除也是如此。
测试和注意事项
生产数据的迁移需要在实时迁移之前进行备份和全面的测试。特别要注意以下事项:
客户端将通过不同的物理位置访问数据。完善名称服务和网络地址,这样客户端不会因为尝试修改设为只读的“旧”数据而返回错误。
需要迁移用于身份验证的名称服务条目(控制所有权等的用户和组名称),数据也需要迁移。
当“旧”数据集和“新”数据集可能需要备份时,将会有一个过渡阶段。
需要特别注意元数据和设置,尤其是在从非 ZFS 迁移到 ZFS 的时候。尤其需要测试访问控制列表 (ACL)、扩展属性和类似设置。
影子迁移以一对一的方式将数据从一个文件系统移至另一个文件系统。将多个文件系统整合到较少文件系统应作为迁移过程中的一个独立阶段来完成。
性能
影子迁移特性的性能取决于以下各项:
数据性质(小文件天生比大文件慢)
客户端访问新数据的模式
源系统和目标系统的相关磁盘配置
网络媒体的吞吐量和延迟情况
影子迁移的设计目标是弱化转换性能对客户端的重要性,重要的是客户端能继续快速访问所需的数据。但是,如果旧媒体和新媒体之间的转换的原始性能本身很重要,您可能不想使用影子迁移,因为它被设计为无缝且“不可见”,但本身不快。
另请参见
Eric Schrock 在博客中介绍了影子迁移的动机和设计以及工程内部机制。影子迁移的正规处理方法包含在 Oracle Solaris 管理:ZFS 文件系统 手册中。
方法1:#!/bin/bash
for (( cid = 100cid <201cid++))
do
sqlplus 'user01/pw123456' <<EOF
insert into T1 (id) VALUES ($cid)
quit
EOF
done
方法2:a.txt一行包含多个变量
#!/usr/bin/env bash
while read x y zdo
echo $x $y $z
sqlplus 'user01/pw123456' <<EOF
insert into T1 (id1,id2,id3) VALUES ($x,$y,$z)
quit
EOF
done <a.txt
方法3:用awk生成insert语句,加入id1.txt每行包含1个数字,生成每行一个insert语句id2.sql。
#!/bin/bash
awk '{print "insert into t1 (id1) values ("$1")" }' id1.txt >id2.sql
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)