光盘流式刻录方法与流程

文档序号:16848109发布日期:2019-02-12 22:29阅读:516来源:国知局
光盘流式刻录方法与流程

本发明涉及计算机技术领域,具体涉及一种光盘流式刻录方法。



背景技术:

目前一般的数据归档存储介质有磁盘、磁带和光盘。其中越来越多重要数据需要长期保存。其中光盘存储具有长期保存维护成本很低的特点,能够可靠保存光盘超过30年。虽然光盘的写性能差且写次数少,但是这恰巧符合冷数据多读少写的特性。所以基于光盘安全性高、可靠性强、寿命长、成本低等特性,越来越多的企业选用了光盘库作为存储介质。

但是目前单张光盘的容量还是比较小的。cd光盘约是700mb,dvd盘片单面4.7gb,最多能刻录约4.59g的数据(因为dvd的1gb=1000mb,而硬盘的1gb=1024mb)(双面8.5gb,最多约能刻8.3gb的数据),蓝光(bd)的则比较大,bd单面单层25gb、双面50gb、四层100gb,目前300gb的光盘也已经面世。日本东京理工大学的全息光盘其容量达到2tb。但这样单盘容量还是无法和硬盘及磁带相比。

使用光盘库能够把海量光盘分离的物理空间合并为一个大的逻辑空间,也就是采用光盘库虚拟化机制,把多张光盘对外虚拟成一个大容量存储池。为了提高光盘库系统的整体性能、易用性和可用性,当用户在使用这种光盘库时,数据首先写入光盘库硬盘缓存中的一系列光盘镜像中,一旦某一镜像装满,则封闭该镜像,把其变为只读镜像,最后把该镜像完全刻录对应的物理光盘,因此可以把一个完整的数据集透明刻录到多张物理光盘之上。在实际应用中,用户不断地把数据写入光盘库。系统需要把这种流式写入的文件或者目录,以顺序、合理地写入依次写入一系列光盘镜像中,这要求系统能一方面够自动划分镜像,保证每个镜像不超过光盘大小,同时尽量保证文件目录自身的连续性;另一方面,需要尽量充分使用镜像的存储空间,避免光盘存储空间的浪费。

但是目前针对大容量数据集的光盘刻录的方式,主要使用先完全缓存、后静态分割的方式,也就是把待刻录数据集完整保存在硬盘中,然后再进行数据集静态分割,分割完成之后,把每个分割后的子数据集刻录到光盘中。但是这种静态离线分割方式不适应在线流式刻录模式。在流式刻录情况下,也就是不断有新文件或者目录写入,系统无法事先确定当前写入的目录和文件的大小和边界,也就无法进行静态数据集分割。

一个可行方法是把一批文件先保存在硬盘缓存中,然后再采用传统静态划分的方法。但是这需要大量硬盘空间进行缓存本批次待刻录的数据;同时也引入额外的写入数据流和分盘数据流,这两者对于硬盘会进行i/o竞争,从而降低实际数据写入性能;更重要的是,批次划分本身就很困难,在线情况下,不能保证一个批次中文件数据正好是光盘容量的整数倍,那么本批次中的最后一张光盘的剩余空间在下批次刻录过程中也不方便利用。

因此需要一种方法能够实现针对光盘的流式数据刻录,一方面保证存储过程的连续性,另一方面也保证光盘存储空间的存储效率最大化。



技术实现要素:

本发明的目的在于提供一种光盘流式刻录方法,一方面使得光盘空间效率最大化,另一方面能够在读取时,识别某个文件可能分布在一张或者多张光盘上。

为实现上述目的,本发明的技术方案是

一种光盘流式刻录方法,其特征在于,包括如下步骤:

包括至少两个光盘镜像,用户应用程序不断流式地把文件数据以及文件所在的目录信息写入光盘镜像;

光盘镜像包括第一光盘镜像和第二光盘镜像,当使用中的第一光盘镜像的存储空间使用完之后,对文件数据进行分割,把文件一部分数据写入第一光盘镜像,文件的后续数据写入第二光盘镜像。

优选地,

第一光盘镜像和第二光盘镜像中储存的被分割文件中分别增设有标识文件,第一光盘镜像中的标识文件内容包括第二光盘镜像的id,第二光盘镜像中的标识文件的内容包括第一光盘镜像的id。

优选地,当创建目录时,系统为该目录分配光盘簇,并在内存中维护该目录数据的更新,当该目录关闭时,把该目录所涉及的簇写入第一光盘镜像对应位置;

