8 迁移到新存储介质

磁带是高度可靠且稳定的介质,适用于长期存储和保留数据。但它的寿命有限。正常的机械过程(挂载、拉伸和读取/写入)中所产生的磨损和损伤会随着时间累积。当具有更高性能的新设备可用时,较旧的驱动器便会更难支持,并且兼容的介质变得更昂贵而且更难找到。因此,在某个点,您需要将归档传输到新介质。

在 Oracle HSM 分层文件系统中,将旧介质替换为新介质是复杂的过程。磁带介质是文件系统不可或缺的部分。文件系统元数据记录每个文件的数据的多个副本的位置,一些副本位于磁盘上,另一些位于磁带副本上。因此文件系统 inode 必须进行更新,以便在复制磁带后反映已迁移文件副本的新位置。同时,必须对介质和驱动器进行管理,以便在创建副本时不会干扰正常的文件系统操作(如归档和回写)。

Oracle Hierarchical Storage Manager 提供两种方法来管理复杂的介质迁移。每种方法都有其优点,具体取决于您的要求。

Oracle HSM 6.1 中引入的介质迁移功能将整个卷从一个磁带库驱动器上挂载的介质迁移到另一个磁带库驱动器上挂载的介质,并在该过程中更新文件系统元数据。这样便能够最大程度地降低系统开销和管理员工作负荷。当不需要对驱动器进行归档或回写时,会在后台复制卷。您可以指定所用驱动器的数量以及可能发生迁移的时间。或者您可以让 Oracle HSM 在驱动器空闲时迁移卷。如果归档或回写作业需要某个驱动器或卷,则介质迁移过程会服从优先级更高的操作。如果已正确配置,而且存在 StorageTek T1000D(或更高版本)目标驱动器,则可以使用 T10000 扩展复制功能和 Oracle HSM xcopy 选项进行迁移。在发出请求之后,驱动器会自行处理复制,而不使用服务器资源。否则,您仍可以使用 Oracle HSM 服务器复制选项来最小化服务器负荷。文件系统服务器随后将通过一个可配置的 I/O 缓冲区在驱动器之间复制卷。

常规的归档过程还可以迁移数据,一次复制一个归档文件。可以将系统配置为将文件从旧介质回写到磁盘高速缓存,然后再将它们重新归档到新介质。该逐个文件方法可使您更大程度地对文件的分组和分发方式进行控制。但它需要更多的管理。您可以亲自分配磁盘高速缓存和驱动器资源,因此,如果您需要最大程度地降低对常规文件系统操作的干扰,则必须仔细规划。

本文档的其余部分会引导您完成该过程:

准备迁移

在进一步继续操作之前,执行以下步骤:

确保文件系统已备份

在启动介质迁移之前,确保通常保护 Oracle HSM 归档数据的恢复机制在转换期间和转换之后仍保持有效。在迁移操作过程中,可能会出现或多或少的加密硬件故障和用户错误。因此,您需要始终确保可以从现存的 samfsdump 恢复点文件恢复文件和/或完成文件系统。

在迁移期间和在迁移之后的某个时间,恢复将取决于引用源磁带卷的恢复点文件,而不是新的目标卷。如果严重硬件故障禁用文件系统,而且这些旧磁带不可用,则将无法进行恢复。

因此,至少对保留旧磁带方面进行计划,直到您已创建足够的新恢复点,以便从新介质恢复当前的文件系统。如果您需要确保将文件恢复到特定的时间点,则可能需要将旧介质保留更长时间(如果无法无限期保留)。最好将旧卷保留在便于访问它们的磁带库中。

提供所需的介质

确保目标磁带库包含足够的、可存放已迁移文件的介质。确保所有的卷带有正确的标签,如为新磁带设置标签或者为现有磁带重新设置标签中所述。如果卷不带标签,迁移将失败。

选择迁移方法

所选迁移方法取决于归档状态以及用户和应用程序要求。使用下面的过程做出决定。

选择最符合您需求的迁移方法

  1. 确定归档在迁移过程中是否仍保持运行。

    停止归档并使所有的资源专门用于迁移可能会简化任务并加速完成。但是,如果归档正在使用中,则它的实用性不大。

  2. 如果您需要选择性地迁移多组归档文件(而不是迁移整个卷),或者需要保持多组归档文件之间的指定关系,请使用回写和重新归档方法。转至回写文件并将其重新归档到替换介质中

  3. 如果您只需将旧卷复制到新介质和/或需要最小化迁移对文件系统操作的影响,请使用卷迁移方法。

  4. 如果您没有可用作目标驱动器的光纤通道 Oracle StorageTek T10000D(或更高版本)驱动器,或者源或目标磁带不共享公用块大小,请使用服务器复制方法。

    在该模式下,Oracle HSM 软件仅将有效的归档文件从源驱动器复制到文件系统服务器上可配置的 I/O 缓冲区。如果源块大小不同于目标块大小,则软件会自动进行调整,但前提是目标块大于源块。软件随后会将磁带块从缓冲区发送到目标驱动器。

  5. 如果您有光纤驱动器 StorageTek T10000D(或更高版本)目标驱动器,这些驱动器均运行最新的固件,源磁带和目标磁带共享相同的块大小,而且源驱动器和目标驱动器通过同一个存储区域网络 (storage area network, SAN) 开关建立连接,则使用 Oracle HSM xcopy 选项。

    在指定 xcopy 时,文件系统服务器向驱动器发送 SCSI 复制请求,T10000D 驱动器将从第一个有效的归档文件开始,将源逐块复制到目标磁带。如果 xcopy 操作由于某种原因失败,则迁移软件会自动切换到服务器复制方法。xcopy 方法会最大限度地提高性能并最大限度地降低服务器开销。

    有关驱动器和固件要求的更多信息,请参见发行说明 README.txt,位于下载 ZIP 文件中,或文件系统服务器上的 /opt/SUNWsamfs/doc/README.txt 中

  6. 如果源卷包含相对较少的过期文件,请在 eod(数据末尾)模式下使用 xcopy 选项。

    在该模式下,T10000 磁带机会复制在第一个有效文件和磁带上的数据末尾 (end-of-data, EOD) 标志之间找到的所有归档文件。如果其中的某些文件已过时,则它们会复制到包含有效文件的目标卷。

  7. 如果源卷包含许多过期文件,请在 repack 模式下使用 xcopy 选项。

    在该模式下,T10000 磁带机仅将未过期的归档文件复制到目标卷。

  8. 转至回写文件并将其重新归档到替换介质中

