当前位置: 首页 > 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.dtcms.com/a/268011.html

相关文章:

  • Java--指定控制台System.out.println的颜色
  • 408第三季part2 - 计算机网络 - 应用层
  • 洛谷 P1005 [NOIP 2007 提高组] 矩阵取数游戏
  • CentOS-6如何配置网络设置IP? 笔记250706
  • brpc怎么解决C++静态初始化顺序难题的?
  • 2025年7月最新多语言模型研发效能分析(Gemini 2.5 vs Claude 4 vs GPT-4.1)
  • Monorepo+Turborepo+Next常问问题详解
  • GitHub 趋势日报 (2025年07月04日)
  • Gin Web 服务集成 Consul:从服务注册到服务发现实践指南(下)
  • # IS-IS 协议 | LSP 传输与链路状态数据库同步机制
  • 网络爬虫认证的综合分析:从HTTP模拟到浏览器自动化
  • mac中创建 .command 文件,执行node服务
  • 微信小程序71~80
  • 善用关系网络:开源AI大模型、AI智能名片与S2B2C商城小程序赋能下的成功新路径
  • Web后端开发-SpringBootWeb入门、Http协议、Tomcat
  • Gin 框架中如何实现 JWT 鉴权中间件
  • 学习栈和队列的插入和删除操作
  • 网安系列【8】之暴力破解入门
  • 【机器学习深度学习】多分类评估策略
  • Solidity——什么是低级调用(low-level calls)和操作码的内联汇编
  • 一次内存“卡顿”全流程实战分析:从制造问题到优化解决
  • Apache Spark 4.0:将大数据分析提升到新的水平
  • 小架构step系列06:编译配置
  • 在C#中,可以不实例化一个类而直接调用其静态字段
  • 2025年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • python-转义字符
  • 李宏毅2025《机器学习》第四讲-Transformer架构的演进
  • 力扣971. 寻找图中是否存在路径【simple 拓扑排序/图 Java】
  • 【双向循环带头链表】
  • Java中的抽象类和接口