如果在写入过程中第一光盘镜像系统报无空闲空间的异常时,则把该目录创建到第二光盘镜像;在第二光盘镜像创建目录时,先在该第二光盘镜像中创建该目录的绝对路径中的所有前序目录,之后创建自己,最后该目录关闭时,把所有更新的簇写入第二光盘镜像所对应的位置。

优选地,当用户写入文件时,创建该文件绝对路径中的前序目录信息直到根目录;在创建完前序目录后,创建文件元数据,并开始写入文件数据;在创建目录过程中,发生光盘文件系统报无空闲空间的异常时,则把该目录创建到下一张光盘;

当文件写入过程中,第一光盘镜像系统报无空闲空间的异常时;选择第二光盘镜像作为后续数据存储的载体,得到第二光盘镜像的id;

然后检测第一光盘镜像剩余簇数,如果实际剩余空闲簇数大于一个阈值时;在第一光盘镜像中创建第一标识文件,第一标识文件名称由原文件名称和数字标记组成,第一标识文件的内容包括记录该文件后续数据内容所在的第二光盘镜像的id;在第二光盘镜像中,重新创建该文件绝对路径中的前置目录,然后创建第二标识文件,第二标识文件名称由原文件名称和数字标记组成,第二标识文件的内容包括前部分文件数据所在的第一光盘镜像的id;最后,把后续数据写入;

检测第一光盘镜像剩余簇数时,如果实际剩余簇数小于一个阈值时,则读出文件第一光盘镜像最后阈值大小范围内的簇的内容保存在内存缓存中,并在第一光盘镜像中删除这些簇的内容,在该文件元数据中记录当前文件实际长度;创建第三标识文件,第三标识文件的名称由原文件名和数字标记组成,第三标识文件内容包括记录该文件后续内容的第二光盘镜像的卷号;在第二光盘镜像中,重新创建该文件绝对路径中的前置目录,然后创建第四标识文件,第四标识文件的名称由原文件名称和数字标记组成,第四标识文件的内容包括第一光盘镜像的id号;最后,把内存中保存的阈值大小范围内的簇的数据以及之后的后续数据依次写入。

本发明的工作原理为:1、本发明能够在不知道当前文件目录实际所需分配空间的情况下,流式地在光盘镜像中创建目录和写入文件,当数据写入光盘镜像发生“无空闲空间”(out-of-space)异常时,利用该异常处理过程,把无法创建的目录或者剩余数据写入后续空闲光盘中。这种方法能够简化系统设计,无需实时跟踪一张光盘的剩余空间大小。

2、光盘镜像在没有封闭时,其内部数据簇内容是可以修改的。本发明利用这一点,当一个光盘镜像剩余空间不足以重建同名的标记文件时,则读取该文件的最后几个簇到内存中,然后清除这个簇的内容,创建相应的标识文件。最后把内存中的几个簇作为后续文件的内容。

3、利用一个文件实际至少占用两个簇的原理,一个簇为该文件的元数据,另一个簇文件数据内容,通过保留或者人为产生对于2个簇的空间,从而能够创建标识文件。

在读某个光盘文件时,如果该文件所在目录含有一个相同文件名但是尾部为特殊标记的文件,先读取文件数据,从元数据中获得文件数据的长度,然后从特殊文件中读出后续文件所在的光盘id,之后从下一个光盘中按照相同文件路径读出同名特殊文件的数据内容,和前面文件保存内容进行拼接,得到完整的文件数据。

标识文件具有和该文件相同的文件名称,但是在标识文件尾部增加一个特殊标记,所述特殊标记可以为“+”和序列号,例如第一个分割文件为“+1”,如果该文件在下张光盘中仍需分割,在标记为文件名加“+2”,并依该规则标记该文件的后续分割文件。

本发明的有益效果为:能够在不知道当前写入文件最终大小,或者创建目录实际分配空间的情况下,顺序地创建目录,或者把文件数据写入光盘镜像。通过文件目标的高效分割机制,可以充分利用光盘的存储空间。通过文件名标识机制,确定一个分割文件所在的光盘位置,从而通过合并,还原文件全部内容。

附图说明

图1为本发明中流式光盘刻录的整体流程示意图;

图2为本发明实施例中的创建目录的流程图;

图3为本发明实施例中的写入文件的流程图;

图4为本发明实施例中的读文件的流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

本发明具体实施的技术方案是:

实施例:图1为流式光盘刻录的整体流程示意图,图2为创建目录的流程图,图3为写入文件的流程图,图4为读文件的流程图。