迁移完整卷

选择服务器复制或直接复制方法并通过创建 migrationd.cmd 文件来配置迁移。执行以下任务:

创建 migrationd.cmd 文件

  1. root 用户身份登录到 Oracle HSM 元数据服务器。

    root@solaris:~# 
    
  2. 在文本编辑器中打开 /etc/opt/SUNWsamfs/migrationd.cmd 文件。

    在示例中,在 vi 编辑器中打开新文件并添加一个初始注释:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    # /etc/opt/SUNWsamfs/migrationd.cmd
    # A configuration file for migrating data from old tape volumes to replacements
    
  3. 如果只需迁移少量卷,请指定每个源卷、目标卷和迁移方向。对于每个源卷,输入 migrate = from source to destination 格式的行,其中:

    • media_type 是用来标识存放源的介质种类的两字母代码(有关详细信息,请参见附录 A 设备类型词汇表)。

    • VSN 是用来标识磁带库中磁带卷的唯一卷序列号。

    在示例中,要将数据从旧的 LTO (li) 磁带 VOL305 迁移到新的 Oracle StorageTek T10000 (ti) 磁带盒 VOL820

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    # /etc/opt/SUNWsamfs/migrationd.cmd
    # A configuration file for migrating data from old tape volumes to replacements
    # Migrate a single volume.
    migrate = from li VOL305 to ti VOL820
    
  4. 如果您需要迁移大量卷,则需要为源卷和目标卷定义介质池。通过输入 vsnpool = poolname library equipment_number media_type VSNlist 格式的行定义每个池,其中:

    • name 唯一地标识池。

    • equipment_numbermcf 为存放源卷的磁带库分配的序号。

    • media_type 是用来标识存放源的介质种类的两字母代码(有关详细信息,请参见附录 A 设备类型词汇表)。

    • VSNlist 是用来标识 VSN 组和范围的用空格分隔的文本 VSN 和/或正则表达式。

    在示例中,将数据从旧的 LTO4 (li) 磁带卷迁移到新的 LTO6 (ti) 磁带盒。可以为源池 pool1 添加一行,以表示磁带库 20 中将迁移的 LTO4 卷。这些包括 VSN 位于 VOL000VOL299 范围内的卷,以及两个单独的卷 VOL300VOL304。然后,为目标池 pool2 添加一行,以表示磁带库 30 中 LTO6 卷的范围。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    # /etc/opt/SUNWsamfs/migrationd.cmd
    # A configuration file for migrating data from old tape volumes to replacements
    # pool1 contains the source volumes 
    vsnpool = pool1 library 20 li ˆVOL[0-2][0-9][0-9] VOL300 VOL304
    # pool2 contains the destination volumes
    vsnpool = pool2 library 30 li ˆVOL50[0-9]
    
  5. 如果已经定义了源和目标介质池,则指定迁移方向。输入 migrate = from sourcepool to destinationpool 格式的行,其中:

    • sourcepool 是包含将迁移的数据的介质池。

    • destinationpool 是将接收迁移数据的介质池。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    vsnpool = pool1 library 20 li ˆVOL[0-2][0-9][0-9] VOL300 VOL304
    # pool2 contains the destination volumes
    vsnpool = pool2 library 30 ti ˆVOL50[0-9]
    # Migrate data from tapes in pool1 to tapes in pool2.
    migrate = from pool1 to pool2
    
  6. 如果您打算以独占的方式使用服务器复制方法,则禁用 xcopy 功能。输入 xcopy = off 格式的行。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    # Disable xcopy and the StorageTek T10000 Extended Copy feature.
    xcopy = off
    
  7. 如果您打算以独占的方式使用 StorageTek T10000 扩展复制功能,而且不打算在支持此功能的驱动器不可用时迁移数据,则仅启用 xcopy 迁移。输入 xcopy = only 格式的行。

    在示例中,仅启用 xcopy。如果源驱动器或目标驱动器不支持扩展复制功能,则迁移软件将自动取消迁移:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    # Enable xcopy, StorageTek T10000D Extended Copy feature.
    # If the source or destination is not xcopy capable, cancel migration.
    xcopy = only
    
  8. 如果您打算尽可能利用 StorageTek T10000 扩展复制功能,则启用 xcopy 迁移方法。输入 xcopy = on 格式的行。

    在示例中,启用 xcopy,即便在迁移期间,兼容的驱动器可能并非始终可用。如果源驱动器或目标驱动器不支持扩展复制功能,则迁移软件将自动切换到服务器复制模式:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    # Enable xcopy, StorageTek T10000D Extended Copy feature.
    # If the source or destination is not xcopy capable, automatically switch
    # to the server buffer copy.
    xcopy = on
    
  9. 如果您打算使用 xcopy 方法迁移包含几个过期文件的磁带卷,则将 xcopy 设置为在数据末尾 (eod) 模式下运行。输入 xcopy_eod = on 格式的行。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    xcopy = on
    xcopy_eod = on
    
  10. 如果您打算使用 xcopy 方法迁移包含大量过期文件的磁带卷,则将 xcopy 设置为在重新打包模式下运行。输入 xcopy_eod = off 格式的行。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    xcopy = on
    xcopy_eod = off
    
  11. 指定在 xcopy 会受到优先级较高的归档或回写任务的干扰之前必须复制的最小数据量。输入 xcopy_minsize = amountunits 格式的行,其中:

    • amount 是整数。

    • unitsk(表示千字节),M(表示兆字节)、G(表示千兆字节)、T(表示兆兆字节)、P(表示千兆兆字节)或 E(表示艾字节)。

    此值为更多其他任务定义 T10000 磁带机的高效利用率和驱动器的可用性之间的折衷。值越大,向驱动器中写入数据时越高效。值越小,用于归档和回写的驱动器的可用性越高。在示例中,将最小副本大小设置为 30 千兆字节:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    xcopy_eod = on
    # xcopy can be interrupted after 30GB copied.
    xcopy_minsize = 30G
    
  12. 定义允许迁移作业运行的每日时间段。输入 runtime = window 格式的行,其中 window 是以下值之一:

    • always 使迁移守护进程在不需要归档或回写驱动器和介质时迁移数据。如果迁移守护进程正在使用需要归档或回写的驱动器或介质,则迁移守护进程会移交它们。

    • start_time end_time,其中 start_timeend_time 分别是允许的时间段开始和结束的时间,用 24 小时制 (HHMM) 表示。

    在任何时间都可以通过发出命令 samcmdmigstartmigidlemigstop 覆盖此指令。

    当回写程序或归档程序需要卷和驱动器时,迁移服务会放弃这些卷和驱动器。因此,除非遇到归档或回写问题(例如,在高峰时间),否则应当接受默认值 always

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    xcopy_minsize = 30G
    # Run all of the time. Migration daemon will yield VSNs and drives when
    # resources are wanted by the SAM-QFS archiver and stager.
    run_time = always
    
  13. 通过指定日志目录启用日志记录。输入 logdir = path 格式的行,其中 path 是目录的路径和名称。

    在定义了目录之后,迁移守护进程记录从每个源卷迁移的每个归档文件的目标。每个卷都有一个名为 media_type.VSN 的日志文件,其中:

    • media_type 是用来标识源介质种类的两字母代码(有关详细信息,请参见附录 A 设备类型词汇表)。

    • VSN 是用来标识源卷的唯一卷序列号。

    因此,例如,具有 VSN VOL300 的源卷的日志文件将命名为 li.VOL300

    与归档程序日志一样,在灾难恢复期间,这些迁移日志可能会非常宝贵(有关详细信息,请参见了解恢复点和归档日志和《Oracle Hierarchical Storage Manager and StorageTek QFS Software 文件系统恢复指南》。因此,如果可以,请始终指定日志目录。选择一个不会受 Oracle HSM 软件失败或硬件故障影响的位置,如 /var/adm/。在示例中,指定 /var/adm/hsm_migration_logs 目录:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    run_time = always
    # Log directory for the migration logs. 
    logdir = /var/adm/hsm_migration_logs
    
  14. 为迁移 inode 数据库指定主目录。输入 dbdir = path 格式的行,其中,path 是目录的绝对路径名称。

    会为每个源卷创建一个 inode 数据库并在迁移期间维护该数据库。会为在源卷上找到的每个归档副本创建一个 224 字节的数据库记录。因此,您选择的位置必须具有足够的磁盘空间,以便能够容纳可以放在源介质上的最大数量的副本。例如,每个 Oracle StorageTek T10000D 卷最多可以存放 8,200,104,892 个归档副本。因此,对于将在任何给定时间迁移的每个 T10000D 卷,您将大约需要 1.67 TB 数据库空间(有关详细信息,请参见 migration.cmd (1m) 手册页)。

    默认数据库位置是 /var/opt/SUNWsamfs/sammig/db。在示例中,指定默认目录:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    logdir = /var/adm/hsm_migration_logs
    # database home directory
    dbdir = /var/opt/SUNWsamfs/sammig/db
    
  15. 为目标设备设置迁移缓冲区大小。输入 buffsize = media_type blocks 格式的行,其中:

    • media_type 是用来标识存放源的介质种类的两字母代码(有关详细信息,请参见附录 A 设备类型词汇表)。

    • size[2-8192] 范围中的整数,其中,整数值指定缓冲区应当能够存放的磁带块数。默认值为 64

    在示例中,分配了足以存放默认数量的 Oracle StorageTek T10000 磁带块的空间。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    # database home directory
    dbdir = /var/opt/SUNWsamfs/sammig/db
    # allocate buffer space for 64 T10000D tape blocks
    bufsize = ti 64
    
  16. 指定每个磁带库可用于迁移的最大驱动器数。输入 max_drives = library-list 格式的行,其中:

    • library-list 是用空格分隔的磁带库条目列表,每个条目都采用 library equipment-number device-count 格式。

    • equipment-number 是为 mcf 文件中的磁带库分配的设备序号。

    • device-count 是可以用在指定磁带库中的驱动器数。默认情况下,device-count 设置为磁带库中的驱动器数。

    当回写程序或归档程序需要卷和驱动器时,迁移服务会放弃这些卷和驱动器。因此,除非遇到归档或回写问题,否则应当接受默认设置并允许迁移功能使用任何可用驱动器。在示例中,发现了的确需要限制驱动器的用法。因此,我们在磁带库 20 中分配八个要迁移的驱动器,在磁带库 30 中分配六个要迁移的驱动器,在磁带库 40 中分配两个要迁移的驱动器:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    dbdir = /var/opt/SUNWsamfs/sammig/db
    # allocate buffer space for 64 T10000D tape blocks
    bufsize = ti 64
    # For migration, use 8 drives in library 20, 6 in 30, and 2 in 40
    max_drives = library 20 8 library 30 6 library 40 2
    
  17. 指定同时运行的与迁移相关的复制操作的最大数量。输入 max_copy = processes 格式的行,其中,processes 是整数。

    默认值是最大值,等于 mcf 文件中列出的所有磁带库中所配置的驱动器数除以 2。在示例中,最多允许八个同时进行的复制进程:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    bufsize = ti 64
    # For migration, use 8 drives in library 20, 6 in 30, and 2 in 40
    max_drives = library 20 8 library 30 6 library 40 2
    # Up to 8 sam-migcopy process can be run simultaneously.
    max_copy = 8
    
  18. 指定同时运行的与迁移相关的磁带扫描操作的最大数量。输入 max_scan = processes 格式的行,其中,processes 是整数。

    要标识迁移源 VSN 上的归档副本,sam-migrationd 守护进程扫描 mcf 中配置的所有文件系统,从磁盘高速缓存中读取所有的 inode,并将每个 inode 中的 vsn 字段与迁移源卷的卷序列号 (Volume Serial Number, VSN) 进行比较。该进程会增加文件系统中的元数据活动,并可能会因此对文件系统性能产生负面影响。

    选择一个可以将可接受的文件系统性能与迁移速度最好地进行平衡的值,或者针对大多数用法接受默认值 4。如果打算停止文件系统以实现最快的迁移,请将 max_scan 设置为 0,以便所有的源卷仅扫描一次。在示例中,根据经验了解,最多可以允许同时有八个扫描进程,而不会影响正常的文件系统操作:

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    bufsize = ti 64
    # For migration, use 8 drives in library 20, 6 in 30, and 2 in 40
    max_drives = library 20 8 library 30 6 library 40 2
    # Run up to 8 sam-migcopy processes simultaneously.
    max_copy = 8
    # Scan up to 8 VSNs simultaneously.
    max_scan = 8
    
  19. 保存文件并关闭编辑器。

    root@solaris:~# vi /etc/opt/SUNWsamfs/migrationd.cmd
    ...
    max_copy = 8
    # Scan up to 8 VSNs simultaneously.
    max_scan = 8
    :wq
    root@solaris:~# 
    

检查处于活动状态的迁移作业

本节中的说明描述如何使用 samcmd 命令从 shell 命令提示符输入命令。但是,请注意,所有的命令还可以从 samu 界面以 :command 格式输入,其中 command 是命令的名称。

  1. 如果尚未登录到 Oracle HSM 元数据服务器,则以 root 用户身份登录。

    root@solaris:~# 
    
  2. 确保上一个迁移当前处于非活动状态或者已完成。首先,检查当前的迁移状态。使用 samcmd x 命令。

    如果另一个迁移复制作业正在进行,则以下命令会按介质类型和 VSN、复制模式、完成百分比和当前的复制状态列出源和目标卷:

    root@solaris:~# samcmd x
    Migration status   samcmd  version HH:MM:SS month day year
    samcmd on hsm61sol
    Status: Stop: Waiting for :migstart
    source    dest    cmod perc status
    li VOL004 li VOL042 -   60% Copy idled
    

    否则,如果没有其他迁移复制作业正在运行,则以下命令将不列出任何作业:

    root@solaris:~# samcmd x
    Migration status     samu      ver  time date
    Source Vsns - wait:  0 fsscan: 0 copy: 0 update ino: 0 log: 0 done:  0
    Status: Idle: Waiting for :migstart
    source  dest  cmod  perc  status
    
  3. 接着,检查当前任何源 (S) 和/或目标 (D) 卷的状态。使用命令 samcmd y

    在第一个示例中,所列出的唯一源卷和目标卷的作业 end time10/16 12:14。源卷的复制已完成。因此当前没有运行任何作业:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    Status:  Run  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn     start time  end time    status  Inodes done/tot    bytes
      0 S li VOLa01  10/16 12:12 10/16 12:14 complete    35023/35023   550.00M
      0 D li VOLa80  10/16 12:12 10/16 12:14 avail                     550.00M
    

    在第二个示例中,源卷和目标卷的作业 end timenone。源卷仍复制到目标卷。因此,迁移作业仍在运行:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    Status:  Run  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn     start time  end time  status  Inodes done/tot    bytes
      0 S li VOLa02  10/16 12:12 none      copy            0/35023   164.50M
      0 D li VOLa81  10/16 12:12 none      copy                      148.75M
    
  4. 最后,检查磁带库目录中的卷列表。使用命令 samcmd v。在输出中查找以下标志:

    • R 表示卷是只读的。当迁移启动时,源卷标记为只读。

    • S)表示仍从该卷复制数据。

    • D目标)表示仍将数据复制到该卷。

    • m 表示源卷已完成迁移。

    • e 表示源卷由于错误无法迁移。

    在示例中,卷 VOLa01 成功迁移到 VOLa80。卷 VOLa02 仍然正在迁移到 VOLa81,但无法迁移。

    root@solaris:~# samcmd v
    Robot catalog   samcmd  version HH:MM:SS month day year
    Robot VSN catalog by slot       : eq 800
    slot          access time count use flags         ty vsn
    count 64
       0     2015/06/29 17:00    1  95%  -il---b--Rm-  li VOLa01 
       1     2015/07/02 17:43    2  89%  -il-o-b--RS-  li VOLa02
       2     2015/07/02 18:31    2  89%  -il-o-b--Re-  li VOLa03
       ... 
       51    2015/10/16 15:18    2    82%  -il-o-b-----  li VOLa80 
       52    2015/10/16 15:25    2    84%  -il-o-b---D-  li VOLa81 
    
  5. 如果作业正在运行,请等待它们完成。

  6. 否则,在确保当前没有运行任何迁移之后,迁移卷

