怎么解决频繁读写导致的磁盘碎片有关问题
如何解决频繁读写导致的磁盘碎片问题?本帖最后由 oyljerry 于 2013-12-19 10:56:38 编辑现在需要存储很多
如何解决频繁读写导致的磁盘碎片问题? 本帖最后由 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上,因为都是开源的,以开源文档和代码为主要学习材料吧。