记录一次raid信息丢失的成功恢复过程,恢复结果极度舒适

【存储raid阵列故障的起因】

事情的起因是这样的,这次经历的数据恢复设备为DL380系列存储,存储中存储的是客户公司内部文件和机密信息。存储上共有6块硬盘组成raid5阵列,在正常使用过程中存储突然崩溃,强制重启后无法找到存储设备,再重启还是这样。客户于是联系我们进行存储层面的数据恢复。
·

【数据恢复故障分析】

经过和硬件部门同事的一同检测和分析,大致可以推断客户这台存储的故障应该是raid模块损坏,一般出现这种raid信息丢失或者raid模块硬件损坏的原因多是由于多次的断电造成的。说回到本次数据恢复过程中来,经过与客户的沟通得知这台存储确实经历过不正常的断电关机,但当时并未出现异常因此并未引起重视,直到存储崩溃后也没有意识到这次故障与以前的意外断电有联系。现在客户存储上的这6块硬盘已经都没有办法通过正常途径来进行提取了,想要提取数据只能进行数据恢复。
·

【数据恢复过程记录】

1.既然存储已经崩溃,我们首先要确定的就是硬盘有没有物理损坏。Raid模块损坏到目前为止也只是推测,要想确定故障原因还是要按照数据恢复流程进行检测。于是硬件部门的同时协助我们对客户的6块硬盘依次进行了物理检测,所有硬盘正常,没有物理损坏。
2.硬盘没有物理损坏,硬件部门同事的工作也就结束了。剩下的工作就由我们进行数据恢复操作了,首先是在我们内部准备了一台带有冗余功能的存储作为数据恢复平台,把这6块盘全部都镜像到数据恢复平台上。
3.接下来就是繁重的数据恢复工作了,首先分析了这个阵列的raid结构以及所有硬盘在阵列中的盘序、校验方式和数据块大小,分析过程持续了两天终于宣告完成。接下来就利用这些分析得到的数据重新构建了一组raid5阵列。
4.数据恢复工作进行到这一步就可以进行逻辑校验了,逻辑校验没问题后才可以让客户进行数据验证。虽然校验成功后依然有客户验证数据恢复不通过的可能性,但是毕竟是少数,可以说是成败在此一举。
5.非常幸运,验证通过。客户对数据恢复结果再进行验证也完全达到了存储发生故障前的状态,本次数据恢复工作圆满结束。由于客户的数据涉密级别高且对时间要求比较紧急,这次的存储数据恢复工作从检测到客户验证通过整整用了3天时间,在数据恢复的过程中也是一直保持在紧张的状态,好在数据恢复成功可以好好的放松一下紧张的心情了。
记录一次raid信息丢失的成功恢复过程,恢复结果极度舒适

【存储数据安全小贴士】

1.存储在工作时尽量保障电源稳定,关机时要采取正常的关机方式而不是直接断电(这里不要笑,确实有一部分人喜欢直接断电而不是正常关机)。
2.服役年限比较久了的一些老设备要勤检查,尤其是受过伤但依然在运行的设备更要分外上心,随时注意工作状态随时维护。例如这次恢复的存储,意外断电后并没有马上出现故障而是平安运行了一段时间后才突然崩溃,一下让人措手不及了。
3.最终要的一点就是对数据做好备份,抄袭一句话“数据千万条,备份第一条”有了备份文件,就算是服务器崩溃了也可以做到有备无患,从容的进行修复而不会影响正常业务。

转载于:https://blog.51cto.com/sun510/2408515

加载 PyTorch 模型权重遇到 `Process finished with exit code -1073740791 (0xC0000409)` 错误通常表明程序在执行过程中遇到了严重的崩溃问题。以下是可能的原因以及解决方案: ### 原因分析 1. **CUDA 设备断言触发** 如果模型是在 GPU 上训练并保存的,而加载未正确设置设备,则可能会引发 CUDA 错误[^4]。 2. **模型结构不匹配** 加载的权重文件与当前定义的模型架构不符可能导致不可预料的行为甚至程序崩溃。 3. **环境配置问题** 不同版本的 PyTorch 或依赖库之间的兼容性问题也可能导致此类错误。例如,在 Autodl 平台上直接配置 TensorFlow 环境运行代码可能是由于环境冲突引起的[^2]。 4. **终端仿真问题** 在某些 IDE 中(如 PyCharm),如果未启用“Emulate terminal in output console”,则无法捕获完整的错误日志信息,从而掩盖实际问题所在。 --- ### 解决方案 #### 方法一:验证模型与权重一致性 确保用于保存和加载的模型具有相同的架构定义。可以通过以下方式检查: ```python import torch # 定义模型 model = Net() # 打印模型状态字典键值对 print(model.state_dict().keys()) # 对比已保存权重的状态字典 state_dict_loaded = torch.load('model_name1.pth') print(state_dict_loaded.keys()) ``` 确认两者键名完全一致后再尝试加载操作。 #### 方法二:指定设备类型 为了避免潜在的 CUDA 错误,显式声明所使用的计算资源(CPU/GPU)。修改加载逻辑如下所示: ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model_load = Net() model_load.to(device) if torch.cuda.is_available(): state_dict = torch.load('model_name1.pth', map_location=device) else: state_dict = torch.load('model_name1.pth', map_location=torch.device('cpu')) model_load.load_state_dict(state_dict) ``` 上述代码片段通过判断是否有可用 GPU 来决定存储位置,并利用 `map_location` 参数适配不同场景下的数据迁移需求。 #### 方法三:调整开发工具设置 对于使用 PyCharm 用户而言,开启 “Run | Edit Configurations... -> Emulate terminal in output console” 功能有助于获取更详尽的日志输出以便定位根本原因。 #### 方法四:创建纯净实验环境 鉴于复杂项目可能存在隐含依赖关系干扰正常流程运转的情况,建议参照成功案例重新搭建独立工作区。比如基于 Conda 构建专属虚拟空间安装所需组件后重复试验过程: ```bash conda create -n myenv python=3.8 conda activate myenv pip install torch torchvision torchaudio git clone -b v2.5.1 --depth=1 https://github.com/huggingface/transformers.git # 若涉及 Hugging Face 库可同步引入对应分支版本[^3] ``` 最后按照既定脚本逐步调试直至恢复正常功能表现为止。 --- ### 测试准确性评估 完成修复之后可以依照先前设定好的指标体系衡量改进效果如何。例如统计分类任务上的总体精确度水平: ```python correct = 0 total = 0 with torch.no_grad(): for data in data_loader_test: images, labels = data[0].to(device), data[1].to(device) outputs = model_load(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() accuracy_percentage = 100 * correct / total print(f'Accuracy of the network on the test images: {accuracy_percentage:.2f}%') # 输出保留两位小数的结果[^5] ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值