迁移卷

本节中的说明描述如何使用 samcmd 命令从 shell 命令提示符输入命令。但是,请注意,所有的命令还可以从 samu 界面以 :command 格式输入,其中 command 是命令的名称。

  1. 如果尚未登录到 Oracle HSM 元数据服务器,则以 root 用户身份登录。

    root@solaris:~# 
    
  2. 确保源文件系统已挂载。

  3. 激活 migrationd.cmd 文件。使用命令 samcmd migconfig

    如果配置成功,则命令显示 Configuring migration 消息并指引您查看日志文件以了解详细信息:

    root@solaris:~# samcmd migconfig
    samcmd: migconfig: Configuring migration (see /var/opt/SUNWsamfs/sammig/logfile)
    root@solaris:~# 
    

    否则,该命令会停止并出现错误。要么是在发出配置命令之前已经无法停止迁移过程,要么是在磁带机仍等待迁移时已停止迁移:

    root@solaris:~# samcmd migconfig
    samcmd: migconfig: Can't configure migration, migration status is not stop, or migration job is pending
    root@solaris:~# 
    
  4. 显示迁移配置。使用命令 samcmd y

    如果配置成功,则列出指定的卷,源卷的状态为 sched_wait已计划正在等待),目标卷的状态为 avail可用)。在示例中,配置已成功:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    samcmd on hsm61sol
    Status: Stop: Waiting for :migstart  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn    start time  end time    status  Inodes done/tot      bytes
      0 S li VOL001 none        none        sched_wait        0/0            0
      0 D li VOL501 none        none        avail                            0
    
  5. 如果配置成功,则启动迁移。使用命令 samcmd migstart

    root@solaris:~# samcmd migstart
    samcmd: migstart: State changed to start
    root@solaris:~# 
    
  6. 检查迁移状态。使用命令 samcmd xsamcmd y

    在示例中,迁移刚刚启动。Migration status 屏幕显示作业状态现在为 Run1 个副本正在使用 s服务器)复制模式 (cmod),复制完成的进度为 0%0 个 inode 已更新,源卷状态仍为 Loading

    root@solaris:~# samcmd x
    Migration status    samcmd  version HH:MM:SS month day year
    Source Vsns - wait:  0 fsscan: 0 copy: 1 update ino: 0 log: 0 done:  0
    Status: Run
    source      dest              cmod perc status
    li VOL001 li VOL501 s        0%   Loading li.VOL001
    

    Migration vsn list 屏幕显示 2 个卷当前正在处理,1 个源和 1 个目标。这两个卷的状态现在是 copy,这表示源正复制到目标。此时,已将 0 字节从源复制到目标,35023 个 inode 中的所有 inode 都尚未更新:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    Status: Run  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn     start time  end time  status  Inodes done/tot    bytes
      0 S li VOL001  10/16 12:12 none      copy            0/35023        0
      0 D li VOL501  10/16 12:12 none      copy                           0
    
  7. 再次使用命令 samcmd xsamcmd y 定期重新检查迁移状态。

    在示例中,Migration status 屏幕显示复制现在完成了 23%,已经从源读取了 560 (0x00000230) 个磁带块:

    root@solaris:~# samcmd x
    Migration status    samcmd  version HH:MM:SS month day year
    Source Vsns - wait:  0 fsscan: 0 copy: 1 update  ino: 0 log: 0 done:  0
    Status:  Run
    source    dest        cmod perc status
    li VOL001 li VOL501 s        24% 0x00000230 blocks read
    

    Migration vsn list 屏幕显示已从源卷读取 164.50 兆字节,已向目标卷中写入 148.75 兆字节:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    Status:  Run  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn     start time  end time  status  Inodes done/tot    bytes
      0 S li VOL001  10/16 12:12 none      copy            0/35023   164.50M
      0 D li VOL501  10/16 12:12 none      copy                      148.75M
    
  8. 当迁移完成时,检查最终状态。使用命令 samcmd xsamcmd y 并检查迁移日志文件:

    在示例中,屏幕上不再列出源卷和目标卷 Migration status,现在显示 1 个复制现已完成。请注意,迁移状态仍为 Run,它将一直保持此状态,直到我们输入 migidlemigstop 命令:

    root@solaris:~# samcmd x
    Migration status    samcmd  version HH:MM:SS month day year
    Source Vsns - wait:  0 fsscan: 0 copy: 0 update ino: 0 log: 0 done:  1
    Status: Run
    source    dest    cmod perc status
    

    Migration vsn list 屏幕显示已从源卷读取 550.00 兆字节,已向目标卷中写入 550.50 兆字节:35023 个 inode 都已经进行更新,以反映已迁移的归档副本的新位置:

    root@solaris:~# samcmd y
    Migration vsn list   samcmd  version HH:MM:SS month day year
    Status:  Run  Vsns:2 src:1 dest:1 maxcopy:2
    ord m ty vsn     start time  end   time  status  Inodes done/tot    bytes
      0 S li VOL001  10/16 12:12 10/16 12:14 complete    35023/35023   550.00M
      0 D li VOL012  10/16 12:12 10/16 12:14 avail                     550.00M
    

    迁移守护进程的日志文件会列出迁移的每个阶段并最终给出摘要。在示例中,使用 Solaris tail 命令查看最新的条目:

    root@solaris:~# tail /var/opt/SUNWsamfs/sammig/logfile
    date time Info: Schedule: Create VsnList file.
    date time Info: Schedule: VsnList file created, source: 1, destination: 1.
    date time Info: Schedule: Migration status changed to Start.
    date time Info: 'li.VOL001' Filesystem scan: Started
    date time Info: 'li.VOL001' Filesystem scan: Completed, total copy bytes: 517.2M, inodes: 35023, multi vsn copy: 0, removable-media file: 0, obsolete copy: 0
    date time Info: 'li.VOL001' Copy: Started, pid: 2459 destination 'li.VOL012'
    date time Info: 'li.VOL001' Copy: Mode - server copy
    date time Info: 'li.VOL001' Copy: Server copy started from position 0x4.
    date time Info: 'li.VOL001' Copy: Tar header check started from position 0x4.
    date time Info: 'li.VOL001' Copy: Tar header check succeeded, 5 inodes checked, 0 tar header error found.
    date time Info: 'li.VOL001' Copy: Completed, pid: 2459, exit status: 12, signal: 0
    date time Info: 'li.VOL001' Update inode: Started, source position: 0
    date time Info: 'li.VOL001' Update inode: Completed.
    date time Info: 'li.VOL001' Log: Started, source position: 0
    date time Info: 'li.VOL001' Log: Completed.
    date time Summ: 'li.VOL001'
    date time Summ: 'li.VOL001' =============== Summary ===============
    date time Summ: 'li.VOL001' Status:    Complete
    date time Summ: 'li.VOL001' Copy mode: Server copy
    date time Summ: 'li.VOL001' Start at:  date time
    date time Summ: 'li.VOL001' End at:    date time
    date time Summ: 'li.VOL001' Bytes:     550.00M
    date time Summ: 'li.VOL001' Archive copies:                   35023
    date time Summ: 'li.VOL001' Read error copies:                    0
    date time Summ: 'li.VOL001' Multi vsn copies:                     0
    date time Summ: 'li.VOL001' Removable-Media file:                 0
    date time Summ: 'li.VOL001' ---Dest---   ---Bytes---   ---Copies---
    date time Summ: 'li.VOL001' li VOL501        550.00M          35023
    root@solaris:~# 
    
  9. 最后,确保将卷迁移日志复制到安全位置。

    这些日志记录从每个源卷迁出的每个归档文件副本的目标卷和开始位置。当您需要恢复文件或文件系统时,此信息至关重要。因此,Oracle 强烈建议您将这些文件的备份副本与恢复点和归档程序日志文件保留在一起,如第 7 章 备份配置和文件系统中和《Oracle Hierarchical Storage Manager and StorageTek QFS Software 安装和配置指南》中的相应章节中所述。

    迁移守护进程会在 migrationd.cmd 文件所指定的目录中创建迁移日志文件。对于所迁移的每个卷,它会创建一个名为 media_type.VSN 的文件,其中:

    • media_type 是用来标识源介质种类的两字母代码(有关详细信息,请参见附录 A 设备类型词汇表)。

    • VSN 是用来标识源卷的唯一卷序列号。

    在示例中,将卷日志从指定的日志目录 /var/adm/hsm_migration_logs/ 复制到 NFS 挂载的远程文件系统上用来保留文件系统恢复资源的目录:

    root@solaris:~# ls /var/adm/hsm_migration_logs/
    li.VOL001  li.VOL002  li.VOL003  li.VOL004  li.VOL005  li.VOL006 ... ti.801 ...
    root@solaris:~# cp /var/adm/hsm_migration_logs/*.* /zfs/recover/hsmfs1/2015mig/
    
  10. 在重新归档所有文件之后,会根据您的要求处置磁带(请参见迁移之后处置旧介质)。

  11. 在此处停止。迁移已完成。

