读书人

怎么解决频繁读写导致的磁盘碎片有关问

发布时间: 2013-12-26 15:24:01 作者: rapoo

如何解决频繁读写导致的磁盘碎片问题?
本帖最后由 oyljerry 于 2013-12-19 10:56:38 编辑 现在需要存储很多数据,需要频繁的对硬盘进行读写,这样就导致了大量的磁盘碎片 有时候还导致被锁了写不进去数据 ,大家是如何解决这个问题的 请帮忙 万分感谢
[解决办法]
《大话存储II》
[解决办法]

引用:
你的思路是 预先分配一大块,然后划分小块 ,回收时也这样?

在裸盘或磁阵上,根据偏移量自己将硬盘格式化为区,块,每个区上有块索引信息,块上有视频帧索引信息,比如帧的宽高,是否关键帧,时间戳等;然后一路视频就顺序的往块上写,一个块写满了就申请下一个,这样就保证是顺序写的了,方便查找,也充分利用了磁盘,写完帧数据要更新索引,这样即便断电也不影响文件索引。。
你一个人是做不出来的,哪家安防?
[解决办法]
引用:
Quote: 引用:

首先对于文件系统本身的设计,需要从你的实际需求出发考虑很多问题,块分配/回收策略,坏块处理,索引结构设计,元数据,可恢复性,等等;从实现上讲,你下需要和存储设备驱动打交道(甚至有可能要自己处理物理存储设备,编写存储设备驱动),上需要和IO manager、FastIO(Cache manager)等等系统组件打交道,另外你可能还要小心翼翼处理好各种插在driver stack上的filter。
无论是设计,还是实现,都很复杂。

Quote: 引用:

Quote: 引用:

Quote: 引用:

你的思路是 预先分配一大块,然后划分小块 ,回收时也这样?

在裸盘或磁阵上,根据偏移量自己将硬盘格式化为区,块,每个区上有块索引信息,块上有视频帧索引信息,比如帧的宽高,是否关键帧,时间戳等;然后一路视频就顺序的往块上写,一个块写满了就申请下一个,这样就保证是顺序写的了,方便查找,也充分利用了磁盘,写完帧数据要更新索引,这样即便断电也不影响文件索引。。
你一个人是做不出来的,哪家安防?

>>为什么一个人做不出来?算法复杂 还是 工作量很大?


首先对于文件系统本身的设计,需要从你的实际需求出发考虑很多问题,块分配/回收策略,坏块处理,索引结构设计,元数据,可恢复性,等等;从实现上讲,你下需要和存储设备驱动打交道(甚至有可能要自己处理物理存储设备,编写存储设备驱动),上需要和IO manager、FastIO(Cache manager)等等系统组件打交道,另外你可能还要小心翼翼处理好各种插在driver stack上的filter。
无论是设计,还是实现,都很复杂。


那么复杂? 这些知识可以从哪里得到? 有书 还是开源的系统?


引用:
Quote: 引用:

首先对于文件系统本身的设计,需要从你的实际需求出发考虑很多问题,块分配/回收策略,坏块处理,索引结构设计,元数据,可恢复性,等等;从实现上讲,你下需要和存储设备驱动打交道(甚至有可能要自己处理物理存储设备,编写存储设备驱动),上需要和IO manager、FastIO(Cache manager)等等系统组件打交道,另外你可能还要小心翼翼处理好各种插在driver stack上的filter。
无论是设计,还是实现,都很复杂。

Quote: 引用:

Quote: 引用:

Quote: 引用:

你的思路是 预先分配一大块,然后划分小块 ,回收时也这样?

在裸盘或磁阵上,根据偏移量自己将硬盘格式化为区,块,每个区上有块索引信息,块上有视频帧索引信息,比如帧的宽高,是否关键帧,时间戳等;然后一路视频就顺序的往块上写,一个块写满了就申请下一个,这样就保证是顺序写的了,方便查找,也充分利用了磁盘,写完帧数据要更新索引,这样即便断电也不影响文件索引。。
你一个人是做不出来的,哪家安防?

>>为什么一个人做不出来?算法复杂 还是 工作量很大?


首先对于文件系统本身的设计,需要从你的实际需求出发考虑很多问题,块分配/回收策略,坏块处理,索引结构设计,元数据,可恢复性,等等;从实现上讲,你下需要和存储设备驱动打交道(甚至有可能要自己处理物理存储设备,编写存储设备驱动),上需要和IO manager、FastIO(Cache manager)等等系统组件打交道,另外你可能还要小心翼翼处理好各种插在driver stack上的filter。
无论是设计,还是实现,都很复杂。


那么复杂? 这些知识可以从哪里得到? 有书 还是开源的系统?

从头设计一个简单的文件系统分两部分:设计,和实现。
设计方面你可以参考一下《Practical File System Design》(这本书以BeOS的文件系统作为例子),《UNIX Filesystems: Evolution, Design, and Implementation》(比较老但是好在文件系统的变化不是特别大),以较简单的文件系统如FAT入手学习设计一个文件系统要考虑哪些方面。
实现方面,你需要首先决定在哪个OS上实现你的文件系统,Windows,还是Linux。视OS不同,内核编程、调试的基础知识必不可少,再结合一些开源项目,仔细分析学习代码。
[解决办法]
Windows上,《Inside the Windows NT File System》和《Windows NT File System Internals》也是必不可少的;Linux上,因为都是开源的,以开源文档和代码为主要学习材料吧。

读书人网 >VC/MFC

热点推荐