我有一台 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
- 格式(1,p,p)或执行
- 备份分区
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 将显示“未找到元数据库”。