回写文件并将其重新归档到替换介质中

要使用回写和重新归档方法将归档文件从旧介质迁移到新介质,需要确定要迁移的文件,将其回写到磁盘高速缓存中,然后将其写入新介质,此过程不会干扰正常的文件系统操作。本章介绍该过程中的以下阶段:

估算可用资源

回写和重新归档过程的细节很大程度上取决于两个因素:可用的磁盘存储量和可用的可移除介质驱动器数量。在介质迁移过程中,Oracle HSM 回写程序将旧可移除卷装入可以读取旧介质格式的驱动器并将归档的文件恢复到磁盘高速缓存中。然后 Oracle HSM 归档程序使用可以写入新介质格式的驱动器将文件重新归档至新的可移除卷。因此,理想情况下,一次性将任何给定磁带卷上的所有文件回写到磁盘上,然后直接将其归档到新介质。

为此,必须在迁移期间准备充足的专用资源:

  • 与整个磁带容量相当的磁盘空间

  • 一个专用的读取旧磁带格式的驱动器

  • 一个专用的写入新格式的驱动器。

如果您可以停止文件系统直到迁移完成,则上述各项不是问题。但在生产设置下迁移数据,而不过多干扰正在进行的文件系统和归档操作,还需要考虑一些细节。如果可用磁盘空间或磁带机不足,需要确定可以为迁移准备的合理备用资源,然后调整迁移过程。因此执行如下操作:

  1. 估算可以用于迁移但不会影响正常的文件系统操作的磁盘高速缓存量。

  2. 估算可以专供迁移的磁带机数量。

    如果可用磁带机数量有限,需要计划减少回写和归档进程,以免迁移过程影响正常的操作。

  3. 根据上面的估算结果,确定回写和归档参数。确定可用磁盘空间在任何时刻可以容纳的最大迁移文件数,以及允许文件从高速缓存移出并移入新介质的最大速率。

  4. 在估算了资源之后,计划旧介质的迁移后处置

