|
一、ZFS文件系統(tǒng) ZFS是一款128bit文件系統(tǒng),總?cè)萘渴乾F(xiàn)有64bit文件系統(tǒng)的1.84x10^19倍,其支持的單個(gè)存儲(chǔ)卷容量達(dá)到16EiB(2^64byte,即 16x1024x1024TB);一個(gè)zpool存儲(chǔ)池可以擁有2^64個(gè)卷,總?cè)萘孔畲?56ZiB(2^78byte);整個(gè)系統(tǒng)又可以擁有2^64個(gè)存儲(chǔ) 池。可以說(shuō)在相當(dāng)長(zhǎng)的未來(lái)時(shí)間內(nèi),ZFS幾乎不太可能出現(xiàn)存儲(chǔ)空間不足的問(wèn)題。另外,它還擁有自優(yōu)化,自動(dòng)校驗(yàn)數(shù)據(jù)完整性,存儲(chǔ)池/卷系統(tǒng)易管理等諸多優(yōu)點(diǎn)。較ext3系統(tǒng)有較大運(yùn)行速率,提高大約30%-40%。 二、存儲(chǔ)環(huán)境部署: 用戶所使用存儲(chǔ)設(shè)備型號(hào)為ORACLE-SUN-ZFS7320,共使用40塊磁盤組建存儲(chǔ)池,其中四塊磁盤作為全局熱備。池內(nèi)劃分出若干空間映射到服務(wù)器使用,服務(wù)器操作系統(tǒng)為Windows。 ![]() 三、故障情況: 在使用過(guò)程中進(jìn)行文件遷移時(shí)存儲(chǔ)突然發(fā)生故障,無(wú)法讀取數(shù)據(jù)。設(shè)備管理界面報(bào)錯(cuò)如圖所示: ![]() 四、用戶所需數(shù)據(jù): 恢復(fù)映射到windows服務(wù)器的其中一個(gè)大小為12T LUN中的丟失數(shù)據(jù)。在了解到上述情況后,開(kāi)始制定恢復(fù)方案。 五、磁盤鏡像 為防止對(duì)客戶原始磁盤內(nèi)數(shù)據(jù)造成破壞,首先分別對(duì)各磁盤進(jìn)行鏡像拷貝??截愡^(guò)程中發(fā)現(xiàn)有兩塊磁盤內(nèi)有物理壞道無(wú)法生成鏡像,對(duì)其進(jìn)行標(biāo)注。 六、分析磁盤底層數(shù)據(jù) 獲取到磁盤鏡像后進(jìn)行分析,發(fā)現(xiàn)其采用ZFS文件系統(tǒng)管理所有磁盤。但磁盤內(nèi)記錄系統(tǒng)元信息的NVLIST較為混亂,只能粗略得出以下信息: 1、磁盤被分為三組,每組12塊. 2、單個(gè)組內(nèi)使用ZFS特有的RAIDZ管理所有磁盤. 3、RAIDZ級(jí)別為2,即每個(gè)組內(nèi)可缺失磁盤個(gè)數(shù)最大為2. 4、全局熱備全部啟用. 七、故障推測(cè) 在ZFS文件系統(tǒng)中,池被稱為ZPOOL。ZPOOL的子設(shè)備可以有很多種類,包括塊設(shè)備、文件、磁盤等等,在本案例中所采用的是其中的一種------三組RAIDZ作為子設(shè)備。 經(jīng)過(guò)分析發(fā)現(xiàn),三組RAIDZ內(nèi)有兩組分別啟用熱備盤個(gè)數(shù)為1和3。在啟用熱備盤后,第一組內(nèi)仍出現(xiàn)一塊離線盤,第二組內(nèi)則出現(xiàn)兩塊。以此進(jìn)行故障現(xiàn)場(chǎng)模擬:三組RAIDZ內(nèi)第一二組分別出現(xiàn)離線盤,熱備盤及時(shí)進(jìn)行替換;熱備盤無(wú)冗余狀態(tài)下第一組出現(xiàn)一塊離線盤,第二組出現(xiàn)兩塊離線盤,ZPOOL進(jìn)入高負(fù)荷狀態(tài)(每次讀取數(shù)據(jù)都需要進(jìn)行校驗(yàn)得到正確數(shù)據(jù));第二組內(nèi)出現(xiàn)第三塊離線盤,RAIDZ崩潰,ZPOOL下線。 八、ZPOOL重組 ZFS管理的存儲(chǔ)池與常規(guī)存儲(chǔ)不同,所有磁盤都由ZFS進(jìn)行管理。常規(guī)RAID在存儲(chǔ)數(shù)據(jù)時(shí),只按照特定的規(guī)則組建池,不關(guān)心文件在子設(shè)備上的位置。而ZFS在數(shù)據(jù)存儲(chǔ)時(shí)會(huì)為每次寫入的數(shù)據(jù)分配適當(dāng)大小的空間,并計(jì)算得到指向子設(shè)備的數(shù)據(jù)指針。這種特性使得RAIDZ缺盤時(shí)無(wú)法直接進(jìn)行校驗(yàn)得到數(shù)據(jù),必須將整個(gè)ZPOOL作為一個(gè)整體進(jìn)行解析。 九、追蹤最新數(shù)據(jù)入口 在ZFS文件系統(tǒng)內(nèi)每次發(fā)生文件系統(tǒng)狀態(tài)更新時(shí)都會(huì)產(chǎn)生新的文件系統(tǒng)入口,所以需要根據(jù)其內(nèi)部記錄的事務(wù)塊獲取最新?tīng)顟B(tài)下的入口指針。手工截取事務(wù)塊數(shù)據(jù),編寫程序獲取最大事務(wù)號(hào)入口: ![]() 獲取到最新?tīng)顟B(tài)的文件系統(tǒng)入口后,編寫數(shù)據(jù)指針解析程序進(jìn)行地址解析: ![]() 獲取到文件系統(tǒng)入口點(diǎn)在各磁盤分布情況后,開(kāi)始手工截取并分析文件系統(tǒng)內(nèi)部結(jié)構(gòu),入口分布所在的磁盤組無(wú)缺失盤,可直接提取信息。根據(jù)ZFS文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)順利找到客戶映射的LUN名稱,進(jìn)而找到其節(jié)點(diǎn)。 十、運(yùn)行提取程序 編輯配置文件,提取ZVOL卷: ![]()
|
|
|
來(lái)自: 北亞數(shù)據(jù)恢復(fù) > 《技術(shù)分享》