当前位置: 首页 > news >正文

群晖(Synology)存储ext4视频文件删除的恢复方法

随着NAS/SAN 技术的普及,只需要一台小型的存储设备就可以实现轻松数据管理、安全共享等私有云解决方案。比如要管理数量不算少的安防摄像头生成的视频数据,通过一个小型的NAS+网络摄像头就可以完成数据采集到写入的所有环节,大大的节省成本。今天来看一下使用群晖(Synology)存储+ext4文件系统视频删除后如何进行恢复。

故障存储:

群晖(Synology)5.45TB/文件系统:ext4/块大小:4KB

故障现象:

某日管理员清理早期数据时误删除了两条视频文件,发现误操作后直接断开了网络并对存储进行了关机操作。

故障分析:

在开始分析前先对ext4文件系统做个简单的介绍:

Linux系统中的ext2、ext3、ext4 文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。ext4是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的Linux环境。

ext4突出的特点有:数据分段管理、多块分配、延迟分配、持久预分配、日志校验、支持更大的文件系统和文件大小。而和其它的老前辈一样,ext4仍然使用块(Block)和块组(BlockGroup)进行管理,最小的操作单元就是块(类似于windows的簇)。本例中的块大小为4KB(如图1),4KB算是比较经典的块大小了,兼顾了IO性能和空间的浪费,不仅仅是ext4实际上ntfs文件系统也更加偏爱4KB的块(簇)大小。

一般来讲,NAS还是比较偏爱ext或者btrfs的,这个小存储做为视频数据最终的“落脚点”使用ext4相对来讲比较适合,因为整体的系统开销会更低。而做为网络服务器更多的使用“网络IO”,网络IO的典型特点就是:1、排队  2、分块,比如同一时间可能会有摄像头A和摄像头B都有IO请求,这个时候就需要先排队,再写入,(A写一块然后再写B不断循环)这样就导致了数据的“碎片化”,现实情况下可能排队数量远远大于AB两个客户端,可能会更多。此案例中使用的是mp4文件,这也是目前使用比较广泛的封装格式,其文件结构相对“弹性”,可以实现分块传输、在线播放(如图2)。通过对存在文件的分析发现以下特征:

  1. 碎片数量多
  2. 碎片区间较大
  3. 偏移值并非线性而是随机

这些特殊的情况都让这次恢复变的难度很高,特别是第2点,可以看到实例分析中的碎片区间已经达到了1.36TB(如图3),此文件还算是碎片数量较少的。

图1:块大小为4KB

图2:mp4文件使用AVC视频编码和MP4A音频编码

图3:碎片化的存储方式典型的“网络IO”

故障处理:

STEP1:“海选”式定位文件。

由于存储空间较大,而其MP4使用的是结构体前置的方式,所以初步方案是先进行文件头定位,在海量的数据中去查找客户所需要的文件,当然前提是文件头没有被覆盖,如果此方案无果再进行深入遍历。

使用通用恢复软件成功找到客户所需要的两条视频,由于存在碎片的原因,仅仅能播放前1分钟的画面,但也成功定位到了文件头所在的块偏移(如下图),经过“海选”定位文件没有被覆盖的可能性概率较大,这样就可以继续下一步的恢复工作了。

图4:海选式定位

STEP2:确定大概范围。根据分析的视频特征进行数据定位,由于空间过大的原因还是使用了手工定位。

图5:确定大概范围

STEP3: “有的放矢,精确重组”,前两步定位后对相应的数据块进行二次合成,这样可以有效减少IO范围。处理完成后,使用CHS零壹视频恢复程序高级版进行碎片精确定位和重组,经过扫描后可以看到程序已经成功重组出了相应的文件,这些文件中前两个就是客户所需,文件级别为0说明文件效果是最好的,至此恢复工作完成。

分析扫描结果发现两个文件虽然不大,一个211MB一个402MB,碎片数量在20-50个之间,碎片的区间达到了3TB左右。

图5:CHS零壹视频恢复程序高级版扫描结果

这就是群晖(Synology)存储ext4视频文件删除的恢复方法,大家在遇到此类问题时,可以和CHS数据实验室联系!

http://www.lryc.cn/news/581440.html

相关文章:

  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(五) - 基于随机森林算法预测职位分类
  • MySQL主从复制与读写分离概述
  • 【AI大模型】Spring AI 基于mysql实现对话持久存储详解
  • Neo4j 综合练习作业
  • 7,TCP服务器
  • 卫星通信终端天线的5种对星模式之一:信标跟踪
  • mysql的JDBC和连接池
  • 如何正确规范的开发术语自己的TYPECHO插件
  • 【CSS样式】有趣的滑块开关
  • Gin Web 服务集成 Consul:从服务注册到服务发现实践指南(下)
  • 【influxdb3】如何使用 SQL 对时间序列数据进行聚合查询
  • CppCon 2018 学习:Woes of Scope Guards and Unique_Resource
  • Redis存储Cookie实现爬虫保持登录 requests | selenium
  • RK3588 源码编译 opencv
  • Java 大视界 -- Java 大数据在智能教育在线课程学习效果影响因素分析与优化设计(334)
  • Web后端开发-SpringBootWeb入门、Http协议、Tomcat
  • Spring Boot + 本地部署大模型实现:优化与性能提升!
  • Docker相关内容
  • 闲庭信步使用图像验证平台加速FPGA的开发:开篇语——跨越软件和硬件开发的鸿沟
  • string类(详解)
  • Linux关机指令详解:shutdown命令的使用指南
  • SpringAI与智能体入门
  • 成为git砖家(12): 看懂git合并分支时冲突提示符
  • Linux操作系统之文件(四):文件系统(上)
  • PADS交互式布局
  • PageRank:互联网的马尔可夫链平衡态
  • 线程锁和线程同步
  • Servlet学习
  • Spring--循环依赖以及三级缓存详解
  • Chat Model API