将归档过程配置为使用新介质

将新介质添加到 archiver.cmd 文件中并修改归档复制指令,以便始终使用新介质创建一个副本。

  1. 在文本编辑器中打开 /etc/opt/SUNWsamfs/archiver.cmd 文件。

    归档策略指定两个副本,两者都写入要替换的介质类型。在示例中,用 vi 编辑器打开文件。此处要替换 DLT 磁带(键入 lt):

    root@solaris: vi /etc/opt/SUNWsamfs/archiver.cmd
    # =============================================
    # /etc/opt/SUNWsamfs/archiver.cmd
    # ---------------------------------------------
    ...
    # ---------------------------------------------
    # VSN Directives
    vsns
    allfiles.1 lt .*
    allfiles.2 lt .*
    endvsns
    
  2. 在副本 2 的指令中,将指定的介质类型更改为新介质的标识符,保存文件并关闭文本编辑器。

    在示例中,需要将旧 DLT 磁带上的数据迁移到新 LTO 磁带上。因此,在副本 2 中,将旧介质类型 lt (DLT) 更改为 li (LTO):

    root@solaris: vi /etc/opt/SUNWsamfs/archiver.cmd
    # =============================================
    # /etc/opt/SUNWsamfs/archiver.cmd
    # ---------------------------------------------
    ...
    # ---------------------------------------------
    # VSN Directives
    vsns
    allfiles.1 lt .*
    allfiles.2 li .*
    endvsns
    :wq
    root@solaris:~# 
    
  3. 检查 archiver.cmd 文件是否存在语法错误。运行 archiver -lv 命令,更正错误,直至没有错误。

    archiver -lv 命令将按行输出文件。如果有错误,会在出现错误的地方停止运行。

    root@solaris:~# archiver -lv
    Reading '/etc/opt/SUNWsamfs/archiver.cmd'.
    1: # =============================================
    2: # /etc/opt/SUNWsamfs/archiver.cmd
    3: # ---------------------------------------------
    4: # Global Directives
    5: logfile = /var/opt/SUNWsamfs/archiver.log
    6: # ---------------------------------------------
    7: # File System Directives:
    8: fs = samqfsms
    9: all .
    10: 1 5m ...
    root@solaris:~# 
    
  4. 当修改后的 archiver.cmd 文件中没有错误后,使用命令 samd config 将其装入当前配置中:

    root@solaris:~# samd config
    Configuring SAM-FS
    root@solaris:~# 
    
  5. 接着,在磁带盒之间迁移数据

