一種將數(shù)據(jù)寫入鏡像文件的方法和設(shè)備的制造方法
【專利摘要】本發(fā)明實施例提供一種將數(shù)據(jù)寫入鏡像文件的方法和設(shè)備,用以解決現(xiàn)有技術(shù)中存在的將數(shù)據(jù)存儲在ext4鏡像文件對應(yīng)的存儲區(qū)域中的任意的空存儲塊上,降低了對存儲容量大的ext4鏡像文件的讀寫效率的問題。本發(fā)明實施例的方法包括:確定需要寫入鏡像文件的數(shù)據(jù)的長度;若需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;將需要寫入鏡像文件的數(shù)據(jù)存儲到查找的至少一段連續(xù)的空存儲塊中。由于本發(fā)明實施例將需要寫入鏡像文件的數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的至少一段連續(xù)的空存儲塊中,以便于數(shù)據(jù)的寫入讀出操作,提高了對存儲容量大的鏡像文件的讀寫效率。
【專利說明】
一種將數(shù)據(jù)寫入鏡像文件的方法和設(shè)備
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種將數(shù)據(jù)寫入鏡像文件的方法和設(shè)備。
【背景技術(shù)】
[0002]鏡像文件與ZIP (計算機文件壓縮算法)壓縮包類似,它將特定的一系列文件按照一定的格式制作成單一的文件,以便用戶下載和使用,例如一個測試版的操作系統(tǒng)鏡像文件、一個游戲鏡像文件等。鏡像文件不僅具有ZIP壓縮包的“合成”功能,它最重要的特點是可以被特定的軟件識別并可直接刻錄到光盤上。通常意義上的鏡像文件可以包含系統(tǒng)文件、引導(dǎo)文件、分區(qū)表信息等,這樣的鏡像文件可以包含一個分區(qū)甚至是一塊硬盤的所有信息。
[0003]在Windows平臺下,一種米用ext4(The fourth extended file system,第四代擴展文件系統(tǒng))文件系統(tǒng)的鏡像文件,現(xiàn)有技術(shù)中,大部分工具軟件不支持對此種ext4鏡像文件進行寫入文件操作,雖然有小部分工具軟件實現(xiàn)了對ext4鏡像文件進行寫入文件的功能,但是都默認加入了寫保護,以此來避免寫入操作對文件系統(tǒng)造成損壞,即使關(guān)閉了寫保護,對于寫入的文件數(shù)據(jù)的存儲方式為:將數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的任意的空存儲塊上,采用這種方法對數(shù)據(jù)進行存儲,降低了對存儲容量大的ext4鏡像文件的讀寫效率。
[0004]綜上所述,目前的這種將數(shù)據(jù)存儲在ext4鏡像文件對應(yīng)的存儲區(qū)域中的任意的空存儲塊上的方法,降低了對存儲容量大的ext4鏡像文件的讀寫效率。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種將數(shù)據(jù)寫入鏡像文件的方法和設(shè)備,用以解決現(xiàn)有技術(shù)中存在的將數(shù)據(jù)存儲在ext4鏡像文件對應(yīng)的存儲區(qū)域中的任意的空存儲塊上的方法,降低了對存儲容量大的ext4鏡像文件的讀寫效率的問題。
[0006]本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的方法包括:
[0007]確定需要寫入鏡像文件的數(shù)據(jù)的長度;
[0008]若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;
[0009]將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。
[0010]由于本發(fā)明實施例將需要寫入鏡像文件的數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的至少一段連續(xù)的空存儲塊中,以便于數(shù)據(jù)的寫入與讀出操作,提高了對存儲容量大的鏡像文件的讀寫效率。
[0011]較佳地,所述確定需要寫入鏡像文件的數(shù)據(jù)的長度,包括:
[0012]若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。
[0013]由于本發(fā)明實施例將長度大于預(yù)定門限值的數(shù)據(jù)進行分段處理,以便于每次將較小的數(shù)據(jù)量寫入鏡像文件,提高了系統(tǒng)的性能。
[0014]較佳地,所述根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊,包括:
[0015]根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù);
[0016]如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊;
[0017]否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。
[0018]較佳地,所述根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),包括:
[0019]將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊;
[0020]如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟;
[0021]如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值;
[0022]如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組;
[0023]如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。
[0024]由于本發(fā)明實施例在鏡像文件對應(yīng)的存儲區(qū)域中查找至少兩個存儲塊組,以便于將需要寫入鏡像文件的數(shù)據(jù)存儲進去,進而便于對該段數(shù)據(jù)的寫入與讀出操作。
[0025]較佳地,所述查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組,包括:
[0026]確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù);
[0027]根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。
[0028]由于本發(fā)明實施例在鏡像文件對應(yīng)的存儲區(qū)域中查找不到一個能夠存儲需要寫入鏡像文件的數(shù)據(jù)的存儲塊組后,查找與需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組,以便于該段數(shù)據(jù)盡可能的存儲到連續(xù)的區(qū)域,進而便于對該段數(shù)據(jù)的寫入與讀出操作。
[0029]較佳地,所述根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組,包括:
[0030]從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組;
[0031]其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。
[0032]由于本發(fā)明實施例在已查找到的所有存儲塊組中,查找與需要寫入鏡像文件的數(shù)據(jù)的長度匹配的最大的前N個存儲塊組,以便于將該段數(shù)據(jù)存儲到最大的連續(xù)的區(qū)域上,進而便于對該段數(shù)據(jù)的寫入與讀出操作。
[0033]較佳地,若所述鏡像文件為第四代擴展文件系統(tǒng)ext4鏡像文件,則所述查找至少一段連續(xù)的空存儲塊之后,還包括:
[0034]根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的區(qū)段樹extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。
[0035]本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的設(shè)備,包括:
[0036]長度確定模塊,用于確定需要寫入鏡像文件的數(shù)據(jù)的長度;
[0037]查找模塊,用于若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;
[0038]存儲模塊,用于將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。
[0039]較佳地,所述長度確定模塊具體用于:
[0040]若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。
[0041]較佳地,所述查找模塊具體用于:
[0042]根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù);
[0043]如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊;
[0044]否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。
[0045]較佳地,所述查找模塊具體用于:
[0046]將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊;
[0047]如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟;
[0048]如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值;
[0049]如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組;
[0050]如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。
[0051]較佳地,所述查找模塊具體用于:
[0052]確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù);
[0053]根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。
[0054]較佳地,所述查找模塊具體用于:
[0055]從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組;
[0056]其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。
[0057]較佳地,若所述鏡像文件為第四代擴展文件系統(tǒng)ext4鏡像文件,則所述查找模塊還用于:
[0058]根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的區(qū)段樹extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。
[0059]由于本發(fā)明實施例將需要寫入鏡像文件的數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的至少一段連續(xù)的空存儲塊中,以便于數(shù)據(jù)的寫入與讀出操作,提高了對存儲容量大的鏡像文件的讀寫效率。
【附圖說明】
[0060]圖1為本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的方法流程示意圖;
[0061]圖2為本發(fā)明實施例提供的鏡像文件對應(yīng)的存儲區(qū)域示意圖;
[0062]圖3為本發(fā)明實施例提供的一種在鏡像文件對應(yīng)的存儲區(qū)域中查找至少一段連續(xù)的空存儲塊的方法流程示意圖;
[0063]圖4為本發(fā)明實施例提供的ext2/ext3的間接塊映射存儲方式示意圖;
[0064]圖5為本發(fā)明實施例提供的ext4的extent tree映射存儲方式示意圖;
[0065]圖6為本發(fā)明實施例提供的ext2/ext3/ext4的磁盤布局示意圖;
[0066]圖7為本發(fā)明實施例提供的將需要6個block的數(shù)據(jù)以extent tree的形式進行存儲的不意圖;
[0067]圖8為本發(fā)明實施例提供的一種將數(shù)據(jù)寫入ext4鏡像文件的方法流程示意圖;
[0068]圖9為本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的設(shè)備結(jié)構(gòu)示意圖。
【具體實施方式】
[0069]本發(fā)明實施例確定需要寫入鏡像文件的數(shù)據(jù)的長度;若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。由于本發(fā)明實施例將需要寫入鏡像文件的數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的至少一段連續(xù)的空存儲塊中,以便于數(shù)據(jù)的寫入與讀出操作,提高了對存儲容量大的鏡像文件的讀寫效率。
[0070]其中,本發(fā)明實施例的系統(tǒng)平臺可以是Windows平臺,也可以是Linux平臺,其它系統(tǒng)平臺也可以。
[0071]其中,本發(fā)明實施例的鏡像文件可以是:ext2 (The second extended filesystem,第二代擴展文件系統(tǒng))鏡像文件、ext3(Third extended file system,第三代擴展文件系統(tǒng))鏡像文件、ext4鏡像文件等。
[0072]本發(fā)明實施例可以實現(xiàn)在Windows平臺下對ext4鏡像文件(ext4是Linux平臺下的一種文件系統(tǒng)類型,Windows平臺下不支持這種文件系統(tǒng))進行處理。
[0073]下面結(jié)合說明書附圖對本發(fā)明實施例作進一步詳細描述。
[0074]如圖1所示,本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的方法包括:
[0075]步驟100、確定需要寫入鏡像文件的數(shù)據(jù)的長度;
[0076]步驟101、若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;
[0077]步驟102、將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。
[0078]本發(fā)明實施例若需要寫入鏡像文件的數(shù)據(jù)的長度不大于一個存儲塊,那么直接將該數(shù)據(jù)存儲到一個空存儲塊中。
[0079]本發(fā)明實施例若需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊時,可以將需要寫入鏡像文件的數(shù)據(jù)一次性的存儲到查找的至少一段連續(xù)的空存儲塊中,也可以將需要寫入鏡像文件的數(shù)據(jù)進行分段后,將每段數(shù)據(jù)存儲到查找的至少一段連續(xù)的空存儲塊中。
[0080]較佳地,在步驟100中,所述確定需要寫入鏡像文件的數(shù)據(jù)的長度,包括:
[0081]若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。
[0082]本發(fā)明實施例若需要寫入鏡像文件的數(shù)據(jù)的長度不大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)作為需要寫入鏡像文件的數(shù)據(jù),以及將所述需要寫入鏡像文件的數(shù)據(jù)的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。
[0083]例如:需要將78M的數(shù)據(jù)寫入ext4鏡像文件,此時的預(yù)定門限值為20M,因此需要將此78M的數(shù)據(jù)分為四段,第一段為20M、第二段為20M、第三段為20M、第四段為18M,然后分別將該四段數(shù)據(jù)寫入ext4鏡像文件中。
[0084]又例如:需要將15M的數(shù)據(jù)寫入ext4鏡像文件,此時的預(yù)定門限值為20M,因此不需要將此15M的數(shù)據(jù)進行分段處理,直接將該段數(shù)據(jù)寫入ext4鏡像文件中。
[0085]本發(fā)明實施例根據(jù)需要寫入鏡像文件的數(shù)據(jù)的長度,在鏡像文件對應(yīng)的存儲區(qū)域中能夠查找到一段連續(xù)的空存儲塊用于存儲該數(shù)據(jù),或者在鏡像文件對應(yīng)的存儲區(qū)域中能夠查找到至少一段連續(xù)的空存儲塊用于存儲該數(shù)據(jù)。
[0086]較佳地,在步驟101中,所述根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊,包括:
[0087]根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù);
[0088]如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊;
[0089]否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。
[0090]本發(fā)明實施例根據(jù)鏡像文件對應(yīng)的存儲區(qū)域中的存儲塊的存儲位置,依次查找至少一段連續(xù)的空存儲塊,并且依次命名為第一段連續(xù)的空存儲塊、第二段連續(xù)的空存儲塊……第N段連續(xù)的空存儲塊,其中,N為大于I的整數(shù)。
[0091]具體的根據(jù)確定的需要寫入鏡像文件的數(shù)據(jù)的長度,判斷鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲該數(shù)據(jù)的方式為:
[0092]較佳地,所述根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),包括:
[0093]將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊;
[0094]如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟;
[0095]如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值;
[0096]如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組;
[0097]如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。
[0098]例如:在鏡像文件對應(yīng)的存儲區(qū)域中查找至少一段連續(xù)的空存儲塊能夠存儲需要寫入鏡像文件的數(shù)據(jù)時,首先將找到的存儲塊組的數(shù)量的設(shè)定閾值設(shè)置為200。當(dāng)在查找到的200個存儲塊組并沒有一個存儲塊組能夠存儲需要寫入鏡像文件的數(shù)據(jù),且所有200個存儲塊組組合在一起也不能夠存儲需要寫入鏡像文件的數(shù)據(jù)時,將找到的存儲塊組的數(shù)量的設(shè)定閾值設(shè)置為400。若所有400個存儲塊組組合在一起還不能夠存儲需要寫入鏡像文件的數(shù)據(jù),依次增加設(shè)定閾值的數(shù)量,直到整個鏡像文件對應(yīng)的存儲區(qū)域中的空存儲塊都被查找過為止。
[0099]如圖2所示,為本發(fā)明實施例提供的鏡像文件對應(yīng)的存儲區(qū)域,從圖2中可知,該存儲區(qū)域上有12個block(塊),block號分別為第O號至第11號,第2號、第7號和第11號block上存儲有數(shù)據(jù),其余的block是空的。
[0100]又例如:需要寫入鏡像文件的數(shù)據(jù)總共需要3個block,從圖2中的存儲區(qū)域上查找到兩個連續(xù)的空block為第O號block和第I號block,將其作為一個存儲塊組,此時一共有2個空block,但不能存儲需要3個block的數(shù)據(jù);進而判斷與第I號block相鄰的下一個block(第2號block)是否是空block,經(jīng)判斷下一個block(第2號block)不是空block,將該存儲塊組作為一段連續(xù)的空block,但是該段連續(xù)的空block并不能存儲需要3個block的數(shù)據(jù);繼續(xù)從圖2中的存儲區(qū)域上查找到另外兩個連續(xù)的空block為第3號block和第4號block,并且米用上述方法查找到第3號block至第5號block的一段連續(xù)的空block,該段連續(xù)的空block能夠存儲需要3個block的數(shù)據(jù),查找成功。
[0101]又例如:需要寫入鏡像文件的數(shù)據(jù)總共需要6個block,從圖2中的存儲區(qū)域上查找到兩個連續(xù)的空block為第O號block和第I號block,將其作為一個存儲塊組,此時一共有2個空block,但不能存儲需要6個block的數(shù)據(jù);進而判斷與第I號block相鄰的下一個block(第2號block)是否是空block,經(jīng)判斷下一個block(第2號block)不是空block,將該存儲塊組作為一段連續(xù)的空block,但是該段連續(xù)的空block并不能存儲需要6個block的數(shù)據(jù);繼續(xù)從圖2中的存儲區(qū)域上查找到另外兩個連續(xù)的空block為第3號block和第4號block,并且米用上述方法查找到第3號block至第6號block的一段連續(xù)的空block,該段連續(xù)的空block并不能夠存儲需要6個block的數(shù)據(jù);繼續(xù)從圖2中的存儲區(qū)域上查找到另外兩個連續(xù)的空block為第8號block和第9號block,并且采用上述方法查找到第8號block至第10號block的一段連續(xù)的空block,該段連續(xù)的空block不能夠存儲需要6個block的數(shù)據(jù),查找不成功。
[0102]本發(fā)明實施例當(dāng)在鏡像文件對應(yīng)的存儲區(qū)域中查找不到能夠存儲需要寫入鏡像文件的數(shù)據(jù)的一段連續(xù)的空存儲塊時,會將至少兩段連續(xù)的空存儲塊用于存儲需要寫入鏡像文件的數(shù)據(jù)。
[0103]具體的從鏡像文件對應(yīng)的存儲區(qū)域中查找到能夠存儲需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組的方式為:
[0104]較佳地,所述查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組,包括:
[0105]確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù);
[0106]根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。
[0107]具體的根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組,可以采用如下方式去實現(xiàn):
[0108]較佳地,所述根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組,包括:
[0109]從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組;
[0110]其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。
[0111]具體的從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組,可以采用如下方式:
[0112]方式一:
[0113]將所有存儲塊組的塊數(shù)按照從大到小的順序進行排序;
[0114]順序選擇至少兩個存儲塊組,其中,順序選擇的所述至少兩個存儲塊組不小于需要寫入鏡像文件的數(shù)據(jù)的長度;
[0115]當(dāng)順序選擇的所述至少兩個存儲塊組大于需要寫入鏡像文件的數(shù)據(jù)的長度時,從塊數(shù)最小的一個存儲塊組中,選擇前N個連續(xù)的空存儲塊對數(shù)據(jù)進行存儲,并且此時數(shù)據(jù)剛好存儲完,其中,N為不小于I的整數(shù)。
[0116]例如:需要寫入鏡像文件的數(shù)據(jù)總共需要6個block,從圖2中的存儲區(qū)域上查找到三個存儲塊組,第一個存儲塊組的空block為:第O號block至第I號block、空block總數(shù)為2,第二個存儲塊組的空block為:第3號block至第6號block、空block總數(shù)為4,第三個存儲塊組的空block為:第8號block至第10號block、空block總數(shù)為3 ;上述三個存儲塊組都不能夠存儲需要6個block的數(shù)據(jù);將該三個存儲塊組按照空block總數(shù)從大到小進行排序,排序順序為:第二個存儲塊組、第三個存儲塊組、第一個存儲塊組;將第二個存儲塊組和第三個存儲塊組用于存儲需要寫入鏡像文件的數(shù)據(jù),但是由于此時需要寫入鏡像文件的數(shù)據(jù)總共需要6個block,而第二個存儲塊組和第三個存儲塊組的總空block數(shù)為7,因而將第三個存儲塊組中的第8號block和第9號block用于存儲數(shù)據(jù)即可。
[0117]方式二:
[0118]將所有存儲塊組的塊數(shù)按照從大到小的順序進行排序;
[0119]順序選擇至少兩個存儲塊組,其中,順序選擇的所述至少兩個存儲塊組不小于需要寫入鏡像文件的數(shù)據(jù)的長度;
[0120]當(dāng)順序選擇的所述至少兩個存儲塊組大于需要寫入鏡像文件的數(shù)據(jù)的長度時,不使用塊數(shù)最小的一個存儲塊組存儲數(shù)據(jù),繼續(xù)在剩余的多個存儲塊組中選擇一個存儲塊組,此時數(shù)據(jù)能存儲完,并且該存儲塊組能被全部使用或剩余最少的空存儲塊。
[0121]例如:需要寫入鏡像文件的數(shù)據(jù)總共需要6個block,從圖2中的存儲區(qū)域上查找到三個存儲塊組,第一個存儲塊組的空block為:第O號block至第I號block、空block總數(shù)為2,第二個存儲塊組的空block為:第3號block至第6號block、空block總數(shù)為4,第三個存儲塊組的空block為:第8號block至第10號block、空block總數(shù)為3 ;上述三個存儲塊組的空block都不能夠存儲需要6個block的數(shù)據(jù);將該三個存儲塊組按照空block總數(shù)從大到小進行排序,排序順序為:第二個存儲塊組、第三個存儲塊組、第一個存儲塊組;將第二個存儲塊組和第三個存儲塊組用于存儲需要寫入鏡像文件的數(shù)據(jù),但是由于此時需要寫入鏡像文件的數(shù)據(jù)總共需要6個block,而第二個存儲塊組和第三個存儲塊組的總空block數(shù)為7,因而不再使用第三個存儲塊組進行存儲數(shù)據(jù),使用第一個存儲塊組和第二個存儲塊組進行存儲數(shù)據(jù),此時第一個存儲塊組和第二個存儲塊組的總空block數(shù)為6。
[0122]如圖3所示,本發(fā)明實施例提供的一種在鏡像文件對應(yīng)的存儲區(qū)域中查找至少一段連續(xù)的空存儲塊的方法包括:
[0123]步驟300、根據(jù)需要寫入鏡像文件的數(shù)據(jù)的長度確定需要的空存儲塊總數(shù)N,其中N是大于I的整數(shù)。
[0124]步驟301、根據(jù)鏡像文件對應(yīng)的存儲區(qū)域中空存儲塊的存儲位置查找到兩個連續(xù)的空存儲塊,將其作為存儲塊組。
[0125]步驟302、判斷總數(shù)N是否等于存儲塊組的空存儲塊總數(shù),若是,則執(zhí)行步驟306;若否,則執(zhí)行步驟303。
[0126]步驟303、判斷與存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,若是,則執(zhí)行步驟304 ;若否,則執(zhí)行步驟305。
[0127]步驟304、將與存儲塊組中的空存儲塊相鄰的下一個存儲塊加入存儲塊組中,執(zhí)行步驟302。
[0128]步驟305、判斷找到的存儲塊組的數(shù)量是否已達到設(shè)定閾值,若是,則執(zhí)行步驟308 ;若否,則執(zhí)行步驟307。
[0129]步驟306、將該存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊,執(zhí)行步驟313。
[0130]步驟307、根據(jù)鏡像文件對應(yīng)的存儲區(qū)域中空存儲塊的存儲位置查找到另外兩個連續(xù)的空存儲塊,將其作為存儲塊組,執(zhí)行步驟302。
[0131]步驟308、確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù)。
[0132]步驟309、根據(jù)每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找至少兩個存儲塊組。
[0133]步驟310、判斷總數(shù)N是否等于至少兩個存儲塊組的總塊數(shù),若是,則執(zhí)行步驟311 ;若否,則執(zhí)行步驟312。
[0134]在步驟310中,當(dāng)已查找的所有存儲塊組的空存儲塊加起來都不能夠存儲需要寫入鏡像文件的數(shù)據(jù)時,增大設(shè)定閾值,在鏡像文件對應(yīng)的存儲區(qū)域中查找更多的存儲塊組。
[0135]步驟311、將上述至少兩個存儲塊組中的空存儲塊作為至少兩段連續(xù)的空存儲塊,執(zhí)行步驟313。
[0136]步驟312、判斷鏡像文件對應(yīng)的存儲區(qū)域中的空存儲塊是否都加入過存儲塊組,若是,執(zhí)行步驟315 ;若否,則執(zhí)行步驟314。
[0137]步驟313、查找成功,執(zhí)行步驟316。
[0138]步驟314、增加設(shè)定閾值,執(zhí)行步驟307。
[0139]步驟315、查找失敗,執(zhí)行步驟316。
[0140]步驟316、結(jié)束本流程。
[0141]本發(fā)明實施例在鏡像文件對應(yīng)的存儲區(qū)域中,查找到至少一段連續(xù)的空存儲塊能夠存儲需要寫入鏡像文件的數(shù)據(jù)后,將該數(shù)據(jù)存儲到查找到的至少一段連續(xù)的空存儲塊中。具體的存儲方式可以采用如圖4所示的本發(fā)明實施例提供的ext2/ext3的間接塊映射存儲方式,也可以采用如圖5所示的本發(fā)明實施例提供的ext4的extent tree映射存儲方式。其中,圖4和圖5分別表示ext2/ext3的inode (索引)表的i_block結(jié)構(gòu)、ext4的inode表的i_block結(jié)構(gòu),兩種存儲方式存在明顯的差異,采用extent tree (區(qū)段樹)映射存儲方式比采用間接塊映射方式,對文件的讀寫效率高,原因在于:采用間接塊映射方式時,只能一個block—個block的讀數(shù)據(jù)或?qū)憯?shù)據(jù),讀寫次數(shù)較多;而采用extent tree映射存儲方式,每次可以一個區(qū)段(一個區(qū)段包含多個block) —個區(qū)段的讀數(shù)據(jù)或?qū)憯?shù)據(jù),讀寫次數(shù)較少。雖然兩種存儲方式存在較大的差異,但是ext2/eXt3和ext4的磁盤布局是相同的,具體的ext2/ext3/ext4的磁盤布局可以參見圖6 (本發(fā)明實施例提供的ext2/ext3/ext4的磁盤布局示意圖),ext4能兼容ext2/ext3,需要特別說明的是ext4的超級塊、塊組描述符、inode表等結(jié)構(gòu)的細節(jié)與ext2/ext3不同,尤其是inode表引入了 extenttree存儲方式。
[0142]從圖5中可知,inode下存儲了一個Extent-Header (區(qū)段頭)和一個Extent-1ndex (區(qū)段索引),Extent-Header里至少存在如下信息:樹的層數(shù)信息(三層)、與 Extent-Header 緊鄰的是 Extent-1ndex 的信息、一共有一個 Extent-1ndex 與Extent-Header緊鄰的信息;inode里的Extent-1ndex里面存放了一個指向block的地址,該地址對應(yīng)的block為樹的第一層,并且該block里面存儲了一個Extent-Header和兩個Extent-1ndexJt^f Extent-Header中樹的層數(shù)信息為兩層;樹的第一層中的第一個Extent-1ndex里面仍然存放了一個指向block的地址,該地址對應(yīng)的block為樹的第二層,并且該block里面存儲了一個Extent-Header和兩個Extent (區(qū)段),此時Extent-Header中樹的層數(shù)信息為一層;樹的第二層中的第一個Extent里面存儲了一個指向block的地址(地址為2)和block總數(shù)(總數(shù)為四),該地址對應(yīng)的block為樹的第三層,并且該block里面存儲的是數(shù)據(jù),根據(jù)block的地址和block總數(shù)能知道該段數(shù)據(jù)的起始地址和結(jié)束地址,圖5中構(gòu)成樹的其它block與上述block的存儲內(nèi)容和作用類似,不再贅述。
[0143]較佳地,若所述鏡像文件為ext4鏡像文件,則所述查找至少一段連續(xù)的空存儲塊之后,還包括:
[0144]根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。
[0145]例如:需要寫入ext4鏡像文件的數(shù)據(jù)總共需要6個block,從圖2中查找到三段連續(xù)的空block,每一段稱為一個Extent ;將第一段連續(xù)的空block和第二段連續(xù)的空block用于存儲需要寫入ext4鏡像文件的數(shù)據(jù),此時一共需要兩個Extent,在構(gòu)造extent tree時,將一個Extent-Header和兩個Extent存儲在inode中,其中,Extent-Header中樹的層數(shù)信息為一層,與Extent-Header緊鄰的是Extent、一共有兩個Extent與Extent-Header緊鄰,inode中的第一個Extent里面存儲了一個指向block的地址(地址為3)和block總數(shù)(總數(shù)為四),inode中的第二個Extent里面存儲了一個指向block的地址(地址為O)和block總數(shù)(總數(shù)為二 );將需要寫入ext4鏡像文件的數(shù)據(jù)存儲到extent tree的第一層中的block中,具體的數(shù)據(jù)存儲方式可以參見圖7 (本發(fā)明實施例提供的將需要6個block的數(shù)據(jù)以extent tree的形式進行存儲的示意圖)。
[0146]如圖8所示,本發(fā)明實施例提供的一種將數(shù)據(jù)寫入ext4鏡像文件的方法包括:
[0147]步驟800、打開ext4鏡像文件。
[0148]步驟801、獲取ext4鏡像文件的文件系統(tǒng)信息。
[0149]步驟802、遍歷所有文件的目錄項,判斷是否存在與需要寫入的文件相同的文件名,若是,則執(zhí)行步驟803 ;若否,則執(zhí)行步驟804。
[0150]步驟803、刪除該文件。
[0151]本發(fā)明實施例刪除文件時,會將該文件的目錄項、索引表、文件數(shù)據(jù)等全部刪除,并且會更新整個ext4鏡像文件的文件系統(tǒng)信息,包括:塊位圖、索引位圖以及超級塊等。
[0152]步驟804、判斷ext4鏡像文件對應(yīng)的存儲區(qū)域中的剩余存儲空間是否足夠?qū)懭胄枰獙懭氲奈募?,若是,則執(zhí)行步驟805 ;若否,則執(zhí)行步驟817。
[0153]步驟805、創(chuàng)建需要寫入的文件的基本信息,如目錄項、索引表等。
[0154]步驟806、讀取需要寫入的文件,判斷該文件的大小是否超過設(shè)定門限值,若是,則執(zhí)行步驟807 ;若否,則執(zhí)行步驟813。
[0155]步驟807、將需要寫入的文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入的數(shù)據(jù)段。
[0156]步驟808、針對一個需要寫入的數(shù)據(jù)段,在ext4鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊。
[0157]步驟809、將查找到的至少一段連續(xù)的空存儲塊生成extent tree。
[0158]步驟810、將extent tree寫入需要寫入的文件的索引表中。
[0159]步驟811、將需要寫入的數(shù)據(jù)段寫入到ext4鏡像文件中。
[0160]步驟812、判斷是否還有下一個需要寫入的數(shù)據(jù)段,若是,則執(zhí)行步驟808;若否,則執(zhí)行步驟817。
[0161]步驟813、在ext4鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊。
[0162]步驟814、將查找到的至少一段連續(xù)的空存儲塊生成extent tree。
[0163]步驟815、將extent tree寫入需要寫入的文件的索引表中。
[0164]步驟816、將需要寫入的文件寫入到ext4鏡像文件中。
[0165]步驟817、關(guān)閉ext4鏡像文件。
[0166]在步驟817中,若ext4鏡像文件對應(yīng)的存儲區(qū)域中的剩余存儲空間不足以寫入該文件,本發(fā)明實施例一種較佳地關(guān)閉ext4鏡像文件的方式為:在關(guān)閉ext4鏡像文件之前,將步驟803中刪除的文件恢復(fù)到ext4鏡像文件中,然后關(guān)閉ext4鏡像文件。
[0167]基于同一發(fā)明構(gòu)思,本發(fā)明實施例中還提供了一種將數(shù)據(jù)寫入鏡像文件的設(shè)備,由于圖9的將數(shù)據(jù)寫入鏡像文件的設(shè)備對應(yīng)的方法為本發(fā)明實施例一種將數(shù)據(jù)寫入鏡像文件的方法,因此本發(fā)明實施例設(shè)備的實施可以參見系統(tǒng)的實施,重復(fù)之處不再贅述。
[0168]如圖9所示,本發(fā)明實施例提供的一種將數(shù)據(jù)寫入鏡像文件的設(shè)備包括:
[0169]長度確定模塊900,用于確定需要寫入鏡像文件的數(shù)據(jù)的長度;
[0170]查找模塊901,用于若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;
[0171]存儲模塊902,用于將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。
[0172]較佳地,所述長度確定模塊900具體用于:
[0173]若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。
[0174]較佳地,所述查找模塊901具體用于:
[0175]根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù);
[0176]如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊;
[0177]否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。
[0178]較佳地,所述查找模塊901具體用于:
[0179]將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊;
[0180]如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟;
[0181]如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值;
[0182]如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組;
[0183]如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。
[0184]較佳地,所述查找模塊901具體用于:
[0185]確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù);
[0186]根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。
[0187]較佳地,所述查找模塊901具體用于:
[0188]從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組;
[0189]其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。
[0190]較佳地,若所述鏡像文件為ext4鏡像文件,則所述查找模塊901還用于:
[0191]根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。
[0192]從上述內(nèi)容可以看出:本發(fā)明實施例確定需要寫入鏡像文件的數(shù)據(jù)的長度;若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊;將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。由于本發(fā)明實施例將需要寫入鏡像文件的數(shù)據(jù)存儲在鏡像文件對應(yīng)的存儲區(qū)域中的至少一段連續(xù)的空存儲塊中,以便于數(shù)據(jù)的寫入與讀出操作,提高了對存儲容量大的鏡像文件的讀寫效率。
[0193]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
[0194]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0195]這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0196]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0197]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
[0198]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【主權(quán)項】
1.一種將數(shù)據(jù)寫入鏡像文件的方法,其特征在于,該方法包括: 確定需要寫入鏡像文件的數(shù)據(jù)的長度; 若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊; 將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。2.如權(quán)利要求1所述的方法,其特征在于,所述確定需要寫入鏡像文件的數(shù)據(jù)的長度,包括: 若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。3.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊,包括: 根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù); 如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊; 否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。4.如權(quán)利要求3所述的方法,其特征在于,所述根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),包括: 將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊; 如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟; 如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值; 如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組; 如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。5.如權(quán)利要求4所述的方法,其特征在于,所述查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組,包括: 確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù); 根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。6.如權(quán)利要求5所述的方法,其特征在于,所述根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組,包括: 從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組; 其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。7.如權(quán)利要求1所述的方法,其特征在于,若所述鏡像文件為第四代擴展文件系統(tǒng)ext4鏡像文件,則所述查找至少一段連續(xù)的空存儲塊之后,還包括: 根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的區(qū)段樹extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。8.一種將數(shù)據(jù)寫入鏡像文件的設(shè)備,其特征在于,該設(shè)備包括: 長度確定模塊,用于確定需要寫入鏡像文件的數(shù)據(jù)的長度; 查找模塊,用于若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于一個存儲塊,根據(jù)確定的所述長度,在所述鏡像文件對應(yīng)的存儲區(qū)域中,查找至少一段連續(xù)的空存儲塊; 存儲模塊,用于將所述需要寫入鏡像文件的數(shù)據(jù)存儲到查找的所述至少一段連續(xù)的空存儲塊中。9.如權(quán)利要求8所述的設(shè)備,其特征在于,所述長度確定模塊具體用于: 若所述需要寫入鏡像文件的數(shù)據(jù)的長度大于預(yù)定門限值,將所述需要寫入鏡像文件的數(shù)據(jù)按照設(shè)定長度進行分段,將每一段分別作為需要寫入鏡像文件的數(shù)據(jù),以及將每一段的長度作為確定需要寫入鏡像文件的數(shù)據(jù)的長度。10.如權(quán)利要求8所述的設(shè)備,其特征在于,所述查找模塊具體用于: 根據(jù)確定的所述長度,判斷所述鏡像文件對應(yīng)的存儲區(qū)域中是否有一段連續(xù)的空存儲塊能夠存儲所述需要寫入鏡像文件的數(shù)據(jù); 如果有,則將所述一段連續(xù)的空存儲塊作為查找到的一段連續(xù)的空存儲塊; 否則,查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩段連續(xù)的空存儲塊。11.如權(quán)利要求10所述的設(shè)備,其特征在于,所述查找模塊具體用于: 將兩個連續(xù)的空存儲塊作為存儲塊組,判斷存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),如果存儲塊組能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),則將所述存儲塊組中的空存儲塊作為一段連續(xù)的空存儲塊; 如果存儲塊組不能夠存儲所述需要寫入鏡像文件的數(shù)據(jù),判斷與所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是否是空存儲塊,如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊是空存儲塊,則將所述下一個存儲塊加入到所述存儲塊組中,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟; 如果所述存儲塊組中的空存儲塊相鄰的下一個存儲塊不是空存儲塊,則將后續(xù)的兩個連續(xù)的空存儲塊作為存儲塊組,并返回判斷所述存儲塊組是否能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的步驟,直到找到的存儲塊組的組數(shù)達到設(shè)定閾值; 如果找到的存儲塊組的組數(shù)達到設(shè)定閾值,且未查找到能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的一個存儲塊組,則查找能夠存儲所述需要寫入鏡像文件的數(shù)據(jù)的至少兩個存儲塊組; 如果找到的所有存儲塊組組合在一起無法存儲所述需要寫入鏡像文件的數(shù)據(jù),則增加所述閾值,并返回將兩個連續(xù)的空存儲塊作為存儲塊組的步驟。12.如權(quán)利要求11所述的設(shè)備,其特征在于,所述查找模塊具體用于: 確定已查找到的所有存儲塊組中每個存儲塊組中空存儲塊的塊數(shù); 根據(jù)所述每個存儲塊組中空存儲塊的塊數(shù),從已查找到的所有存儲塊組中查找與所述需要寫入鏡像文件的數(shù)據(jù)的長度匹配的至少兩個存儲塊組。13.如權(quán)利要求12所述的設(shè)備,其特征在于,所述查找模塊具體用于: 從已查找到的所有存儲塊組中查找塊數(shù)最大的前N個存儲塊組; 其中,查找到的前N個存儲塊組不小于所述需要寫入鏡像文件的數(shù)據(jù)的長度,N為大于I的正整數(shù)。14.如權(quán)利要求8所述的設(shè)備,其特征在于,若所述鏡像文件為第四代擴展文件系統(tǒng)ext4鏡像文件,則所述查找模塊還用于: 根據(jù)查找到的至少一段連續(xù)的空存儲塊,生成一個用于索引所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的區(qū)段樹extent tree信息,并將所述extent tree信息置于所述ext4鏡像文件中的所述需要寫入ext4鏡像文件的數(shù)據(jù)對應(yīng)的索引表中。
【文檔編號】G06F17/30GK105989008SQ201510042313
【公開日】2016年10月5日
【申請日】2015年1月27日
【發(fā)明人】楊敏, 李國斌
【申請人】炬芯(珠海)科技有限公司