用户应用程序不断流式地把文件、目录写入一组空闲光盘镜像。光盘镜像和物理光盘有相同的物理存储空间,每个字节一一对应,具有全局唯一的镜像标识id,具有本地文件系统。初始时,镜像能够写入和更改,能够在该镜像中创建和更新目录及文件,当数据写完或者镜像存储空间使用完后,可以主动封闭该镜像,使得其变为只读镜像。只读镜像能够一次性写入一张物理光盘。

文件和目录包含一个绝对目录,也就是从本文件到根目录的完整路径。

光盘使用簇作为基本分配存储块单位,每个目录至少包含一个簇,每个文件包含至少2个簇,一个簇放置文件元数据信息;剩下的簇包含文件数据。

本实施例中,如图1所示,假设某一时刻用户需要创建路径为/a/b/c的目录,而当前光盘镜像(id号为1)文件系统抛出“无空闲空间”(out-of-space)的异常时,将该目录创建到下一张光盘镜像(id号为2)。

假设某一时刻用户需要写入路径为/a/b/c.txt的文件(文件内容为aaabbbcccddef…),当写入数据aaabbb后,当前光盘镜像(id号为3)文件系统抛出“无空闲空间”(out-of-space)的异常时,在当前光盘镜像中创建标识文件,然后把后续文件数据(cccddef…)自动写入下一张光盘镜像(id号为4),也进行文件标识。

下面说明在实施例中本发明具体的工作过程:

(1)创建目录/a/b/c过程如下:

(1-1)首先,执行创建目录操作;

(1-2)当前光盘镜像(id号为1)文件系统有无抛出“无空闲空间”(out-of-space)异常,若有,则转步骤(1-3);若无,则转步骤(1-5);

(1-3)在下一张光盘镜像(id号为2)创建该目录绝对路径中的所有前序目录(/、/a、/a/b);

(1-4)创建该目录(/a/b/c);

(1-5)将更新的簇写入该目录所在光盘对应位置;

(1-6)完成创建目录操作。

(2)写入文件/a/b/c.txt过程如下:

(2-1)首先,执行写入文件操作;

(2-2)当前第一光盘镜像(id号为3)文件系统有无抛出“无空闲空间”(out-of-space)异常,若有,则转步骤(2-3);若无,则转步骤(2-15);

(2-3)选取一张新的空白第二光盘镜像并获取其id(id号为4);

(2-4)检测当前第一光盘剩余簇数,若实际剩余空间簇数大于某个阈值(假设为2),则转步骤(2-5);若小于,则转步骤(2-9);

(2-5)在当前第一光盘镜像创建一个具有相同文件名但是尾部增加一个特殊编号标记(假设为“+1”)的新文件(文件名为c+1,文件内容包括该文件后续内容的光盘镜像id号4);

(2-6)在第二光盘镜像重新创建该文件绝对路径的前置目录(/、/a、/a/b);

(2-7)在第二光盘镜像创建文件名为元文件名但在尾部增加一个特殊编号标记(假设为“+1”)的新文件(文件名为c+1),并在文件元数据中标识前部分文件所在光盘的id号3;

(2-8)将后续数据写入新文件,转步骤(2-15);

(2-9)读出最后2簇的数据保存在内存中,并在当前光盘镜像中删除这些数据;

(2-10)在文件c的元数据中记录当前文件的实际长度;

(2-11)在当前第一光盘镜像创建一个具有相同文件名但是尾部增加一个特殊编号标记(假设为“+1”)的新文件(文件名为c+1,新标识文件内容包括记录该文件后续内容的光盘镜像id号4);

(2-12)在第二光盘镜像重新创建该文件绝对路径的前置目录(/、/a、/a/b);

(2-13)在第二光盘镜像创建文件名为元文件名但在尾部增加一个特殊编号标记(假设为“+1”)的新文件(文件名为c+1),并在文件元数据中标识前部分文件所在光盘的id号3;

(2-14)将内存中2个簇的数据及文件后续数据写入新文件;(2-15)完成写入文件操作。

(3)读文件/a/b/c.txt过程如下:

(3-1)首先,执行读文件操作;

(3-2)该文件所在目录下是否含有一个相同文件名(c)但是尾部为特殊标记(“+1”)的文件,若有,则转步骤(3-3);若无,则转步骤(3-7);

(3-3)从该文件元数据获取文件数据的长度,读取对应的文件数据;

(3-4)从特殊文件读取后续文件所在光盘的id号4;

(3-5)从id号为4的光盘按照相同文件路径(/a/b)读出特殊文件(c+1)的数据内容;

(3-6)将该内容与前面文件内容进行拼接,得到完整文件内容;

(3-7)完成读文件操作。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1