在某些情况下(比如:异常宕机)solaris10的boot archive可能会损坏,导致solaris无法启动,此时需要手工修复boot archive。
本文通过模拟boot archive损坏,测试如何在root镜像存在的情况下恢复boot archive. (本测试在x86虚拟机上进行)
测试分为四部分。第一部分是solaris10做root镜像,第二部分通过dd命令模拟boot archive损坏,第三部分是拆除镜像和修复boot archive,第四部分是修复root镜像

1. 系统盘镜像

1) 硬盘分区情况

c1t0d0s0  /
c1t0d0s1  swap
c1t0d0s7  metadb

2) 镜像盘创建solaris fdisk分区 (x86)

format -> 1(镜像盘) -> fdisk -> y

3) 将源盘分区表同步到镜像盘上

root@solaris10 # prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2
fmthard:  New volume table of contents now in place.

4) 创建metadb,放在slice7上

root@solaris10 # metadb -a -c 3 -f c1t0d0s7 c1t1d0s7
root@solaris10 # metadb -i
        flags           first blk       block count
     a        u         16              8192            /dev/dsk/c1t0d0s7
     a        u         8208            8192            /dev/dsk/c1t0d0s7
     a        u         16400           8192            /dev/dsk/c1t0d0s7
     a        u         16              8192            /dev/dsk/c1t1d0s7
     a        u         8208            8192            /dev/dsk/c1t1d0s7
     a        u         16400           8192            /dev/dsk/c1t1d0s7
r - replica does not have device relocation information
o - replica active prior to last mddb configuration change
u - replica is up to date
l - locator for this replica was read successfully
c - replica's location was in /etc/lvm/mddb.cf
p - replica's location was patched in kernel
m - replica is master, this is replica selected as input
W - replica has device write errors
a - replica is active, commits are occurring to this replica
M - replica had problem with master blocks
D - replica had problem with data blocks
F - replica had format problems
S - replica is too small to hold current data base
R - replica had device read errors

5) 创建root分区镜像

root@solaris10 # metainit -f d11 1 1 c1t0d0s0
d11: Concat/Stripe is setup
root@solaris10 # metainit -f d12 1 1 c1t1d0s0
d12: Concat/Stripe is setup
root@solaris10 # metainit d10 -m d11
d10: Mirror is setup

6) 执行metaroot修改vfstab

root@solaris10 # metaroot d10

7) 重启

root@solaris10 # shutdown -i6 -g0 -y

8) 创建swap镜像

root@solaris10 # metainit -f d21 1 1 c1t0d0s1
d21: Concat/Stripe is setup
root@solaris10 # metainit -f d22 1 1 c1t1d0s1
d22: Concat/Stripe is setup
root@solaris10 # metainit d20 -m d21
d20: Mirror is setup

9) 修改vfstab文件

/dev/dsk/c1t0d0s1       -       -       swap    -       no      -
修改为=>
/dev/md/dsk/d20 -       -       swap    -       no      -

10) 重启

root@solaris10 # shutdown -i6 -g0 -y

11) 附加子镜像

root@solaris10 # metattach d10 d12
d10: submirror d12 is attached
root@solaris10 # metattach d20 d22
d20: submirror d22 is attached

12) 检查镜像

root@solaris10 # metastat

2. 模拟boot archive损坏

root@solaris10 # dd if=/dev/zero of=/platform/`uname -i`/boot_archive bs=1024 count=1
1+0 records in
1+0 records out

重启主机
root@solaris10 # shutdown -i6 -g0 –y

报错:

3. 修复boot archive

1) 启动到failsafe

启动时选择Solaris failsafe (x86)
ok boot -F failsafe (sparc)

2) 拆除镜像

# mount /dev/dsk/c1t0d0s0 /a

备份vfstab
# cp /a/etc/vfstab /a/etc/vfstab.svm

备份system
# cp /a/etc/system /a/etc/system.svm

修改vfstab文件,把所有md设备修改成slice
# TERM=vt100; export TERM
# vi /a/etc/vfstab

(如果不清楚md设备与slice的对应关系,可以cat /a/etc/lvm/md.cf)

如果vfstab与初始安装时一致,也可以用初始安装覆盖
# cp /a/etc/vfstab-INSTALL /a/etc/vfstab

修改system文件,注释掉(或者删除)rootdev:/pseudo/md@0:0,10,blk这一行。
# vi /a/etc/system

如果system与初始安装时一致,也可以用初始安装覆盖
# cp /a/etc/system-INSTALL /a/etc/system

3) 修复boot archive

删除boot archive
# rm -f /a/platform/`uname -i`/boot_archive

重建boot archive
# bootadm update-archive -R /a

重启
# shutdown -i6 -g0 –y

