linux 數(shù)據(jù)恢復(fù),lvm數(shù)據(jù)恢復(fù)
瀏覽量: 次 發(fā)布日期:2022-01-16 17:54:12
linux 數(shù)據(jù)恢復(fù),lvm數(shù)據(jù)恢復(fù)
數(shù)據(jù)恢復(fù),經(jīng)常是突發(fā)事故響應(yīng)中關(guān)鍵而又耗時(shí)的一步。多數(shù)情況下,工程師往往并非專司數(shù)據(jù)恢復(fù),操作環(huán)境往往是生產(chǎn)環(huán)境,趁手工具難以部署,執(zhí)行操作要遵循種種約束,加之業(yè)務(wù)中斷的壓力。這種情形下,工程師很可能還需要推定數(shù)據(jù)恢復(fù)的結(jié)果/耗時(shí)等信息,提供數(shù)據(jù)供決策者使用。很明顯,如果你準(zhǔn)備考驗(yàn)一下自己的細(xì)致、耐心、知識(shí)和技能,數(shù)據(jù)恢復(fù)將是個(gè)不錯(cuò)的課題。當(dāng)然,有一點(diǎn)是明確的,只是以黑箱方式使用testdisk等工具進(jìn)行數(shù)據(jù)恢復(fù),解決以上問題是不可能的。那么,有沒有其他簡(jiǎn)易方案呢?
這里,我們以一個(gè)實(shí)際的case為例,討論一下,在只使用UNIX常見工具(dd/grep/strace等)的情況下,如何簡(jiǎn)單、快捷的恢復(fù)數(shù)據(jù)。
預(yù)先準(zhǔn)備
工具
我們要用到以下工具
排查和診斷就是數(shù)據(jù)處理
如果對(duì)數(shù)據(jù)處理了解不多,請(qǐng)參考OSEMN
1. obtaining data/獲取數(shù)據(jù)
2. crubbing data/清洗數(shù)據(jù)
3. exploring data/探索數(shù)據(jù)
4. modeling data/建模數(shù)據(jù)
5. interpreting data/解釋數(shù)據(jù)
測(cè)試環(huán)境
使用Virtualbox,基于CentOS/Fedora/debian/Ubuntu搭建Linux實(shí)驗(yàn)環(huán)境。只需要學(xué)會(huì)strace工具和如下系統(tǒng)調(diào)用,就足以追蹤系統(tǒng)如何處理諸如LVM物理卷元數(shù)據(jù)這樣過(guò)的問題。
數(shù)據(jù)恢復(fù)的原理和流程
什么是元數(shù)據(jù)?
我們以大家都熟悉的磁盤作為存儲(chǔ)設(shè)備的例子。
現(xiàn)代操作系統(tǒng)都會(huì)在磁盤上建立多個(gè)分層結(jié)構(gòu)來(lái)管理和控制磁盤。比如,磁盤分區(qū),分區(qū)上建立物理卷,物理卷上建立卷組,卷組上建立邏輯卷,邏輯卷上建立文件系統(tǒng),就是這樣的一個(gè)例子。如果你不熟悉LVM,請(qǐng)參考Logical Volume Manager。
這些分層的結(jié)構(gòu)都是很類似的。以磁盤分區(qū)為例。所謂分區(qū),以大家最為熟悉的MBR: Master Boot Record結(jié)構(gòu)為例。其實(shí)是***個(gè)扇區(qū)記錄了各個(gè)分區(qū)的起始扇區(qū),大小和類型。系統(tǒng)需要時(shí),比如啟動(dòng)過(guò)程中,系統(tǒng)只要從磁盤的***個(gè)扇區(qū)讀取這些數(shù)據(jù)即能拿到各個(gè)分區(qū)的數(shù)據(jù)。
具體看看分區(qū)的數(shù)據(jù)結(jié)構(gòu)。以fdisk為例,分區(qū)的數(shù)據(jù)結(jié)構(gòu)定義為
我們看看具體分區(qū)的例子,驗(yàn)證一下數(shù)據(jù)結(jié)構(gòu)
分區(qū)使得磁盤上的扇區(qū)有了差別。***個(gè)扇區(qū)(其實(shí)其編號(hào)是0),因分區(qū)數(shù)據(jù)記錄其上而扮演特殊角色。明顯,對(duì)系統(tǒng)而言,管理和操作分區(qū)實(shí)際上就是讀寫***扇區(qū)上的對(duì)應(yīng)記錄而已。
類似分區(qū)信息這種系統(tǒng)用以管理某層資源的數(shù)據(jù)就是元數(shù)據(jù)。
系統(tǒng)在磁盤上建立的各個(gè)分層結(jié)構(gòu),都有類似分區(qū)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。以LVM結(jié)構(gòu)為例,我們可以把磁盤記錄和LVM工具報(bào)告的數(shù)據(jù)做一對(duì)比。LVM數(shù)據(jù)的從第2個(gè)扇區(qū)開始,卷組數(shù)據(jù)在第8個(gè)扇區(qū)中,可以用dd命令提取相關(guān)扇區(qū)來(lái)驗(yàn)證LVM的數(shù)據(jù)結(jié)構(gòu)。
下面是一份完整的LVM元數(shù)據(jù)信息,有興趣者可以逐一清點(diǎn)各個(gè)對(duì)象。
元數(shù)據(jù)和數(shù)據(jù):數(shù)據(jù)損壞分類
系統(tǒng)把磁盤的扇區(qū)分成兩種來(lái)支持分區(qū):***扇區(qū)和所有其他非***扇區(qū)。并且在***個(gè)扇區(qū)上記錄分區(qū)信息,即元數(shù)據(jù)。而其他非***扇區(qū)則供分區(qū)層使用,從磁盤的視角看,其他非***扇區(qū)則是數(shù)據(jù)部分。我們逐層考察下磁盤、分區(qū)和LVM結(jié)構(gòu)
系統(tǒng)啟動(dòng)時(shí),會(huì)逐層讀取各層元數(shù)據(jù),創(chuàng)建各層數(shù)據(jù)結(jié)構(gòu)。如果某一層元數(shù)據(jù)損壞或者丟失,那么系統(tǒng)就沒有辦法完成創(chuàng)建各層數(shù)據(jù)結(jié)構(gòu)的任務(wù)。這種情況下,從客戶角度看,很可能就是數(shù)據(jù)損壞了。比如,如果你把***個(gè)扇區(qū)用0覆蓋一遍,那么系統(tǒng)就識(shí)別不到分區(qū)內(nèi)容了。當(dāng)然這種情況下分區(qū)層以上的內(nèi)容,比如物理卷信息,系統(tǒng)也無(wú)法處理了。因此,對(duì)于數(shù)據(jù)恢復(fù)任務(wù)而言,如果元數(shù)據(jù)損壞,則修復(fù)元數(shù)據(jù)總是必須的,而且往往是***步。
當(dāng)然,如果數(shù)據(jù)損壞了,即使元數(shù)據(jù)完好無(wú)缺,那么數(shù)據(jù)也是損壞了。比如,你誤刪了一個(gè)文件,那么,分區(qū)結(jié)構(gòu)再完好對(duì)于文件被刪也于事無(wú)補(bǔ)。
基于以上分析,我們可以把數(shù)據(jù)損壞簡(jiǎn)單分三類類:元數(shù)據(jù)損壞、數(shù)據(jù)損壞或者前面兩種損壞類型的混合型損壞。
元數(shù)據(jù)修復(fù)可以簡(jiǎn)易處理
以基于磁盤的分區(qū)、LVM以及文件系統(tǒng)為例。分層結(jié)構(gòu)的數(shù)據(jù)格式都有嚴(yán)格的格式(比如分區(qū)的數(shù)據(jù)結(jié)構(gòu)就是一個(gè)C的struct),出現(xiàn)位置也固定(有關(guān)分區(qū)的元數(shù)據(jù)記錄在***個(gè)扇區(qū)的446~462字節(jié)之間),而且這些數(shù)據(jù)結(jié)構(gòu)往往都帶有魔數(shù)(比如,分區(qū)的類型83),而且常用的分層結(jié)構(gòu),也不外乎分區(qū)、LVM以及文件系統(tǒng)等幾種。因此,對(duì)于元數(shù)據(jù)以及系統(tǒng)如何處理元數(shù)據(jù),我們都容易追蹤和檢查。因此,可以預(yù)期,修復(fù)元數(shù)據(jù),有簡(jiǎn)易方案。
原理
如果有數(shù)據(jù)損壞,那么除非有日志、備份,或者數(shù)據(jù)本身有邏輯可供使用,否則數(shù)據(jù)是不能恢復(fù)了。比如,通常的文件刪除操作,系統(tǒng)只是解除了文件名稱和文件內(nèi)容相關(guān)間的聯(lián)系而已。文件本身的內(nèi)容還是記錄再磁盤上。這種情況下,只要重建文件名稱和文件內(nèi)容間的聯(lián)系即可恢復(fù)文件。
相對(duì)而言,簡(jiǎn)單情形的是元數(shù)據(jù)損壞。如果只是元數(shù)據(jù)損壞,而且我們知道正確的元數(shù)據(jù)。因?yàn)樵獢?shù)據(jù)操作,不會(huì)觸及數(shù)據(jù)部分,因此,我們只要重建元數(shù)據(jù)部分即可恢復(fù)數(shù)據(jù)。如果涉及到多層,則逐層恢復(fù)即可。以分區(qū)丟失為例。
比如我們有一塊數(shù)據(jù)盤,整盤我們只是用fdisk分了一個(gè)區(qū),現(xiàn)在分區(qū)丟失了。這種情形下,只要用fdsik,按照默認(rèn)情形,重新分區(qū)就能恢復(fù)分區(qū)。
就這種情形,我們給出一個(gè)可用的分析流程。
癥狀和初步排查
客戶反饋
降配重啟后,系統(tǒng)無(wú)法啟動(dòng)
排查發(fā)現(xiàn)客戶一邏輯卷無(wú)法掛載導(dǎo)致重啟失敗。在/etc/fstab中注釋掉邏輯卷的掛載配置,系統(tǒng)啟動(dòng)成功。
但是客戶的邏輯卷上有重要數(shù)據(jù)。此邏輯卷在數(shù)據(jù)盤上,數(shù)據(jù)盤大小是2TB。此磁盤全部2TB全部分配給一個(gè)分區(qū),此分區(qū)上創(chuàng)建有LVM結(jié)構(gòu)。
分區(qū)數(shù)據(jù)如下
初步排查
首先確定分區(qū)上是否有數(shù)據(jù),通過(guò)查看一些扇區(qū),我們就會(huì)有很大的概率確認(rèn)這一點(diǎn)。當(dāng)然也可以逐扇區(qū)確認(rèn)。
逐扇區(qū)確認(rèn),可以用如下命令辦理。假設(shè)磁盤是/dev/vdb。
當(dāng)然,也可以通過(guò)抽樣檢查來(lái)確認(rèn)。這種方法通常是檢查磁盤分區(qū)的前面一部分扇區(qū)。比如,下面的例子,通過(guò)檢查前面幾十個(gè)扇區(qū),我們可以確認(rèn)磁盤上確有數(shù)據(jù)。
接下來(lái)使用testdisk工具恢復(fù)數(shù)據(jù)。嘗試數(shù)次,testdisk工具總是在掃描到2%時(shí)停滯,處理過(guò)程不能繼續(xù)。
初次恢復(fù)嘗試
分區(qū)還在,但是LVM結(jié)構(gòu)丟失,經(jīng)檢查,由LVM工具鏈維護(hù)的備份數(shù)據(jù)/etc/lvm/backup/vg_xxxxxx文件還在。因此,這種情形下,按照我們的恢復(fù)流程,只要在分區(qū)之上,嘗試重建LVM和文件系統(tǒng),應(yīng)該就可以解決問題。
根據(jù)備份數(shù)據(jù)恢復(fù)LVM結(jié)構(gòu),可以參考Recovering Physical Volume Metadata。可惜的是,我們***步就折戟沉沙了。
看樣子,分區(qū)的數(shù)據(jù)有些地方出錯(cuò)了。根據(jù)上面命令報(bào)錯(cuò)的信息,對(duì)比LVM的備份數(shù)據(jù)和分區(qū)數(shù)據(jù),很快我們就發(fā)現(xiàn)了問題?,F(xiàn)有分區(qū)記錄的其擁有的扇區(qū)數(shù)目,少于其上LVM卷組記錄的扇區(qū)數(shù)量。
問題出在哪里?
因?yàn)榉N種原因,我們不能確認(rèn)分區(qū)信息和LVM備份數(shù)據(jù)為何不一致。但是,我們可以進(jìn)一步從磁盤上提取、分析數(shù)據(jù)。因?yàn)橛嘘P(guān)分區(qū)的元數(shù)據(jù)在(分區(qū)在),所以我們進(jìn)一步檢查磁盤上還有沒有有關(guān)LVM的元數(shù)據(jù)?這只要使用下面的命令行
結(jié)果及其結(jié)果分析如下
所以,磁盤上還有有關(guān)LVM的元數(shù)據(jù),但是為什么系統(tǒng)沒有憑借這些數(shù)據(jù)構(gòu)建出LVM結(jié)構(gòu)呢?我們創(chuàng)建一個(gè)測(cè)試環(huán)境,用strace追蹤下系統(tǒng)處理LVM物理卷元數(shù)據(jù)的執(zhí)行路徑。如下命令即可
當(dāng)然,更好的辦法是把strace記錄放置到文件中,以備仔細(xì)檢查
我們組合使用strace和grep命令來(lái)確認(rèn)系統(tǒng)默認(rèn)的LVM物理卷位置。如果你沒有耐心分析下面的數(shù)據(jù),請(qǐng)?zhí)^(guò)直接看后面的截圖
數(shù)據(jù)清洗結(jié)果如下。如果沒有耐心分析,請(qǐng)?zhí)^(guò)直接看下面的分析截圖
很明顯,系統(tǒng)預(yù)期LVM元數(shù)據(jù)是在分區(qū)的第8個(gè)扇區(qū),但是在需要做數(shù)據(jù)恢復(fù)的磁盤上,LVM的元數(shù)據(jù)卻是在第71個(gè)扇區(qū),而分區(qū)的起始扇區(qū)是2048,因此,LVM數(shù)據(jù)根本不在分區(qū)內(nèi)。這就是為什么磁盤上還有LVM元數(shù)據(jù),系統(tǒng)卻沒有識(shí)別出來(lái)LVM的原因。
既然系統(tǒng)是因?yàn)橛嘘P(guān)LVM的元數(shù)據(jù)所在扇區(qū)不對(duì)而導(dǎo)致系統(tǒng)無(wú)法識(shí)別LVM結(jié)構(gòu),設(shè)想通過(guò)重新分區(qū),我們把有關(guān)LVM元數(shù)據(jù)調(diào)整到分區(qū)的第8個(gè)扇區(qū)。稍加計(jì)算,就會(huì)發(fā)現(xiàn),只要把分區(qū)的起始扇區(qū)從第2048個(gè)扇區(qū)調(diào)整到第63個(gè)扇區(qū)即可。不僅如此,通過(guò)調(diào)整分區(qū)大小,我們同樣也解決了磁盤分區(qū)扇區(qū)數(shù)不足的問題
數(shù)據(jù)恢復(fù)
較新的fdisk工具,不允許起始扇區(qū)小于2048,因此,我們用parted工具來(lái)調(diào)整分區(qū)的起始扇區(qū)。
調(diào)整過(guò)程是先刪掉扇區(qū),而后再創(chuàng)建之。而結(jié)果正如我們所預(yù)期的,分區(qū)調(diào)整完成,客戶的數(shù)據(jù)立刻恢復(fù)了。物理卷、卷組、邏輯卷、文件系統(tǒng)以及數(shù)據(jù),都完好無(wú)損。
結(jié)語(yǔ)
從處理這個(gè)實(shí)際case可以看出,如果知道如何識(shí)別各層元數(shù)據(jù),比如分區(qū),LVM和文件系統(tǒng);能夠追蹤系統(tǒng)處理各層元數(shù)據(jù)的邏輯,那么,組合使用UNIX常用的dd、od等工具,足以簡(jiǎn)單有效的處理元數(shù)據(jù)損壞的情形,快速恢復(fù)數(shù)據(jù)。如果掌握了常見的系統(tǒng)調(diào)用,并且掌握了strace工具,那么對(duì)于如何識(shí)別元數(shù)據(jù)以及系統(tǒng)如何處理元數(shù)據(jù),完全可以通過(guò)簡(jiǎn)單分析strace輸出拿到相應(yīng)答案。
Linux 分區(qū)加密luks和開機(jī)自動(dòng)掛載
如果重新分區(qū)需要把分區(qū)表的變化信息通知到系統(tǒng)內(nèi)核(立即生效)
partprobe /dev/sdb
cryptsetup luksFormat /dev/sdb1 加密磁盤
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES 大寫YES 接下來(lái)輸入兩次同樣的密碼。
Enter LUKS passphrase:
Verify passphrase:
Command successful.
cryptsetup luksOpen /dev/sdb1 MyData 解密磁盤,并給予一個(gè)別名
mkfs.ext4 /dev/mapper/MyData 格式化
mkdir /MntData 新建目錄
mount /dev/mapper/MyData /MntData 掛載使用
umount /dev/mapper/yuhna 卸載
cryptsetup luksClose MyData 關(guān)閉加密設(shè)備
開機(jī)自動(dòng)掛載
touch /MntData/crytpasswd 新建
cryptsetup luksAddKey /dev/sdb1 /MntData/crytpasswd 添加密鑰文件
Enter any passphrase: 輸入密碼:要輸入兩次
vim /etc/fstab
dev/mapper/MyData /MntData ext4 defaults 0 0
vim /etc/crypttab
MyData /dev/sdb1 這里可以不加為空
MyData為映射名稱,/dev/sdb1是加密設(shè)備設(shè)備,/MntData/cryptpasswd為密碼文件,如果想開機(jī)手動(dòng)輸入密碼,密碼文件處空著即可.最好不要加上讓開機(jī)輸入密碼最好。
cryptsetup luksRemoveKey /dev/vda8 移除密碼
cryptsetup luksAddKey /dev/vda8 添加密碼
cryptsetup luksChangeKey /dev/vda8 修改密碼
. linux數(shù)據(jù)恢復(fù) rm rf,Liux系統(tǒng)下rm -rf誤刪數(shù)據(jù)恢復(fù)指南
. linux數(shù)據(jù)恢復(fù)公司 海南,Liux數(shù)據(jù)恢復(fù)公司海南
. linux數(shù)據(jù)恢復(fù)案例,Liux數(shù)據(jù)恢復(fù)案例
. linux數(shù)據(jù)恢復(fù)公司,為什么選擇Liux數(shù)據(jù)恢復(fù)公司?
. linux數(shù)據(jù)恢復(fù)案例,Liux數(shù)據(jù)恢復(fù)案例
. linux數(shù)據(jù)恢復(fù)教程,Liux數(shù)據(jù)恢復(fù)教程
. linux數(shù)據(jù)恢復(fù)軟件,Liux數(shù)據(jù)恢復(fù)軟件:恢復(fù)你丟失的重要文件
. linux數(shù)據(jù)恢復(fù)公司 海南,海南Liux數(shù)據(jù)恢復(fù)公司介紹
. linux數(shù)據(jù)恢復(fù)命令,Liux數(shù)據(jù)恢復(fù)命令
. linux數(shù)據(jù)恢復(fù)公司,專業(yè)的數(shù)據(jù)恢復(fù)技術(shù)
. linux數(shù)據(jù)恢復(fù)工具,Liux數(shù)據(jù)恢復(fù)工具
. linux數(shù)據(jù)恢復(fù)大師,Liux數(shù)據(jù)恢復(fù)大師
. linux數(shù)據(jù)恢復(fù)公司,Liux數(shù)據(jù)恢復(fù)公司:專業(yè)救援您的數(shù)據(jù)
. linux數(shù)據(jù)恢復(fù)公司 海南,Liux數(shù)據(jù)恢復(fù)公司海南:專業(yè)技術(shù)支持您的數(shù)據(jù)安全
. linux數(shù)據(jù)恢復(fù)軟件,Liux數(shù)據(jù)恢復(fù)軟件:恢復(fù)你丟失的文件
. linux數(shù)據(jù)恢復(fù) rm rf,Liux數(shù)據(jù)恢復(fù) rm rf