一.扫描磁带机(注意:定期用清洗带为磁带机做清洗)
ioscan -fnC tape
Class I H/W Path Driver S/W State H/W Type Description
========================================================================
tape 2 0/0/11/1/1.3.0 stape CLAIMED DEVICE HP C5683A
/dev/rmt/2m /dev/rmt/2mn /dev/rmt/c3t3d0BEST /dev/rmt/c3t3d0BESTn
/dev/rmt/2mb /dev/rmt/2mnb /dev/rmt/c3t3d0BESTb /dev/rmt/c3t3d0BESTnb
tape 0 0/0/14/1/0.11.8.255.0.0.0 stape CLAIMED DEVICE ARCHIVE Python
/dev/rmt/0m /dev/rmt/0mn /dev/rmt/c12t0d0BEST /dev/rmt/c12t0d0BESTn
/dev/rmt/0mb /dev/rmt/0mnb /dev/rmt/c12t0d0BESTb /dev/rmt/c12t0d0BESTnb
tape 1 0/0/14/1/0.11.8.255.0.0.1 stape CLAIMED DEVICE ARCHIVE Python
/dev/rmt/1m /dev/rmt/1mn /dev/rmt/c12t0d1BEST /dev/rmt/c12t0d1BESTn
/dev/rmt/1mb /dev/rmt/1mnb /dev/rmt/c12t0d1BESTb /dev/rmt/c12t0d1BESTnb
tape 3 6/0/14/1/0.22.8.255.0.0.0 stape CLAIMED DEVICE ARCHIVE Python
/dev/rmt/3m /dev/rmt/3mn /dev/rmt/c28t0d0BEST /dev/rmt/c28t0d0BESTn
/dev/rmt/3mb /dev/rmt/3mnb /dev/rmt/c28t0d0BESTb /dev/rmt/c28t0d0BESTnb
tape 4 6/0/14/1/0.22.8.255.0.0.1 stape CLAIMED DEVICE ARCHIVE Python
/dev/rmt/4m /dev/rmt/4mn /dev/rmt/c28t0d1BEST /dev/rmt/c28t0d1BESTn
/dev/rmt/4mb /dev/rmt/4mnb /dev/rmt/c28t0d1BESTb /dev/rmt/c28t0d1BESTn
ioscan -fnC tape
Class I H/W Path Driver S/W State H/W Type Description
=====================================================================
tape 0 0/1/1/1.3.0 stape CLAIMED DEVICE HP C5683A
/dev/rmt/0m /dev/rmt/0mn /dev/rmt/c3t3d0BEST /dev/rmt/c3t3d0BESTn /dev/rmt/c3t3d0DDS /dev/rmt/c3t3d0DDSn
/dev/rmt/0mb /dev/rmt/0mnb /dev/rmt/c3t3d0BESTb /dev/rmt/c3t3d0BESTnb /dev/rmt/c3t3d0DDSb /dev/rmt/c3t3d0DDSnb
二.进行磁带备份
根据磁带类型,放入同类型磁带
/opt/ignite/bin (这个是make_tape_recovery 所在的目录)
make_tape_recovery -A v (默认磁带 /dev/rmt/0mn,此备份为常用备份方式)
注意:如果扫描出的磁盘是 /dev/rmt/0mn ,并且类型是HP,可以直接使用上述命令。
如果扫描出的磁盘是 /dev/rmt/2mn(或者其他),并且类型是HP,就需要指定路径: make_tape_recovery -A v -a /dev/rmt/2mn
-A : 指定要备份整个Root disk / Volume Group
-v : 用于显示备份过程的提示信息
-a:指定路径
备份成功显示信息如下:
* Creating local directories for configuration files and archive.
======= 07/09/13 18:05:23 EAT Started make_tape_recovery. (Tue Jul 09 18:05:23 EAT 2013)
@(#) Ignite-UX Revision C.6.0.115
@(#) net_recovery (opt) $Revision: 10.655 $
* Testing pax for needed patch
* Passed pax tests.
* Checking Versions of Ignite-UX filesets
* Creating System Configuration.
* /opt/ignite/bin/save_config -f
/var/opt/ignite/recovery/2009-03-31,15:48/system_cfg vg00
* Backing Up Volume Group /dev/vg00
* /usr/sbin/vgcfgbackup /dev/vg00
* Creating Map Files for Volume Group /dev/vg00
* /usr/sbin/vgexport -p -m /etc/lvmconf/vg00.mapfile /dev/vg00
* Creating Control Configuration.
* Creating Archive File List
* Creating Archive Configuration
* /opt/ignite/bin/make_arch_config -c
/var/opt/ignite/recovery/2009-03-31,15:48/archive_cfg -g
/var/opt/ignite/recovery/2009-03-31,15:48/flist -n 2009-03-31,15:48 -r
64 -d Recovery\ Archive -t -i 1 -m t
* Saving the information about archive to
/var/opt/ignite/recovery/previews
* Creating The Tape Archive
Adding /opt/ignite/Version file to LIF.
68203+0 records in
68203+0 records out
1. 如果已经写好了创建kvm的配置文件(stand.xml)格式,那么创建kvm虚拟机只要使用命令即可:
virsh define ./conf/stand.xml virsh start rheltest3
2. 如果直接编程调用libvirt创建kvm虚拟机,则可用以下程序
/*************************************************************************** * create_vm.cpp * create kvm machine(domain) based on conf.xml * the first parameter is the conf xml files' name * Note: the .xml must has two boot types (cdrom/hd) by any order * compile command: 'g++ create_vm.cpp -o createvm -lvirt' * running command: './createvm /path/to/xml/example.xml' * author : Aborn Jiang * date : Aug.17, 2013 * version : v0.1 ***************************************************************************/ #include <iostream> #include <cstdio> #include <string> #include <fstream> #include <sstream> #include <libvirt/libvirt.h> #include <libvirt/virterror.h> #include <memory.h> using namespace std; int main(int argc, char* argv[]) { if ( 1 == argc ) { cout << "must and only need an argument, this is, configure .xml file name." << endl; return -1; } if ( 3 <= argc ) { cout << "too many arguments. must and only need one, that is, .xml file name." << endl; return -1; } string xmlfile=argv[1]; cout << "*************************" << endl; cout << "begin to build vm ..." << endl; cout << "xmlfile path:" << xmlfile <<endl; ifstream file(xmlfile.c_str()); if (!file) { cout << "Cannot open file, permission denied." << xmlfile << endl; return -1; } stringstream buffer; buffer << file.rdbuf(); string xmlcontents = buffer.str(); file.close(); /************************************************************************************* * deal with the original xml configuration file * initxmlconts for transient guest domain(install os) configure (boot from cdrom) * xmlcontents for persistent guest domain configure (boot from hd) ************************************************************************************/ int pos_boot = xmlcontents.find("boot"); int pos_hd = xmlcontents.find("hd", pos_boot); int pos_cdrom = xmlcontents.find("cdrom", pos_boot); cout << "pos_hd=" << pos_hd << " pos_cdrom=" << pos_cdrom << endl; string initxmlconts(xmlcontents); if ( pos_hd > pos_cdrom ) { // cdrom apears in first order cout << "cdrom apears in first order" << endl; xmlcontents.replace(pos_cdrom, 5 ,"hd"); pos_hd=xmlcontents.find("hd", pos_cdrom + 2); xmlcontents.replace(pos_hd, 2, "cdrom"); } else { // hd apears in first order cout << "hd apears in first order" << endl; initxmlconts.replace(pos_hd, 2, "cdrom"); pos_cdrom=initxmlconts.find("cdrom", pos_hd + 5); initxmlconts.replace(pos_cdrom, 5, "hd"); } // create and boot a transient initial domain, for vm os installation virConnectPtr conn = virConnectOpen("qemu:///system"); if (NULL == conn ) { virErrorPtr error = virGetLastError(); cout << error->message << endl; return -1; } virDomainPtr vmpi = virDomainCreateXML(conn, initxmlconts.c_str(), VIR_DOMAIN_START_AUTODESTROY); if (NULL == vmpi) { virErrorPtr error = virGetLastError(); cout << error->message << endl; return -1; } cout << "os installation ongoing, it will spend some time..." << endl; while ( 1 == virDomainIsActive(vmpi) ); // waiting until installation finish. cout << "os installation finished..." << endl; if (NULL == conn) virConnectPtr conn = virConnectOpen("qemu:///system"); cout << "start boot the vm machine..." << endl; // store xmlcontents configuration for a persistent guest domain and boot it. virDomainPtr vmp = virDomainDefineXML(conn, xmlcontents.c_str()); if (NULL == vmp) { virErrorPtr error = virGetLastError(); cout << error->message << endl; return -1; } else { cout << "define persistent domain success." << endl; if (virDomainCreate(vmp) < 0) { // boot the vm. cout << "Unable to boot guest configuration." << endl; } else { cout << "Boot the persistent defined guest ..." << endl; } cout << "build vm finished." << endl; cout << "*************************" << endl; return 0; } }
3. 附stand.xml文件内容
<domain type='kvm'> <name>rheltest3</name> <uuid>32b95fab-6d78-4e28-beca-2d3988ff8c8f</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc-1.2'>hvm</type> <boot dev='hd'/> <boot dev='cdrom'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/lisp/code/auto-rhel/virt/rheltest3.img'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' buss='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/home/lisp/code/auto-rhel/rhelcustom.iso'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:78:f9:98'/> <source bridge='virbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoprot='yes'/> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> </devices> </domain>
主机型号:ia64 hp superdome server SD32A
存储型号:XP24000
软件版本:hpux 11.31 + oracle 11g
LED显示:attention 红灯
故障现象:数据库down,主机down
日志:
Log Entry 14389: 03/02/2013 12:46:00
Alert level 3: Warning
Keyword: ERM
The Error Response Mode has been determined
Reporting Entity: System Firmware located in cabinet 0, slot 2, cpu 0
Text Message: "CONTINUE"
0x698001ee20e00c18 0x45554e49544e4f43
0x6b0001ee20e00c19 0x010000005131f488
Log Entry 14382: 03/02/2013 12:46:00
Alert level 3: Warning
Keyword: ERM
The Error Response Mode has been determined
Reporting Entity: System Firmware located in cabinet 0, slot 4, cpu 0
Text Message: "CONTINUE"
0x698001ee40e00c0a 0x45554e49544e4f43
0x6b0001ee40e00c0b 0x010000005131f488
处理情况:
1.启动主机,发现主机笼子不能正常加电
2.登陆主机MP管理系统查看日志与cell板信息,发现发现 cell 电源 CELL POWER BOARD, SDCPB 存在问题
3.更换主机笼子,更换CPB
4.登陆MP,启动主机,启动完毕,重启操作系统
5.启动数据库,查看数据库状态。