安全地分开一个raidctl镜子

我有一个带有板载LSI卡的Sun T5220服务器和两个位于RAID 1镜像的磁盘。 数据现在并不重要,但我们有一个失败的磁盘,并试图了解如何做到这一点,如果我们不得不从失败中恢复。

最初的情况是这样的:

  #raidctl -l c1t0d0
卷大小条带状态cachingRAID
         子尺寸级别
                 磁盘
 -------------------------------------------------- --------------
 c1t0d0 136.6GN / A降级RAID1
                  0.1.0 136.6G好
                  N / A 136.6G失败

绿灯在0.0.0磁盘上。 查找/点亮0.1.0磁盘。 所以我知道我有一个坏的驱动器,它是哪一个。 服务器仍然明显启动。

首先,我们尝试了一个新的磁盘。这个磁盘来自一个未知的来源。 格式不会看到它,cfgadm -al不会看到它,所以raidctl -l不会看到它。 我觉得这很糟糕。 我们尝试从另一台备用服务器上另一个磁盘

 #raidctl -c c1t1d0 c1t0d0(其中t1是我的好磁盘 -  0.1.0)
磁盘占用了空间。

另外不同的语法选项不会改变任何东西:

 #raidctl -C“0.1.0 0.0.0”-r 1 1
磁盘占用了空间。

 #raidctl -C“0.1.0 0.0.0”1
磁盘占用了空间。

好。 也许这是因为备用服务器上的磁盘已经有一个RAID 1了。 啊哈,我可以看到在raidctl的另一卷:

 #raidctl -l
控制器:1
         卷:c1t1d0(这是我的服务器的根镜像)
         卷:c1t132d0(这是国外的根镜像)
         磁盘:0.0.0
         磁盘:0.1.0
          ...

没问题。 我不关心数据,我只是删除外国镜像。

 #raidctl -d c1t132d0
 (警告关于数据删除,但它的作品)

在这一点上,/ usr / bin / binaries吓坏了。 我的意思是,ls -l / usr / bin /显示1.4k,但是cat /usr/bin/which给了我一个换行符。 太棒了,我只是吹走了二进制文件(例如:mem中的二进制文件仍在工作)? 我反弹了箱子。 这一切都恢复正常。 WTF。 无论如何,回到重新创build我的镜子。

 #raidctl -l
控制器:1
         卷:c1t1d0(这是我的服务器的根镜像)
         磁盘:0.0.0
         磁盘:0.1.0
          ...

男人说,你可以删除一个镜像,它会分裂它。 好的,我将删除根镜像。

 #raidctl -d c1t0d0
arrays在使用中。  (这可能不是确切的错误)

我GOOGLE了这一点,发现当然,你不能这样做(即使-f),而从镜子上启动。 好。 我boot cdrom -s并删除了音量。

现在我有一个磁盘,在c1t1d0(我的数据是)上有一个“LSI-Logical-Volume”types,在c1t0d0上有一个全新的“Hitachi 146GB”(我想要镜像):

 (从光盘启动)
 #raidctl -c c1t1d0 c1t0d0(man表示它是镜像的源目标)
非法数组布​​局。

 #raidctl -C“0.1.0 0.0.0”-r 1 1(每个人的alt语法)
非法数组布​​局。

 #raidctl -C“0.1.0 0.0.0”1(假设raid1,没有帮助)
非法数组布​​局。

相同大小的磁盘,相同的制造商,但我删除了卷,而不是投入空白磁盘,并等待它重新同步。 也许这是一个严重的错误。 我尝试select格式为我的好磁盘是一个普通的146GB磁盘,但它重置分区表,我敢肯定会擦除数据(坏,如果这是生产)。

我骨头? 任何人都有经验打破和重新镜像? Google上没有关于“非法数组布​​局”的内容,所以这里是我对search神的贡献。

事实certificate,我无法find答案。 但是我find了一个解决方法和一些很好的信息。 首先,这是在Solaris 10的10/08(U6)。我启动了10/09启动CD(U8),发现U8上有一个raidctl的bug。 U8失败,出现“Corrupt labe – bad geometry”错误。 即使当我完全擦除磁盘时,我无法使用U8引导光盘重新创build镜像,但在U7上(大概是U6)完全相同的命令工作。 所以只有一点版本警告。

解决方法的要点是这样的(replace你的磁盘,path等)。

  • 我的分区被拆分,但我可以看到启动光盘上的数据。 我需要很多空间来做一个ufsdump,所以我导入了一个大的zfs池。 这可能意味着不同的事情,也许只是挂载一个大的分区。 我们把它叫做/ mnt / space。
  • 将每个现有的分区表复制或转储到一个文件。 请记住,您现在从CD上启动。
    • 格式(1,p,p)或者执行prtvtoc /dev/rdsk/c1t0d0s2 > /mnt/space/partitions.txt
  • 备份分区
    • ufsdump 0f - /dev/rdsk/c1t0d0s0 > /mnt/space/root_c1t1d0s0.dmp
    • ufsdump 0f - /dev/rdsk/c1t1d0s4 > /mnt/space/var_c1t1d0s4.dmp
    • 继续为每个分区
  • 重新创buildRAID(closuresU7或更旧的CD,U8有错误,失败)。
    • raidctl -c c1t0d0 c1t1d0警告:这会擦除两个驱动器。
    • 创buildRAID卷会破坏成员磁盘备用空间上的所有数据,处理(是/否)? 是
  • 用格式标记新的RAID磁盘。 您不应该在格式中收到奇怪或失败的标签错误。
  • raidctl -l查找你的卷(假设这些指令是c1t1d0)
  • 恢复你的分区布局。
    • cat /mnt/space/partitions.txt | fmthard -s – / dev / rdsk / c1t1d0s2
  • 在这一点上,我切换到DiskSuite,但恢复步骤是类似的。
  • newfs每个分区。
    • newfs /dev/rdsk/c1t1d0s0 (通过s7,显然跳过s2)
  • 装载和恢复每个分区:
    • mkdir /tmp/s0
    • mount /dev/rdsk/ctt1d0s0 /tmp/s0
    • cd /tmp/s0
    • cat /mnt/space/root_c1t1d0s0.dmp | ufsrestore xf - cat /mnt/space/root_c1t1d0s0.dmp | ufsrestore xf - (回答是根目录权限)
    • umount /tmp/s0
    • 重复每个切片
  • 复制启动块。 该文件的path取决于您的硬件:
    • installboot platform/SUNW,SPARC-Enterprise-T5220/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0
  • 卸载所有内容,如果需要导出zpools,请重新启动光盘。
  • 从打开的启动提示编辑您的别名
    • probe-scei-all
    • show-disks (select磁盘)
    • nvalias disk Ctrl-Y
    • boot disk
  • 此时您应该回到硬件镜像,或者您可能切换到了DiskSuite。

如果你想在所有这些中切换到disksuite: – 使用上面的ufsdump进行备份 – 删除你的硬件raid定义 – 将分区恢复到第一个磁盘,newfs第一个磁盘上的分区 – ufsrestore到第一个磁盘,做一个理智引导 – 然后启动常规disksuite安装。 如果您尝试一次性将光盘放在CD上,则不会执行此操作,因为元服务没有运行。 你会得到这个错误: metadb: network/rpc/meta:default: failed to enable/disable SVM service做元命令不会伤害,他们只是不会坚持。 IE浏览器:当你重新启动你的硬盘时,metastat会说“找不到元数据库”。