将数据迁移到替换介质

用来迁移数据的回写和归档方法使用 sfind,这是 GNU find 命令的 Oracle HSM 扩展。sfind 命令用于在指定磁带卷上查找文件,并对找到的所有文件启动 stagerearchive 命令。

如果您不熟悉 sfindstage 和/或 rearchive 命令,现在应查看各自的手册页。然后,对存储了必须迁移的数据的每个盒式磁带,执行如下操作:

将数据从一个磁带迁移到另一个磁带

  1. root 用户身份登录到文件系统主机。

    root@solaris:~# 
    
  2. 移至要迁移的文件所在文件系统的挂载点目录。

    在示例中,要迁移挂载在 /hsm/hsmfs1 上的 hsmfs1 文件系统中所存储文件的归档副本:

    root@solaris:~# cd /hsm/hsmfs1
    root@solaris:~# 
    
  3. 选择磁带卷。

    在介质类型之间迁移数据时,一次处理一个卷。在以下示例中,使用卷序列号 VOL008

  4. 首先,搜索无法成功回写的已损坏文件的选定卷。使用 Oracle HSM 命令 sfind .-vsn volume-serial-number -damaged,其中 volume-serial-number 是在库中唯一标识卷的字母数字字符串。

    在示例中,从当前工作目录 (.) 开始搜索。-vsn 参数将搜索限定于当前磁带 VOL008 上找到的文件。-damaged 标志将搜索限定于无法成功回写的文件。

    root@solaris:~# sfind . -vsn VOL008 -damaged 
    
  5. 如果 sfind 在搜索已损坏文件时返回任何结果,请尝试修复相应文件。使用命令 undamage -m media-type -vsn volume-serial-number file,其中:

    • media-type附录 A中列出的由两个字符表示的介质类型代码之一。

    • volume-serial-number 是唯一地标识卷的字母数字字符串。

    • file 是损坏的文件的路径和名称。

    有时,短暂的 I/O 错误将导致副本被标记为已损坏。Oracle HSM undamage 命令可清除此状态。在示例中,归档文件副本 /hsm/hsmfs1/data0008/20131025DAT 被报告为已损坏。因此,我们将其设置为未损坏并重新尝试搜索已损坏的文件:

    root@solaris:~# sfind . -vsn VOL008 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# undamage -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind . -vsn VOL008 -damaged 
    
  6. 如果 sfind 命令再次将文件列为已损坏,该副本将不可用。请查看归档中是否包含该文件的其他未损坏副本。要列出可用副本,请使用命令 sls -D file,其中 file 是文件的路径和名称。要检查所发现的任何副本的状态,请使用命令 sfind file -vsn volume-serial-number

    在本示例中,undamage 命令无法修复副本。因此,使用 sls 列出文件 /hsm/hsmfs1/data0008/20131025DAT 的所有副本:

    root@solaris:~# undamage -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind . -vsn VOL008 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sls -D /hsm/hsmfs1/data0008/20131025DAT
    20131025DAT:
    mode: -rw-r--r--  links:   1  owner: root      group: other
                length:    319279  admin id:      7  inode: 1407.5
                project: system(0)
                offline;  archdone;  stage -n;
                copy 1: ---- May 21 07:12     1e4b1.1    lt VOL008
                copy 2: ---- May 21 10:29     109c6.1    lt VOL022
    ...
    

    磁带卷 VOL022 保存文件的第二个副本。因此我们使用 sfind 检查第二个副本:

    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -vsn VOL022 -damaged
    
  7. 如果某个副本不可用并且存在文件的一个未损坏的副本,则重新归档文件。然后,归档保存两个正常的副本后,取消归档已损坏的副本。

    在示例中,卷 VOL008 上的文件 /hsm/hsmfs1/data0008/20131025DAT 的副本 1 不可用,但 sfind 命令未找到副本 2 的损坏情况。因此我们发出带 -c 选项的 archive 命令,以便在卷 VOL008 上取消归档已损坏的副本之前创建有效的副本 1:

    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -vsn VOL022 -damaged
    root@solaris:~# archive -c 1 /hsm/hsmfs1/data0008/20131025DAT
    ...
    root@solaris:~# unarchive -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    
  8. 如果不存在任何可用的副本,请查看文件是否位于高速缓存中。使用命令 sfind .-vsn volume-serial-number -online.

    在本示例中,卷 VOL008 上的副本 1 和卷 VOL022 上的副本 2 已损坏且不可用。因此我们查看文件是否在磁盘高速缓存中联机可用:

    root@solaris:~# undamage -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind . -vsn VOL008 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# undamage -m lt -vsn VOL022 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -vsn VOL022 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -online
    
  9. 如果不存在任何可用的副本,但文件位于高速缓存中,则归档文件。然后,归档保存两个正常的副本后,取消归档已损坏的副本。

    在本示例中,卷 VOL008 上的副本 1 和卷 VOL022 上的副本 2 均不可用,因此我们发出 archive 命令以创建两个有效的副本,然后取消归档卷 VOL008 上已损坏的副本:

    root@solaris:~# undamage -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind . -vsn VOL008 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# undamage -m lt -vsn VOL022 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -vsn VOL022 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -online
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# archive /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# unarchive -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    
  10. 如果不存在任何可用的副本,并且该文件不在磁盘高速缓存中,则数据可能已丢失。如果数据非常重要,请咨询专业的数据恢复公司寻求帮助。否则,取消归档已损坏的副本。

    在本示例中,卷 VOL008 上的副本 1 和卷 VOL022 上的副本 2 不可用。sfind 命令在磁盘高速缓存上找不到该文件。这些数据不重要。因此我们在卷 VOL008 上取消归档损坏的副本:

    root@solaris:~# undamage -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind . -vsn VOL008 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# undamage -m lt -vsn VOL022 /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -vsn VOL022 -damaged
    /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# sfind /hsm/hsmfs1/data0008/20131025DAT -online
    root@solaris:~# archive /hsm/hsmfs1/data0008/20131025DAT
    root@solaris:~# unarchive -m lt -vsn VOL008 /hsm/hsmfs1/data0008/20131025DAT
    
  11. 如果 sfind 在搜索已损坏文件时未返回任何结果,请将当前磁带中的文件回写到磁盘高速缓存。使用命令 sfind .-vsn volume-serial-number -offline -exec stage {}\;

    -vsn 参数将搜索限定于在当前磁带上找到的文件(始终以一次一个磁带的方式迁移数据)。

    -offline 参数进一步将 sfind 输出限定于尚不位于高速缓存中的文件,从而不会覆盖数据。

    -exec stage {}\; 参数采用 sfind 返回的每个路径和文件名并将其用作 Oracle HSM stage 命令的参数。然后,stage 命令将指定的文件恢复到磁盘高速缓存中。该过程会不断重复,直到已回写所有符合条件的文件为止。

    在本示例中,sfind -vsn VOL008 -damaged 命令未返回任何输出。因此我们使用 sfind 回写在 VOL008 上找到且尚未位于高速缓存中的所有文件:

    root@solaris:~# sfind . -vsn VOL008 -damaged
    root@solaris:~# sfind . -vsn VOL008 -offline -exec stage {}\;
    
  12. 从磁带回写了文件后,有选择地对其重新归档。使用命令 sfind .-vsn volume-serial-number -online -exec rearch -r -m media-type {}\;,其中 media-type 是您要从中进行迁移的介质的类型。

    -vsn 参数将搜索限定于还在当前磁带上找到的文件(始终以一次一个磁带的方式迁移数据)。

    -online 参数进一步将 sfind 输出限定于位于高速缓存中的文件,从而不会覆盖数据。

    -exec rearch -r -m media-type {}\; 参数采用 sfind 返回的每个路径和文件名并将其用作 Oracle HSM rearch -r -m media-type 命令的参数。-r 参数在子目录中递归运行该过程。-m 参数仅重新归档位于源介质上的文件。

    在示例中,-vsn 参数值为 VOL008-m 参数值指定 lt 表示 DLT 介质:

    root@solaris:~# sfind . -vsn VOL008 -online -exec rearch -r -m lt {}\;
    
  13. 重复前面的步骤,直至 sfind 搜索不再找到文件。

  14. 重新归档了所有文件后,按照计划(请参见迁移之后处置旧介质)处理磁带。

  15. 重复该过程,直至所有旧介质上的数据都迁移至新介质。

迁移之后处置旧介质

在完成迁移之后,旧介质不一定会丢失所有值。因此,请认真考虑应当如何处置它们。

  • 至少,在累积了足够多的新恢复点文件以便仅使用新的替换介质恢复文件系统中的任何文件之前,保留旧介质。

  • 如果存储空间允许,请无限期保留旧介质。只要兼容的驱动器保持可用,旧介质就可能是宝贵的备份和恢复资源。

  • 如果磁带库空间即将耗尽,请导出旧介质并将它们保存在非现场存储中。

  • 如果旧介质可以重用而且您确信其中包含的数据不再有用,请为旧卷重新设置标签。例如,您可能要对较旧的 Oracle StorageTek T10000C 驱动器中的介质重新设置标签,并将其用于较新的 T10000D 驱动器。

  • 否则,如果旧卷上的数据和介质上的数据都没有剩余价值,请从磁带库中导出卷并对它们进行相应的处置。