【视频块文件系统不得不说的故事】VBFS文件系统简介
在視頻監(jiān)控項目中,錄像是必須且至關重要的一個基本功能,可以說錄像質量及穩(wěn)定性在很大程度上就反映了一個監(jiān)控產品的好壞。
傳統(tǒng)的文件系統(tǒng)在長時間大容量的錄像并發(fā)生覆蓋時往往存在以下三方面的問題:
??? 1)文件碎片越來越多、錄像效率逐漸下降,無法滿足規(guī)劃時的系統(tǒng)要求;
2)文件的刪除效率極低,導致覆蓋時的碼流錄像能力低于開始的規(guī)劃要求從而出現(xiàn)錄像異常停止或者碼流數(shù)據(jù)的丟失;
??? 3)文件系統(tǒng)復雜、龐大,系統(tǒng)異常情況下的問題查處相當困難,幾乎束手無策。
基于以上考慮,特提出VBFS文件系統(tǒng)的設計實現(xiàn);本文簡單介紹VBFS文件系統(tǒng)構成、覆蓋機制以及存在的短板。
1???????VBFS文件系統(tǒng)中的關鍵字
VBFS:? Video Block File System,?視頻塊文件系統(tǒng)
SBR: ? System Boot Record,?? ???文件系統(tǒng)引導記錄
RAT: ?? Record Allocation Table,??錄像記錄分配表
RIA: ?? Record Index Area,???? ???記錄索引區(qū)
?
2???????VBFS文件系統(tǒng)簡介
2.1?????VBFS文件系統(tǒng)總體結構組織圖
| SBR | 備份SBR | RAT | 備份RAT | RIA | 備份RIA | 數(shù)據(jù)區(qū) |
在VBFS文件系統(tǒng)中,主要包括六個區(qū)域,SBR,RAT,備份RAT,RIA,備份RIA和數(shù)據(jù)區(qū)。
VBFS支持O_direct(無緩沖的輸入、輸出)的磁盤寫方式,因此所有區(qū)域的起始位置都以磁盤扇區(qū)大小進行對齊;
除了數(shù)據(jù)區(qū),其他五個區(qū)域的最小分配單元為磁盤的扇區(qū)大小,而磁盤的數(shù)據(jù)區(qū)則被劃分為一塊塊大小固定的數(shù)據(jù)簇,因此數(shù)據(jù)簇成為數(shù)據(jù)區(qū)的最小分配單元。
2.2?????SBR
SBR作為文件系統(tǒng)引導區(qū),主要記錄了一個分區(qū)的總體信息,幫助上層應用可以正確識別并訪問該磁盤分區(qū)。主要內容包括:
| 字段 | 長度 (字節(jié)) | 默認值 | 說明 |
| FS | 4 | VBFS | 文件系統(tǒng)標識,固定不變。 |
| PV | 8 | KEDA ? 1.0 | 廠商及版本 |
| UUID | 36 | 變量 | 分區(qū)唯一標識 |
| Label | 16 | 變量 | 卷標,暫時未用 |
| BPS | 4 | 變量 | 每個扇區(qū)字節(jié)數(shù)(Bytes ? per Sector),在磁盤格式化時根據(jù)實際磁盤扇區(qū)大小填寫 |
| SPC | 4 | 1024 ? * 1024 / BPS | 每個簇包含的扇區(qū)數(shù)(Sectors ? per Clustor) 注:簇大小固定為1M字節(jié)?? |
| RSS | 4 | 63 | 保留扇區(qū)數(shù)(Reserved ? Sectors),整個SBR空間 |
| SPT | 4 | 63 | 每個磁道扇區(qū)數(shù)(Setors ? per Track) |
| TSS | 8 | 變量 | 磁盤分區(qū)總扇區(qū)數(shù)(Total ? Sectors) |
| BBS | 4 | 6 | 備份SBR的起始扇區(qū)號(Backup boot Sector),固定不變 |
| NORA | 4 | 2 | RAT個數(shù)(Number of RATs) |
| NORI | 4 | 2 | RIA個數(shù)(Number of RIAs) |
| SPR | 4 | 變量 | 每個RAT包含的扇區(qū)數(shù)(Setors per RAT) |
| BPR | 4 | 512 | 每個記錄索引占用的字節(jié)數(shù)(Bytes per record) |
| SOR | 4 | MaxRecNum*BPR/BPS | 每個RIA占用扇區(qū)數(shù)(Setors of RIA) 注:?MaxRecNum的默認值為500000,可以在格式化時通過格式化參數(shù)進行調整 |
| CRC | 4 | 變量 | SBR的CRC校驗碼 |
?
2.3?????RAT
RAT為錄像記錄分配表,記錄了每個錄像文件占用的簇的信息。
RAT中的每一記錄項使用4字節(jié)來保存簇號,簇號編號從數(shù)據(jù)區(qū)開始,第0簇和第1簇保留,
因此有效的簇號必然大于等于2。
RAT中的第0記錄項保存的值固定為0x52415400,第1記錄項保存當前可使用的簇號,即整
個磁盤分區(qū)的當前寫位置。
也可以這么來形容RAT,RAT其實就是一個u32的數(shù)組,數(shù)組的容量就是數(shù)據(jù)區(qū)包含的簇總
數(shù),而數(shù)組下標就是簇號,數(shù)組項保存的u32值就是一條錄像記錄所使用的下一個簇的編號或者其他有意義的值,其中數(shù)組項的可能值如下:
| RAT記錄項值 | 對應簇情況 |
| 0 | 未分配 |
| 2~0xFFFFFFEF | 已分配簇,數(shù)值代表下一簇號 |
| 0xFFFFFFF0~ ? xFFFFFFF6 | 文件系統(tǒng)保留 |
| 0xFFFFFFF7 | 壞簇 |
| 0xFFFFFFF8~0xFFFFFFFF | 記錄結束符 |
?
示例:
???????假設RAT保存的信息如下:
| 0x52415400 | 0x08 | 0x04 | 0x06 | 0x05 | 0x07 | 0xffffffff | 0xffffffff | 0 |
這就表示當前簇為第8簇,其中第2,3,4,5簇數(shù)據(jù)有效,第6,7簇為結束簇,第8簇尚未分配。
根據(jù)RAT中記錄項保存的值的意義,我們可以得到如下兩條錄像記錄占用簇的情況:
???????第一條錄像記錄使用的簇為:2?à?4?à?5?à?7
???????第二條錄像記錄使用的簇為:3?à?6
2.4?????RIA
RIA為錄像記錄索引區(qū),每條記錄索引對應一條錄像記錄,其記錄的錄像信息如下:
?
| 字段名 | 長度 (字節(jié)) | 默認值 | 說明 |
| RN | 256 | 字符變量 | 錄像記錄名稱,第一字節(jié)為0xE5則代表記錄已刪除 |
| SS | 4 | U32 | 錄像記錄占用的起始簇號 |
| ST | 4 | U32 | 錄像開始時間 |
| ET | 4 | U32 | 錄像結束時間 |
| CID | 36 | 字符變量 | 編碼器通道ID,32位設備號+4位通道號(未使用) |
| CNM | 32 | 字符變量 | 編碼器通道別名(未使用) |
| NI | 4 | U32 | 相同CID的下一條錄像記錄的索引項位置,從RIA區(qū)開始偏移的記錄數(shù)(未使用) |
| TBS | 8 | U64 | 錄像數(shù)據(jù)的總字節(jié)數(shù) |
| PDT | 8 | 字符變量 | 編碼器制造商信息 |
| RFM | 4 | 字符變量 | 錄像數(shù)據(jù)格式(MP4、H264) |
| RSD | 148 | 字符變量 | 保留數(shù)據(jù) |
| CRC | 4 | U32 | 校驗碼,0為不校驗 |
?
2.5?????VBFS文件系統(tǒng)錄像規(guī)則
1.??為了提高寫的效率,在VBFS中寫磁盤采用嚴格的順序寫,即從磁盤頭順序寫到磁盤結束,然后再從磁盤頭開始,因此從磁盤開始位置到當前寫位置之間的某塊被釋放的磁盤空間,不會立即被使用,即如果第n簇及第n+6簇被占用,即使第n+1到n+5簇已經被釋放,這時如果錄像再需要分配磁盤空間,則會分配第n+7簇。
2.??數(shù)據(jù)區(qū)中的每一個數(shù)據(jù)簇只屬于一個錄像文件,即如果一個錄像文件只用了一個簇的一部分,該簇的未使用部分也不能再分配給其他錄像文件使用
2.6?????VBFS文件覆蓋
1.???????由于VBFS采用嚴格順序寫的方式,因此VBFS的文件覆蓋則是發(fā)生在錄像文件占用的第一個簇被再次分配時。
2.?????????當錄像文件被覆蓋時,在VBFS中只是將該錄像記錄的錄像索引中錄像名的第一個字節(jié)置為0xE5,而不會真正的將該錄像文件所占用的簇全部清空,因此這樣也大大提高了錄像記錄的覆蓋效率。
3.?????????由于VBFS采用嚴格順序寫的方式,因此在磁盤寫到結束后,必然從磁盤頭開始寫,因此不管此時磁盤的中間位置是否有空閑的空間,都會將位于磁盤頭的錄像記錄覆蓋。
3???????VBFS文件系統(tǒng)的短板
俗話說:有利必有弊,VBFS文件系統(tǒng)一方面給我們的產品帶來了諸多好處的同時,比如錄像效率穩(wěn)定、覆蓋效率高,解決定位問題容易,另一方面又存在著一些問題:
首先,由于VBFS執(zhí)行的是嚴格順序寫盤,因此在覆蓋時無法有選擇的進行錄像覆蓋,而且不會跳過某條錄像記錄而使用后續(xù)已經被釋放的空間,也就是磁盤空間利用率不高。
其次,由于VBFS在加載磁盤分區(qū)時,會將RAT及RIA中的有效索引全部加載到內存中,而RAT占用的大小又取決于磁盤分區(qū)的大小,因此如果磁盤分區(qū)大,則RAT加載到內存中占用的內存就多,而隨著錄像記錄數(shù)的增加,索引也在增加,占用的內存也會越多,因此每個VBFS磁盤分區(qū)占用的內存大小就取決于該磁盤分區(qū)的大小及磁盤分區(qū)上錄像記錄數(shù)的多少,而整個NRU占用的內存則會受到所有VBFS磁盤分區(qū)占用的內存之和的影響,也就是說VBFS磁盤分區(qū)越多,NRU占用的內存也就會越多。
總結
以上是生活随笔為你收集整理的【视频块文件系统不得不说的故事】VBFS文件系统简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搞了这么久的产品,终于看清了真相
- 下一篇: 鲸准2020年度产业投资白皮书