[發明專利]面向類Linux操作系統的磁盤數據保護方法有效
| 申請號: | 201210121227.2 | 申請日: | 2012-04-23 |
| 公開(公告)號: | CN102646079A | 公開(公告)日: | 2012-08-22 |
| 發明(設計)人: | 汪黎;王開宇;梁鎮;吳慶波;戴華東 | 申請(專利權)人: | 中國人民解放軍國防科學技術大學 |
| 主分類號: | G06F12/16 | 分類號: | G06F12/16 |
| 代理公司: | 國防科技大學專利服務中心 43202 | 代理人: | 郭敏 |
| 地址: | 410073 湖*** | 國省代碼: | 湖南;43 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 面向 linux 操作系統 磁盤 數據 保護 方法 | ||
1.一種面向類Linux操作系統的磁盤數據保護方法,其特征在于包括以下步驟:
第一步,修改Loop設備的loop_nit,lo_receive,lo_send以及loop_exit函數,將經過修改的Loop設備驅動程序統稱為數據安全保護模塊即DSP模塊,修改方法是:
在loop_nit函數開始處加入函數DSP_nit(),由DSP_nit初始化DSP模塊的初始數據;
在lo_receive函數開始處加入函數DSP_receive(),由DSP_receive()根據需要修改lo_receive的參數pos,使pos指向重定向后的數據所在位置;
在lo_send函數開始處加入函數DSP_send(),由DSP_send()根據需要修改lo_send的參數pos,使pos指向未使用的磁盤空間;
在loop_exit函數開始處加入函數DSP_exit(),由DSP_exit()釋放DSP模塊初始化和程序運行中產生的內存資源;
第二步,將修改后的loop_nit,lo_receive,lo_send以及loop_exit函數編譯鏈接,生成新的Loop設備驅動模塊loop.ko;
第三步,加載Loop設備驅動模塊loop.ko,調用初始化函數loop_nit,該函數調用DSP_nit()進行如下初始化:
3.1構建一個線性鏈表blocklist,blocklist中每個元素存儲一個二元組(old_block_num,new_block_num),old_block_num用于記錄初始磁盤請求的塊號,new_block_num用于記錄重定向后的新塊號,DSP_nit()將blocklist初始化為空表;
3.2讀取磁盤分區中文件系統的超級塊、組描述符表,將它們緩存在內存中,根據緩存的超級塊和組描述符表信息,獲得以下數據:
3.2.1從組描述符表獲得1-N號塊組中空閑塊的數目,將1-N號塊組中空閑塊的數目存貯在數組free_block_count[]中,free_block_count[m]存貯第m個塊組中空閑塊的數目,1≤m≤N,N為正整數;
3.2.2從超級塊獲得每個塊組的塊數block_count,各個塊組的塊數相等;
3.2.3從組描述符表獲得1-N號塊組的塊位圖的起始塊號block_bitmap_start[],block_bitmap_start[m]存儲第m個塊組中塊位圖的起始塊號;
3.2.4從組描述符表獲得1-N號塊組的i節點表的起始塊號inode_table_start[],inode_table_start[m]存儲第m個塊組中i節點表的起始塊號;
3.2.5從超級塊獲得1-N號塊組的塊大小block_size,單位為字節;
3.2.6從超級塊獲得每個塊組所含i節點數inode_count;
3.2.7從組描述符表獲得1-N號塊組的i節點位圖的起始塊號inode_bitmap_start[],inode_bitmap_start[m]存儲第m個塊組中i節點位圖的起始塊號;
3.2.8從超級塊獲得文件系統總塊數total_block_count;
3.3計算1-N號塊組的塊位圖的大小、i節點表的大小、塊組的個數:
3.3.1第m個塊組的塊位圖的大小:
block_bitmap_size[m]=(inode_bitmap_start[m]-block_bitmap_start[m])×block_size,inode_bitmap_start[m]為第m個塊組的i節點位圖的起始塊號,block_bitmap_start[m]是第m個塊組的塊位圖的起始塊號,block_size為塊大小,單位為字節;
3.3.2塊組的i節點表的大小inode_table_size:
inode_table_size=inode_count×128/block_size,符號“/”表示除法,128為每個i節點大小,單位為字節;
3.3.3塊組的個數:group_count=total_block_count/block_count;
3.4根據1-N號塊組的塊位圖起始塊號block_bitmap_start[],及塊位圖的大小block_bitmap_size[]從磁盤上讀取1-N號塊組的塊位圖block_bitmap[];
3.5loop_nit[]函數初始化設備;
第四步,等待用戶的數據訪問請求,如果數據訪問請求為讀取磁盤數據,執行第五步;如果用戶請求為寫入磁盤數據,執行第六步;如果用戶請求為退出磁盤保護模塊,執行第七步;
第五步,lo_receive啟動,調用DSP_receive()對lo_receive的參數pos即本次數據訪問請求的磁盤位置進行修改,方法是:
5.1計算要讀取的磁盤塊號:request_block_num=表示對x下取整。
5.2用request_block_num查詢鏈表blocklist,如果blocklist所有的二元組中的old_block_num均不與request_block_num相等,則表明該塊沒有被重定向,不需要修改pos,執行5.3;如果存在(old_block_num,new_block_num),使得old_block_num等于request_block_num,則將當前要讀取的磁盤位置pos修改為new_block_num×block_size+pos%block_size,其中%為取余運算;
5.3lo_recive函數將從磁盤中pos所指位置讀取的數據填充到bio描述的本次數據訪問請求中內存中存放數據的緩沖區,所述bio是lo_recive函數的一個參數,類Linux系統內核啟動lo_recive函數時給bio賦值,轉第四步;
第六步,lo_send啟動,調用DSP_send()對lo_send的參數pos,即本次數據訪問請求的磁盤位置進行修改,方法是:
6.1計算要寫入的磁盤塊號:request_block_num=
6.2用request_block_num查詢鏈表blocklist,如果blocklist表中存在二元組(old_block_num,new_block_num),使得old_block_num等于request_block_num,則將當前要寫入的磁盤位置pos修改為new_block_num×block_size+pos%block_size,轉6.7;如果blocklist表中所有二元組中的old_block_num均不與request_block_num相等,則執行6.3;
6.3判斷request_block_num對應的數據塊是否位于數據區;
6.4如果request_block_num對應的數據塊位于數據區,轉6.6;如果request_block_num對應的數據塊不位于數據區,轉6.5;
6.5將request_block_num對應的數據塊的寫操作透明重定向到一個未用的數據塊,方法為:尋找一個空閑塊new_block_num,如果當前已無空閑塊可用,令lo_send函數出錯退出,不再進行后續寫入操作,轉第四步,否則轉6.7;
6.6查詢request_block_num所在塊組的塊位圖blockbitmap[group_num],如果該塊為未占用塊,則修改block_bitmap[group_num]中對應該塊的比特位的值為1,并將free_block_count[group_num]的值減1,令new_block_num=request_block_num,轉6.7;如果該塊為已占用塊,則尋找一個空閑塊new_block_num,如果當前已無空閑塊可用,令lo_send函數出錯退出,不再進行后續寫入操作,轉第四步,如果找到了空閑塊,轉6.7;
6.7將(request_block_num,new_block_num)加入到鏈表blocklist中,將當前要寫入的磁盤位置pos修改為new_block_num×block_size+pos%block_size;
6.8lo_send函數將bio描述的內存緩沖區中的數據寫入磁盤中pos所指的位置,轉第四步,所述bio是lo_send函數的一個參數,類Linux系統內核啟動lo_send函數時給bio賦值,;
第七步,loop_exit啟動卸載模塊,調用DSP_exit()對模塊進行如下操作:
7.1DSP_exit()函數釋放DSP模塊初始化和程序運行中產生的內存空間;
7.2繼續執行loop_exit函數,對Loop設備卸載。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國人民解放軍國防科學技術大學,未經中國人民解放軍國防科學技術大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210121227.2/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:潛水泵的導葉體油室注油孔裝置
- 下一篇:儲糧通風風機控制模塊





