安全地分割 raidctl 镜像

安全地分割 raidctl 镜像

我有一台 Sun T5220 服务器,带有板载 LSI 卡和两个磁盘,它们处于 RAID 1 镜像中。数据现在并不重要,但我们有一个磁盘发生故障,并且正在尝试了解如果必须从故障中恢复,如何真正做到这一点。

最初的情况是这样的:

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

0.0.0 磁盘上的绿灯亮起。查找 / 点亮 0.1.0 磁盘。所以我知道我的驱动器有问题,并且知道是哪一个。服务器显然仍可启动。

首先,我们尝试放入一个新磁盘。该磁盘来自未知来源。Format 看不到它,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(这是我的服务器的根镜像)
         Volume:c1t132d0(这是外部根镜像)
         磁盘:0.0.0
         磁盘:0.1.0
         ...

没问题。我不关心数据,我只需删除外部镜像即可。

# raidctl -d c1t132d0
(警告有关数据删除但有效)

此时,/usr/bin/ 二进制文件崩溃了。我的意思是,ls -l /usr/bin/ 显示 1.4k,但cat /usr/bin/which给我一个换行符。太好了,我刚刚把二进制文件都删掉了(即:内存中的二进制文件还能用)?我重启了机器。一切都恢复正常了。什么鬼。不管怎样,回去重新创建我的镜像吧。

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

有人说你可以删除镜像,然后它会分裂它。好的,我将删除根镜像。

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

我谷歌了一下,发现当然不能在镜像启动时执行此操作(即使使用 -f)。好的。我boot cdrom -s删除了该卷。

现在我在 c1t1d0(我的数据所在的位置)上有一个类型为“LSI-Logical-Volume”的磁盘,在 c1t0d0(我想要镜像到的位置)上有一个全新的“Hitachi 146GB”磁盘:

(从 CD 启动)
# raidctl -c c1t1d0 c1t0d0 (男人说这是镜像的源目标)
非法数组布​​局。

# raidctl -C "0.1.0 0.0.0" -r 1 1 (alt 语法请参阅 man)
非法数组布​​局。

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

磁盘大小相同,制造商相同,但我确实删除了卷,而不是放入空白磁盘并等待其重新同步。也许这是一个严重错误。我尝试将好磁盘的格式类型选择为普通的 146gb 磁盘,但它会重置分区表,我很确定这会擦除数据(如果这是生产环境,那就不好了)。

我是不是太笨了?有人有破坏和重新同步镜像的经验吗?Google 上没有关于“非法数组布​​局”的任何信息,因此,这是我对搜索之神的贡献。

答案1

事实证明,我找不到答案。但我确实找到了解决方法和一些有用的信息。首先,这是在 Solaris 10 的 10/08 (U6) 上。我从 10/09 启动 CD (U8) 启动,发现 U8 上的 raidctl 中有一个错误。U8 失败,出现“损坏的标签 - 几何形状错误”错误。即使我完全擦除了磁盘,我也无法使用 U8 启动 CD 重新创建镜像,但在 U7(可能还有 U6)上,完全相同的命令有效。所以那里只是一点版本警告。

解决方法的要点如下(替换磁盘、路径等)。

  • 我的分区被分割了,但我可以看到启动 CD 上的数据。我需要大量空间来执行 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
    • 对每个分区继续
  • 重新创建突袭(关闭 U7 或更旧的 CD,U8 有错误,失败)。
    • raidctl -c c1t0d0 c1t1d0 警告:此操作将擦除两个驱动器上的数据。
    • 创建 RAID 卷将破坏成员磁盘备用空间上的所有数据,是否继续(是/否)?是
  • 用格式标记新的 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 - (对根目录权限回答是)
    • umount /tmp/s0
    • 对每一片重复
  • 复制启动块。此文件的路径取决于您的硬件:
    • installboot platform/SUNW,SPARC-Enterprise-T5220/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0
  • 卸载所有内容,如果需要,导出 zpools,然后从 CD 重新启动。
  • 从打开的启动提示符编辑你的别名
    • probe-scei-all
    • show-disks(选择磁盘)
    • nvalias disk Ctrl-Y
    • boot disk
  • 此时您应该回到硬件镜像或者可能已切换到 DiskSuite。

如果您想在中间切换到 disksuite: - 使用 ufsdump 进行备份,如上所述 - 删除硬件 raid 定义 - 将分区恢复到第一个磁盘,newfs 第一个磁盘上的分区 - ufsrestore 到第一个磁盘,进行健全启动 - 然后启动常规 disksuite 安装。如果您尝试一次性从 CD 执行 disksuite,则不会成功,因为元服务未运行。您将收到此错误: metadb: network/rpc/meta:default: failed to enable/disable SVM service 执行元命令不会造成任何影响,只是不会保留。例如:当您重新启动硬盘时,metastat 将显示“未找到元数据库”。

相关内容