4. 修复镜像

1) detach子镜像

root@solaris10 # metadetach d10 d12
d10: submirror d12 is detached
root@solaris10 # metadetach d20 d22
d20: submirror d22 is detached

  2) 恢复原来的vfstab和system文件

root@solaris10 # mv /etc/system.svm /etc/system
root@solaris10 # mv /etc/vfstab.svm /etc/vfstab

3) 重启

root@solaris10 # shutdown -i6 -g0 –y

4) attach子镜像

root@solaris10 # metattach d10 d12
d10: submirror d12 is attached
root@solaris10 # metattach d20 d22
d20: submirror d22 is attached

Solaris10镜像情况下如何修复boot archive的更多相关文章

  1. Solaris Tips: Repairing the Boot Archive (ZT)

    http://www.seedsofgenius.net/solaris/solaris-tips-repairing-the-boot-archive 注意以下是系统盘非镜像情况下的操作,如果系统盘 ...

  2. Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到 ...

  3. @Spring Boot程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码

    前言 这篇其实是对一年前的一篇文章的补坑. @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码 当时,就是在spring mvc应用里定义一个 ...

  4. 解决spring boot在RabbitMQ堆积消息情况下无法启动问题

    最近遇到一个问题,服务站点上线之前,先去新建需要的rabbitmq并绑定关系,此时 如果发送消息方运行, 那边会造成新建的q消息部分堆积得不到及时消费 那么问题来了? 在消息堆积情况下,服务站点无法启 ...

  5. 在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结

    在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结在不格式化原有系统盘的情况下,用grub4dos+firadisk安装WIN7到VHD,内存大的 ...

  6. Oracle redo 日志损坏的几种情况下的恢复

    Oracle redo 日志损坏的几种情况下的恢复 第一:损坏的redo为非正在使用的redo log 1.归档模式,不是当前正在日志损坏,数据库打开模式. 模拟损坏:SQL> select * ...

  7. Glusterfs冗余镜像(AFR)修复原理以及脑裂分析

    研究Glusterfs半年多了,通过实际操作以及源代码分析,对它有了越来越深的了解,由衷的赞叹Gluster的整体架构.今天时间不早了,想写点关于Glusterfs的冗余镜像产生脑裂的原因. 首先,简 ...

  8. @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码

    一.前言 这篇算是类加载器的实战第五篇,前面几篇在这里,后续会持续写这方面的一些东西. 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 ...

  9. php 502 无错误行和报错文件的情况下使用gdb调试方法

    lnmp环境 gdb  /usr/local/php5.2/bin/php-cgi  /tmp/coredump-php-cgi.20503 source /home/tmp/lnmp1.4-full ...

随机推荐

  1. Java C++ 比较 – 虚函数、抽象函数、抽象类、接口

    [转自]原文 Java – 虚函数.抽象函数.抽象类.接口 1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它 ...

  2. java读取Oracle的BFile文件

    /** * * @author Jasmine */public class GetBlob{ public static void main(String[] args) { Connection ...

  3. php攻击漏洞总结

    1.两字节编码(gbk)都存在宽字节攻击问题[character_set_client=gbk] 案例:http://www.cnblogs.com/lcamry/articles/5625276.h ...

  4. java 如何保证接口的安全性

    在开发过程中,肯定会有和第三方或者app端的接口调用.在调用的时候,如何来保证非法链接或者恶意攻击呢? 1.签名 根据用户名或者用户id,结合用户的ip或者设备号,生成一个token.在请求后台,后台 ...

  5. nginx基本参数详解

    运行用户 user nobody; 启动进程,通常设置成和cpu的数量相等 worker_processes 1; 全局错误日志及PID文件 error_log logs/error.log; err ...

  6. 51nod 1255 贪心/构造

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255 1255 字典序最小的子序列 题目来源: 天津大学OJ 基准时间限 ...

  7. PCA算法详解——本质上就是投影后使得数据尽可能分散(方差最大),PCA可以被定义为数据在低维线性空间上的正交投影,这个线性空间被称为主⼦空间(principal subspace),使得投影数据的⽅差被最⼤化(Hotelling, 1933),即最大方差理论。

    PCA PCA(Principal Component Analysis,主成分分析)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量 ...

  8. Android Design TextinputLayout

    使用该布局 需要在build.gradle中的dependencies块中添加两个依赖来向下兼容 dependencies { compile fileTree(dir: 'libs', includ ...

  9. LeetCode OJ:Unique Paths(唯一路径)

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  10. ServlertContext

    1.ServletContext代表着整个JavaWeb应用,每个项目只有唯一的ServletContext的实例. 2.生命周期 服务器启动时创建 服务器关闭时销毁 3.获取ServletConte ...