我是服务器和 RAID 阵列的新手,但我正在尝试恢复最近在安装到我们的服务器上时出现问题的 raid 5 阵列。坦白说,这个阵法最初并不是我设立的。我正在使用安装了 CentOS 7 的 Dell 2950 PowerEdge 服务器来管理程序和文件。当我重新启动后无法启动服务器时,我的问题就开始了。我当前的设置尝试在主服务器启动时安装阵列。当前 /etc/fstab 中的命令在我们的服务器启动时被注释掉,因为它会导致服务器在启动时崩溃。当服务器启动时,我们取消注释该行
/dev/sdc /array ext4 defaults 1 2
然后当我尝试安装时:
mount /array
我得到以下信息:
mount: wrong fs type, bad option, bad superblock on /dev/sdc,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
拖尾 dmesg:
[1625373.377926] sd 1:2:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK cmd_age=0s
[1625373.377929] sd 1:2:0:0: [sdc] tag#0 CDB: Read(16) 88 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00
[1625373.377931] blk_update_request: I/O error, dev sdc, sector 0
[1625373.377933] Buffer I/O error on dev sdc, logical block 0, async page read
[1633765.092732] nf_conntrack: falling back to vmalloc.
[1633765.093244] nf_conntrack: falling back to vmalloc.
[1633782.909748] sd 1:2:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK cmd_age=0s
[1633782.909757] sd 1:2:0:0: [sdc] tag#0 CDB: Read(16) 88 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00
[1633782.909761] blk_update_request: I/O error, dev sdc, sector 2
[1633782.909782] EXT4-fs (sdc): unable to read superblock
看来有一个坏的超级块。我不知道从哪里开始解决这个问题。如果可以避免的话,我不想在丢失数据(超过 10 TB)的情况下重新格式化整个阵列。其他一些有用的信息可能是这不是 MD 兼容服务器(可能很明显,最初对我来说不是),因此mdadm
命令不适用。它设置有 EXT4 文件系统。该阵列在 5 年前初始化时也不太可能正确分区,即没有 sdc0、sdc1 等。我不确定这可能产生的完整后果,但听起来像是某些函数/脚本将假设数组已正确分区,如果使用不当,可能会导致事情变得“毛茸茸的”。任何有关此问题的帮助将不胜感激。如果我未提供有助于诊断问题的信息,请告诉我。
更新:我想看看是否能找到哪个超级块有问题。卸载阵列后,我尝试了以下操作:
$ dumpe2fs /dev/sdc | grep -i superblock
该命令的输出给了我:
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Attempt to read block from filesystem resulted in short read while trying to open /dev/sdc
Couldn't find valid filesystem superblock.
我还尝试跑步mke2fs -n /dev/sdc
,看看是否可以获得有关超级街区的更多信息。这就是结果
# mke2fs -n /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
335577088 inodes, 2684616704 blocks
134230835 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
81928 block groups
32768 blocks per group, 32768 fragments per group
4096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
2560000000
更新 (2022-11-15)
我从 IT 团队那里得到了一些帮助,并且我们能够进入服务器的 BIOS。了解我们的 raid 5 是 PERC 5/E 可能会有所帮助,并且在 BIOS 中我们发现插槽 8 磁盘被视为“外部”。我们“导入”(而不是“清除”)插槽 8 中的磁盘,阵列恢复正常,但处于降级状态。奇怪的是,插槽 0 中的磁盘被标记为“丢失”,这很奇怪。我相信有一个磁盘作为全局热备用插入到阵列中,并且我认为阵列使用它来维护模仿。为了确保我们不会丢失数据,在尝试弄清楚如何重新建立全局热备用之前,我使用“rsync”备份了外部 15 TB 驱动器上的阵列。祈祷复制过程顺利。感谢大家的帮助!
答案1
/dev/sdc
嗯嗯。
这就是硬件 RAID。第一个位置的你应该一直在寻找启动时的控制器。也可以在计算机上运行 Linux 时配置设备 - 但为此您需要一些相当深奥的软件。这可能是 DELL Perc 5i 或 6i。由于这是一台非常旧的计算机,该软件可能不适用于 Ubuntu/Debian - 您需要在互联网上寻找合适的软件。
奇怪的是,它之前是在没有任何分区的情况下进行配置的。
您没有说擦除驱动器后发生了什么 - 它似乎正在报告成功。即使它现在显然正在工作,我仍然想从控制器重建阵列,对其运行坏块,对其进行分区,然后创建一个新的文件系统。
答案2
如果数据非常重要,那么我会:
获取一个足够大的单独存储设备,以包含 /dev/sdc 的全部内容(图像)。 (RAID 阵列大小 * 1.15)
将整个 RAID 作为块级映像文件转储到该单独的设备上。 (以 dd 为例)
现在可以安全地对该映像进行任何数据恢复、FS 修复、安装、数据雕刻等尝试,而不会危及物理 RAID 阵列上的数据。
将物理 RAID 保持在当前状态,以防万一您搞砸了并需要转储新映像。
从图像复制/雕刻/提取的任何数据都应保存到第三个存储设备。
简约示例:
要将 RAID 转储为映像文件,您首先必须安装要将其保存到的设备(分区)。
sudo mkdir /mnt/imgfiles
sudo mount /dev/sdd2 /mnt/imgfiles
然后使用DD将原始数组数据转储到图像。
sudo dd if=/dev/sdc of=/mnt/imgfiles/array_raw.img
笔记: 除非将特定选项(我不记得了)添加到命令行中,否则此命令不会报告进度。
笔记2: 这将需要很长时间。硬盘驱动器速度很慢,而且数据很多。
答案3
控制台上的 dmesg 和 dumpe2fs 报告的错误表明这是 RAID 阵列本身的问题,而不是文件系统的问题。
您可能需要做的第一件事是(以某种方式)查看 RAID 阵列,以确定它是否有多个故障磁盘,或者需要某种重置。如何执行此操作特定于戴尔硬件。
正如 @svin83 评论的那样,能够使用“ ddrescue
”或“ dd if=/dev/sdc of=/dev/XXX bs=1M conv=sync,noerror
”将 /dev/sdc 复制到另一个备份设备是确保该设备至少大部分工作的好方法,并且如果您制作了一个,则可以避免 Oh $#!+ 时刻与其他事物发生错误。整个阵列的大小低于 11TB,因此只需几百美元,您就可以购买一个足够大的 12/14TB SATA3 驱动器来进行完整备份。
对于硬件 RAID 来说,没有分区表并不罕见,以避免对齐问题。