Linux存儲入門:簡易數(shù)據(jù)恢復(fù)方案--分區(qū)和LVM實戰(zhàn)

摘要:以黑箱方式完全依賴工具來進(jìn)行數(shù)據(jù)恢復(fù)押桃,所需時間和恢復(fù)的結(jié)果都難以估計。以專家或者專業(yè)方式進(jìn)行數(shù)據(jù)恢復(fù)导犹,技能和成本又太高唱凯。那么羡忘,數(shù)據(jù)恢復(fù)有沒有較為合適的簡易方案呢?我們以處理過的實際案例作答磕昼。

數(shù)據(jù)恢復(fù)有沒有簡易方案卷雕?

IT工程師一般都知道如何操作和使用文件和目錄。但是票从,對于系統(tǒng)如何構(gòu)建出漫雕、抽象出文件和目錄,一般就不熟悉了峰鄙。至于更下層的概念浸间,可能大家知道最多的就是驅(qū)動了。所以吟榴,為了規(guī)避這點魁蒜,可行的簡易方案之一,就是以黑箱方式使用testdisk等工具吩翻,在我們在對底層了解不多甚至一無所知的情況下兜看,進(jìn)行數(shù)據(jù)恢復(fù)(商業(yè)工具,恢復(fù)效果估計更好狭瞎,當(dāng)然商業(yè)工具的價格也更好)细移。但是,對于工程師而言脚作,多數(shù)時候葫哗,僅僅以黑箱方式依賴某些工具進(jìn)行數(shù)據(jù)恢復(fù)是不夠的。

數(shù)據(jù)恢復(fù)球涛,經(jīng)常是突發(fā)事故響應(yīng)中關(guān)鍵而又耗時的一步劣针。多數(shù)情況下,工程師往往并非專司數(shù)據(jù)恢復(fù)亿扁,操作環(huán)境往往是生產(chǎn)環(huán)境捺典,趁手工具難以部署,執(zhí)行操作要遵循種種約束从祝,加之業(yè)務(wù)中斷的壓力襟己。這種情形下,工程師很可能還需要推定數(shù)據(jù)恢復(fù)的結(jié)果/耗時等信息牍陌,提供數(shù)據(jù)供決策者使用擎浴。很明顯,如果你準(zhǔn)備考驗一下自己的細(xì)致毒涧、耐心贮预、知識和技能,數(shù)據(jù)恢復(fù)將是個不錯的課題。當(dāng)然仿吞,有一點是明確的滑频,只是以黑箱方式使用testdisk等工具進(jìn)行數(shù)據(jù)恢復(fù),解決以上問題是不可能的唤冈。那么峡迷,有沒有其他簡易方案呢?

這里你虹,我們以一個實際的case為例绘搞,討論一下,在只使用UNIX常見工具(dd/grep/strace等)的情況下售葡,如何簡單看杭、快捷的恢復(fù)數(shù)據(jù)。

預(yù)先準(zhǔn)備

工具

我們要用到以下工具

工具功能示例

bc計算器echo 'ibase=2^3;i=0107000;ibase=2^3+2;i/512' | bc -l

dd檢查或者拷貝磁盤/分區(qū)的內(nèi)容挟伙,可以是幾個扇區(qū)楼雹,也可以是幾個字節(jié)dd if=/dev/sdb bs=1 count=64 skip=64 2>/dev/null | od -v -tx1

grep搜索制定字符串

od把二進(jìn)制內(nèi)容以ASCII或者16進(jìn)制顯示出來,搭配dd使用可以代替二進(jìn)制編輯器dd if=/dev/sdb bs=1 count=64 skip=64 2>/dev/null | od -v -tx1

strace追蹤應(yīng)用的執(zhí)行路徑和對數(shù)據(jù)處理的流程strace ps

排查和診斷就是數(shù)據(jù)處理

如果對數(shù)據(jù)處理了解不多尖阔,請參考OSEMN

obtaining data/獲取數(shù)據(jù)

crubbing data/清洗數(shù)據(jù)

exploring data/探索數(shù)據(jù)

modeling data/建模數(shù)據(jù)

interpreting data/解釋數(shù)據(jù)

測試環(huán)境

使用Virtualbox贮缅,基于CentOS/Fedora/debian/Ubuntu搭建Linux實驗環(huán)境。只需要學(xué)會strace工具和如下系統(tǒng)調(diào)用介却,就足以追蹤系統(tǒng)如何處理諸如LVM物理卷元數(shù)據(jù)這樣過的問題谴供。

name功能

open打開一個文件,返回一個文件描述符供后續(xù)讀寫操作使用

dup/dup2復(fù)制文件描述符

lseek將讀寫指針移動到指定位置齿坷,后續(xù)操作從此指定位置讀寫

close關(guān)閉文件描述符

read讀操作

數(shù)據(jù)恢復(fù)的原理和流程

什么是元數(shù)據(jù)桂肌?

我們以大家都熟悉的磁盤作為存儲設(shè)備的例子。

現(xiàn)代操作系統(tǒng)都會在磁盤上建立多個分層結(jié)構(gòu)來管理和控制磁盤永淌。比如崎场,磁盤分區(qū),分區(qū)上建立物理卷遂蛀,物理卷上建立卷組谭跨,卷組上建立邏輯卷,邏輯卷上建立文件系統(tǒng)李滴,就是這樣的一個例子螃宙。如果你不熟悉LVM,請參考Logical Volume Manager所坯。

這些分層的結(jié)構(gòu)都是很類似的谆扎。以磁盤分區(qū)為例。所謂分區(qū)芹助,以大家最為熟悉的MBR: Master Boot Record結(jié)構(gòu)為例燕酷。其實是第一個扇區(qū)記錄了各個分區(qū)的起始扇區(qū)籍凝,大小和類型。系統(tǒng)需要時苗缩,比如啟動過程中,系統(tǒng)只要從磁盤的第一個扇區(qū)讀取這些數(shù)據(jù)即能拿到各個分區(qū)的數(shù)據(jù)声诸。

具體看看分區(qū)的數(shù)據(jù)結(jié)構(gòu)酱讶。以fdisk為例,分區(qū)的數(shù)據(jù)結(jié)構(gòu)定義為

structdos_partition {unsignedcharboot_ind;/* 0x80 - active */unsignedcharbh, bs, bc;/* begin CHS */unsignedcharsys_ind;unsignedchareh, es, ec;/* end CHS */unsignedcharstart_sect[4];/* 分區(qū)開始扇區(qū) */unsignedcharnr_sects[4];/* 分區(qū)包含的扇區(qū)數(shù)量 */} __attribute__((packed));

我們看看具體分區(qū)的例子彼乌,驗證一下數(shù)據(jù)結(jié)構(gòu)

分區(qū)使得磁盤上的扇區(qū)有了差別泻肯。第一個扇區(qū)(其實其編號是0),因分區(qū)數(shù)據(jù)記錄其上而扮演特殊角色慰照。明顯灶挟,對系統(tǒng)而言,管理和操作分區(qū)實際上就是讀寫第一扇區(qū)上的對應(yīng)記錄而已毒租。

類似分區(qū)信息這種系統(tǒng)用以管理某層資源的數(shù)據(jù)就是元數(shù)據(jù)稚铣。

系統(tǒng)在磁盤上建立的各個分層結(jié)構(gòu),都有類似分區(qū)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)墅垮。以LVM結(jié)構(gòu)為例惕医,我們可以把磁盤記錄和LVM工具報告的數(shù)據(jù)做一對比。LVM數(shù)據(jù)的從第2個扇區(qū)開始算色,卷組數(shù)據(jù)在第8個扇區(qū)中抬伺,可以用dd命令提取相關(guān)扇區(qū)來驗證LVM的數(shù)據(jù)結(jié)構(gòu)。

下面是一份完整的LVM元數(shù)據(jù)信息灾梦,有興趣者可以逐一清點各個對象峡钓。

[root@pusf ~]# pvdisplay;vgdisplay;lvdisplay--- Physical volume ---? PV Name? ? ? ? ? ? ? /dev/sda2? VG Name? ? ? ? ? ? ? cl? PV Size39.00GiB /notusable3.00MiB? AllocatableyesPE Size4.00MiB? Total PE9983Free PE1Allocated PE9982PV UUID? ? ? ? ? ? ? TIcs1T-Jksu-HKrn-fKqK-QF4K-ao1S-3PVBGI? --- Volume group ---? VG Name? ? ? ? ? ? ? cl? System ID? Format? ? ? ? ? ? ? ? lvm2? Metadata Areas1Metadata Sequence No5VG Access? ? ? ? ? ? read/write? VG Status? ? ? ? ? ? resizable? MAX LV0Cur LV2Open LV2Max PV0Cur PV1Act PV1VG Size39.00GiB? PE Size4.00MiB? Total PE9983Alloc PE / Size9982/38.99GiB? Free? PE / Size1/4.00MiB? VG UUID? ? ? ? ? ? ? KTVFwl-2QRE-ehf3-3dJb-bIfG-bpn0-8FnH7l? --- Logical volume ---? LV Path? ? ? ? ? ? ? ? /dev/cl/swap? LV Name? ? ? ? ? ? ? ? swap? VG Name? ? ? ? ? ? ? ? cl? LV UUID? ? ? ? ? ? ? ? Kc14dR-vFda-qdWJ-zUYo-lsDl-4oKq-RjjrBb? LV Write Access? ? ? ? read/write? LV Creation host, time localhost,2017-04-1813:23:08+0800LV Status? ? ? ? ? ? ? available# open? ? ? ? ? ? ? ? 2LV Size2.00GiB? Current LE512Segments1Allocation? ? ? ? ? ? inherit? Read ahead sectors? ? auto? - currently setto8192Block device253:1--- Logical volume ---? LV Path? ? ? ? ? ? ? ? /dev/cl/root? LV Name? ? ? ? ? ? ? ? root? VG Name? ? ? ? ? ? ? ? cl? LV UUID? ? ? ? ? ? ? ? PWaI2g-t2Kq-h3aa-HgMC-cBp1-FjBp-dmaGeR? LV Write Access? ? ? ? read/write? LV Creation host, time localhost,2017-04-1813:23:09+0800LV Status? ? ? ? ? ? ? available# open? ? ? ? ? ? ? ? 1LV Size36.99GiB? Current LE9470Segments1Allocation? ? ? ? ? ? inherit? Read ahead sectors? ? auto? - currently setto8192Block device253:0[root@pusf ~]# dd if=/dev/sda2 bs=512 count=16 skip=1 2>/dev/null | od -tc0000000L? A? B? E? L? O? N? E001\0\0\0\0\0\0\00000020270177251K\0\0\0L? V? M20010000040T? I? c? s1T? J? k? s? u? H? K? r? n? f? K0000060q? K? Q? F4K? a? o1S3P? V? B? G? I0000100\0\0360277\t\0\0\0\0\0020\0\0\0\0\00000120\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\00000140\0\0\0\0\0\0\0\0\0020\0\0\0\0\0\00000160\0360017\0\0\0\0\0\0\0\0\0\0\0\0\00000200\0\0\0\0\0\0\0\0002\0\0\0001\0\0\00000220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*0007000252314344w? ? ? L? V? M2x? [5A? %? r00070200N? *? >001\0\0\0\0020\0\0\0\0\0\00007040\0360017\0\0\0\0\0\0026\0\0\0\0\0\00007060027005\0\0\0\0\0\0026G205374\0\0\0\00007100\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*0010000c? l? ? ? {\ni? d? ? ? ="? K? T? V? F? w

0010020? l? -? 2? Q? R? E? -? e? h? f? 3? -? 3? d? J? b

0010040? -? b? I? f? G? -? b? p? n? 0? -? 8? F? n? H? 7

0010060? l? "\ns? e? q? n? o? ? ? =1\nf? o? r0010100m? a? t? ? ? ="? l? v? m? 2? "\ns? t? a0010120t? u? s? ? ? =? ? ? ["? R? E? S? I? Z? E? A? B

0010140? L? E? ","? R? E? A? D? ","? W? R

0010160? I? T? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0010200\ne? x? t? e? n? t? _? s? i? z? e? ? ? =80010220192\nm? a? x? _? l? v? ? ? =0\nm0010240a? x? _? p? v? ? ? =0\nm? e? t? a? d? a0010260t? a? _? c? o? p? i? e? s? ? ? =0\n\np0010300h? y? s? i? c? a? l? _? v? o? l? u? m? e? s0010320{\n\np? v0{\ni? d? ? ? ="? T

0010340? I? c? s? 1? T? -? J? k? s? u? -? H? K? r? n? -

0010360? f? K? q? K? -? Q? F? 4? K? -? a? o? 1? S? -? 3

0010400? P? V? B? G? I? "\nd? e? v? i? c? e? ? ? =0010420"? /? d? e? v? /? s? d? a? 2? "\n\ns? t? a0010440t? u? s? ? ? =? ? ? ["? A? L? L? O? C? A? T? A

0010460? B? L? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0010500\nd? e? v? _? s? i? z? e? ? ? =817800105206880\np? e? _? s? t? a? r? t? ? ? =00105402048\np? e? _? c? o? u? n? t? ? ? =00105609983\n}\n}\n\n\n}\n#? ? ? G0010600e? n? e? r? a? t? e? d? ? ? b? y? ? ? L? V? M20010620v? e? r? s? i? o? n2.02.1600106406(2)? -? R? H? E? L7(20160010660-09-28)? :? ? ? T? u? e? ? ? A? p? r00107001805:23:0820100107207\n\nc? o? n? t? e? n? t? s? ? ? ="? T

0010740? e? x? t? ? ? F? o? r? m? a? t? ? ? V? o? l? u? m

0010760? e? ? ? G? r? o? u? p? "\nv? e? r? s? i? o? n0011000=1\n\nd? e? s? c? r? i? p? t? i? o0011020n? ? ? ="? "\n\nc? r? e? a? t? i? o? n0011040_? h? o? s? t? ? ? ="? l? o? c? a? l? h? o

0011060? s? t? "\t#? ? ? L? i? n? u? x? ? ? l? o? c? a0011100l? h? o? s? t3.10.0-5140011120.? e? l7.? x86_64#? 1? ? ? S0011140M? P? ? ? T? u? e? ? ? N? o? v22160011160:42:41U? T? C20160011200x86_64\nc? r? e? a? t? i? o? n? _0011220t? i? m? e? ? ? =14924929800112408\t#? ? ? T? u? e? ? ? A? p? r? ? ? 1? 8? ? ? 000112605:23:082017\n\n\0\00011300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*0012000c? l? ? ? {\ni? d? ? ? ="? K? T? V? F? w

0012020? l? -? 2? Q? R? E? -? e? h? f? 3? -? 3? d? J? b

0012040? -? b? I? f? G? -? b? p? n? 0? -? 8? F? n? H? 7

0012060? l? "\ns? e? q? n? o? ? ? =2\nf? o? r0012100m? a? t? ? ? ="? l? v? m? 2? "\ns? t? a0012120t? u? s? ? ? =? ? ? ["? R? E? S? I? Z? E? A? B

0012140? L? E? ","? R? E? A? D? ","? W? R

0012160? I? T? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0012200\ne? x? t? e? n? t? _? s? i? z? e? ? ? =80012220192\nm? a? x? _? l? v? ? ? =0\nm0012240a? x? _? p? v? ? ? =0\nm? e? t? a? d? a0012260t? a? _? c? o? p? i? e? s? ? ? =0\n\np0012300h? y? s? i? c? a? l? _? v? o? l? u? m? e? s0012320{\n\np? v0{\ni? d? ? ? ="? T

0012340? I? c? s? 1? T? -? J? k? s? u? -? H? K? r? n? -

0012360? f? K? q? K? -? Q? F? 4? K? -? a? o? 1? S? -? 3

0012400? P? V? B? G? I? "\nd? e? v? i? c? e? ? ? =0012420"? /? d? e? v? /? s? d? a? 2? "\n\ns? t? a0012440t? u? s? ? ? =? ? ? ["? A? L? L? O? C? A? T? A

0012460? B? L? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0012500\nd? e? v? _? s? i? z? e? ? ? =817800125206880\np? e? _? s? t? a? r? t? ? ? =00125402048\np? e? _? c? o? u? n? t? ? ? =00125609983\n}\n}\n\nl? o? g? i? c? a0012600l? _? v? o? l? u? m? e? s? ? ? {\n\ns? w? a0012620p? ? ? {\ni? d? ? ? ="? K? c? 1? 4? d? R

0012640? -? v? F? d? a? -? q? d? W? J? -? z? U? Y? o? -

0012660? l? s? D? l? -? 4? o? K? q? -? R? j? j? r? B? b

0012700? "\ns? t? a? t? u? s? ? ? =? ? ? ["? R? E? A

0012720? D? ","? W? R? I? T? E? ","? V? I

0012740? S? I? B? L? E? "]\nf? l? a? g? s? ? ? =0012760[? ]\nc? r? e? a? t? i? o? n? _? t? i? m? e0013000=1492492988\nc? r0013020e? a? t? i? o? n? _? h? o? s? t? ? ? ="? l

0013040? o? c? a? l? h? o? s? t? "\ns? e? g? m? e? n0013060t? _? c? o? u? n? t? ? ? =1\n\ns? e? g0013100m? e? n? t1{\ns? t? a? r? t? _? e? x0013120t? e? n? t? ? ? =0\ne? x? t? e? n? t? _0013140c? o? u? n? t? ? ? =512\n\nt? y? p0013160e? ? ? ="? s? t? r? i? p? e? d? "\ns? t0013200r? i? p? e? _? c? o? u? n? t? ? ? =1\n\n0013220s? t? r? i? p? e? s? ? ? =? ? ? [\n"? p? v? 0

0013240? ",0\n]\n}\n}\n}\n\n}\n0013260#? ? ? G? e? n? e? r? a? t? e? d? ? ? b? y? ? ? L0013300V? M2v? e? r? s? i? o? n2.020013320.166(2)? -? R? H? E? L7(20013340016-09-28)? :? ? ? T? u? e0013360A? p? r1805:23:0800134002017\n\nc? o? n? t? e? n? t? s? ? ? =0013420"? T? e? x? t? ? ? F? o? r? m? a? t? ? ? V? o

0013440? l? u? m? e? ? ? G? r? o? u? p? "\nv? e? r? s0013460i? o? n? ? ? =1\n\nd? e? s? c? r? i? p0013500t? i? o? n? ? ? ="? "\n\nc? r? e? a? t0013520i? o? n? _? h? o? s? t? ? ? ="? l? o? c? a

0013540? l? h? o? s? t? "\t#? ? ? L? i? n? u? x? ? ? l0013560o? c? a? l? h? o? s? t3.10.0-0013600514.? e? l7.? x86_64#00136201S? M? P? ? ? T? u? e? ? ? N? o? v22001364016:42:41U? T? C20001366016x86_64\nc? r? e? a? t? i0013700o? n? _? t? i? m? e? ? ? =14924900137202988\t#? ? ? T? u? e? ? ? A? p? r? ? ? 10013740805:23:082017\n0013760\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\00014000c? l? ? ? {\ni? d? ? ? ="? K? T? V? F? w

0014020? l? -? 2? Q? R? E? -? e? h? f? 3? -? 3? d? J? b

0014040? -? b? I? f? G? -? b? p? n? 0? -? 8? F? n? H? 7

0014060? l? "\ns? e? q? n? o? ? ? =3\nf? o? r0014100m? a? t? ? ? ="? l? v? m? 2? "\ns? t? a0014120t? u? s? ? ? =? ? ? ["? R? E? S? I? Z? E? A? B

0014140? L? E? ","? R? E? A? D? ","? W? R

0014160? I? T? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0014200\ne? x? t? e? n? t? _? s? i? z? e? ? ? =80014220192\nm? a? x? _? l? v? ? ? =0\nm0014240a? x? _? p? v? ? ? =0\nm? e? t? a? d? a0014260t? a? _? c? o? p? i? e? s? ? ? =0\n\np0014300h? y? s? i? c? a? l? _? v? o? l? u? m? e? s0014320{\n\np? v0{\ni? d? ? ? ="? T

0014340? I? c? s? 1? T? -? J? k? s? u? -? H? K? r? n? -

0014360? f? K? q? K? -? Q? F? 4? K? -? a? o? 1? S? -? 3

0014400? P? V? B? G? I? "\nd? e? v? i? c? e? ? ? =0014420"? /? d? e? v? /? s? d? a? 2? "\n\ns? t? a0014440t? u? s? ? ? =? ? ? ["? A? L? L? O? C? A? T? A

0014460? B? L? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0014500\nd? e? v? _? s? i? z? e? ? ? =817800145206880\np? e? _? s? t? a? r? t? ? ? =00145402048\np? e? _? c? o? u? n? t? ? ? =00145609983\n}\n}\n\nl? o? g? i? c? a0014600l? _? v? o? l? u? m? e? s? ? ? {\n\ns? w? a0014620p? ? ? {\ni? d? ? ? ="? K? c? 1? 4? d? R

0014640? -? v? F? d? a? -? q? d? W? J? -? z? U? Y? o? -

0014660? l? s? D? l? -? 4? o? K? q? -? R? j? j? r? B? b

0014700? "\ns? t? a? t? u? s? ? ? =? ? ? ["? R? E? A

0014720? D? ","? W? R? I? T? E? ","? V? I

0014740? S? I? B? L? E? "]\nf? l? a? g? s? ? ? =0014760[? ]\nc? r? e? a? t? i? o? n? _? t? i? m? e0015000=1492492988\nc? r0015020e? a? t? i? o? n? _? h? o? s? t? ? ? ="? l

0015040? o? c? a? l? h? o? s? t? "\ns? e? g? m? e? n0015060t? _? c? o? u? n? t? ? ? =1\n\ns? e? g0015100m? e? n? t1{\ns? t? a? r? t? _? e? x0015120t? e? n? t? ? ? =0\ne? x? t? e? n? t? _0015140c? o? u? n? t? ? ? =512\n\nt? y? p0015160e? ? ? ="? s? t? r? i? p? e? d? "\ns? t0015200r? i? p? e? _? c? o? u? n? t? ? ? =1\n\n0015220s? t? r? i? p? e? s? ? ? =? ? ? [\n"? p? v? 0

0015240? ",0\n]\n}\n}\n\nr? o? o? t0015260{\ni? d? ? ? ="? P? W? a? I? 2? g? -

0015300? t? 2? K? q? -? h? 3? a? a? -? H? g? M? C? -? c

0015320? B? p? 1? -? F? j? B? p? -? d? m? a? G? e? R? "0015340\ns? t? a? t? u? s? ? ? =? ? ? ["? R? E? A? D

0015360? ","? W? R? I? T? E? ","? V? I? S

0015400? I? B? L? E? "]\nf? l? a? g? s? ? ? =? ? ? [0015420]\nc? r? e? a? t? i? o? n? _? t? i? m? e0015440=1492492989\nc? r? e0015460a? t? i? o? n? _? h? o? s? t? ? ? ="? l? o

0015500? c? a? l? h? o? s? t? "\ns? e? g? m? e? n? t0015520_? c? o? u? n? t? ? ? =1\n\ns? e? g? m0015540e? n? t1{\ns? t? a? r? t? _? e? x? t0015560e? n? t? ? ? =0\ne? x? t? e? n? t? _? c0015600o? u? n? t? ? ? =9470\n\nt? y? p0015620e? ? ? ="? s? t? r? i? p? e? d? "\ns? t0015640r? i? p? e? _? c? o? u? n? t? ? ? =1\n\n0015660s? t? r? i? p? e? s? ? ? =? ? ? [\n"? p? v? 0

0015700? ",512\n]\n}\n}\n}\n\n0015720}\n#? ? ? G? e? n? e? r? a? t? e? d? ? ? b? y0015740L? V? M2v? e? r? s? i? o? n2.001576002.166(2)? -? R? H? E? L70016000(2016-09-28)? :? ? ? T? u0016020e? ? ? A? p? r1805:23:0001604092017\n\nc? o? n? t? e? n? t? s0016060="? T? e? x? t? ? ? F? o? r? m? a? t

0016100? V? o? l? u? m? e? ? ? G? r? o? u? p? "\nv? e0016120r? s? i? o? n? ? ? =1\n\nd? e? s? c? r0016140i? p? t? i? o? n? ? ? ="? "\n\nc? r? e0016160a? t? i? o? n? _? h? o? s? t? ? ? ="? l? o

0016200? c? a? l? h? o? s? t? "\t#? ? ? L? i? n? u? x0016220l? o? c? a? l? h? o? s? t3.10.00162400-514.? e? l7.? x86_640016260#? 1? ? ? S? M? P? ? ? T? u? e? ? ? N? o? v00163002216:42:41U? T? C00163202016x86_64\nc? r? e? a0016340t? i? o? n? _? t? i? m? e? ? ? =14920016360492989\t#? ? ? T? u? e? ? ? A? p? r00164001805:23:0920100164207\n\n\0\0\0\0\0\0\0\0\0\0\0\0\00016440\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*0017000c? l? ? ? {\ni? d? ? ? ="? K? T? V? F? w

0017020? l? -? 2? Q? R? E? -? e? h? f? 3? -? 3? d? J? b

0017040? -? b? I? f? G? -? b? p? n? 0? -? 8? F? n? H? 7

0017060? l? "\ns? e? q? n? o? ? ? =4\nf? o? r0017100m? a? t? ? ? ="? l? v? m? 2? "\ns? t? a0017120t? u? s? ? ? =? ? ? ["? R? E? S? I? Z? E? A? B

0017140? L? E? ","? R? E? A? D? ","? W? R

0017160? I? T? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0017200\ne? x? t? e? n? t? _? s? i? z? e? ? ? =80017220192\nm? a? x? _? l? v? ? ? =0\nm0017240a? x? _? p? v? ? ? =0\nm? e? t? a? d? a0017260t? a? _? c? o? p? i? e? s? ? ? =0\n\np0017300h? y? s? i? c? a? l? _? v? o? l? u? m? e? s0017320{\n\np? v0{\ni? d? ? ? ="? T

0017340? I? c? s? 1? T? -? J? k? s? u? -? H? K? r? n? -

0017360? f? K? q? K? -? Q? F? 4? K? -? a? o? 1? S? -? 3

0017400? P? V? B? G? I? "\nd? e? v? i? c? e? ? ? =0017420"? /? d? e? v? /? s? d? a? 2? "\n\ns? t? a0017440t? u? s? ? ? =? ? ? ["? A? L? L? O? C? A? T? A

0017460? B? L? E? "]\nf? l? a? g? s? ? ? =? ? ? [? ]0017500\nd? e? v? _? s? i? z? e? ? ? =817800175206880\np? e? _? s? t? a? r? t? ? ? =00175402048\np? e? _? c? o? u? n? t? ? ? =00175609983\n}\n\np? v1{\ni? d0017600="? R? c? p? o? 7? Z? -? Q? I? e? g? -

0017620? F? G? V? D? -? T? S? Z? I? -? s? o? Q? O? -? I

0017640? g? a? T? -? r? Q? w? D? 4? Y? "\nd? e? v? i0017660c? e? ? ? ="? /? d? e? v? /? s? d? b? 6? "0017700\n\ns? t? a? t? u? s? ? ? =? ? ? ["? A? L? L

0017720? O? C? A? T? A? B? L? E? "]\nf? l? a? g? s0017740=? ? ? [? ]\nd? e? v? _? s? i? z? e? ? ? =0017760409601\np? e? _? s? t? a? r? t0020000[root@pusf ~]#

元數(shù)據(jù)和數(shù)據(jù):數(shù)據(jù)損壞分類

系統(tǒng)把磁盤的扇區(qū)分成兩種來支持分區(qū):第一扇區(qū)和所有其他非第一扇區(qū)。并且在第一個扇區(qū)上記錄分區(qū)信息若河,即元數(shù)據(jù)能岩。而其他非第一扇區(qū)則供分區(qū)層使用,從磁盤的視角看牡肉,其他非第一扇區(qū)則是數(shù)據(jù)部分捧灰。我們逐層考察下磁盤、分區(qū)和LVM結(jié)構(gòu)

系統(tǒng)啟動時统锤,會逐層讀取各層元數(shù)據(jù)毛俏,創(chuàng)建各層數(shù)據(jù)結(jié)構(gòu)。如果某一層元數(shù)據(jù)損壞或者丟失饲窿,那么系統(tǒng)就沒有辦法完成創(chuàng)建各層數(shù)據(jù)結(jié)構(gòu)的任務(wù)煌寇。這種情況下,從客戶角度看逾雄,很可能就是數(shù)據(jù)損壞了阀溶。比如腻脏,如果你把第一個扇區(qū)用\0覆蓋一遍,那么系統(tǒng)就識別不到分區(qū)內(nèi)容了银锻。當(dāng)然這種情況下分區(qū)層以上的內(nèi)容永品,比如物理卷信息,系統(tǒng)也無法處理了击纬。因此鼎姐,對于數(shù)據(jù)恢復(fù)任務(wù)而言,如果元數(shù)據(jù)損壞更振,則修復(fù)元數(shù)據(jù)總是必須的炕桨,而且往往是第一步。

當(dāng)然肯腕,如果數(shù)據(jù)損壞了献宫,即使元數(shù)據(jù)完好無缺,那么數(shù)據(jù)也是損壞了实撒。比如姊途,你誤刪了一個文件,那么奈惑,分區(qū)結(jié)構(gòu)再完好對于文件被刪也于事無補吭净。

基于以上分析,我們可以把數(shù)據(jù)損壞簡單分三類類:元數(shù)據(jù)損壞肴甸、數(shù)據(jù)損壞或者前面兩種損壞類型的混合型損壞寂殉。

元數(shù)據(jù)修復(fù)可以簡易處理

以基于磁盤的分區(qū)、LVM以及文件系統(tǒng)為例原在。分層結(jié)構(gòu)的數(shù)據(jù)格式都有嚴(yán)格的格式(比如分區(qū)的數(shù)據(jù)結(jié)構(gòu)就是一個C的struct)友扰,出現(xiàn)位置也固定(有關(guān)分區(qū)的元數(shù)據(jù)記錄在第一個扇區(qū)的446~462字節(jié)之間),而且這些數(shù)據(jù)結(jié)構(gòu)往往都帶有魔數(shù)(比如庶柿,分區(qū)的類型83)村怪,而且常用的分層結(jié)構(gòu),也不外乎分區(qū)浮庐、LVM以及文件系統(tǒng)等幾種甚负。因此,對于元數(shù)據(jù)以及系統(tǒng)如何處理元數(shù)據(jù)审残,我們都容易追蹤和檢查梭域。因此,可以預(yù)期搅轿,修復(fù)元數(shù)據(jù)病涨,有簡易方案。

原理

如果有數(shù)據(jù)損壞璧坟,那么除非有日志既穆、備份赎懦,或者數(shù)據(jù)本身有邏輯可供使用,否則數(shù)據(jù)是不能恢復(fù)了幻工。比如励两,通常的文件刪除操作,系統(tǒng)只是解除了文件名稱和文件內(nèi)容相關(guān)間的聯(lián)系而已会钝。文件本身的內(nèi)容還是記錄再磁盤上伐蒋。這種情況下,只要重建文件名稱和文件內(nèi)容間的聯(lián)系即可恢復(fù)文件迁酸。

相對而言,簡單情形的是元數(shù)據(jù)損壞俭正。如果只是元數(shù)據(jù)損壞奸鬓,而且我們知道正確的元數(shù)據(jù)。因為元數(shù)據(jù)操作掸读,不會觸及數(shù)據(jù)部分串远,因此,我們只要重建元數(shù)據(jù)部分即可恢復(fù)數(shù)據(jù)儿惫。如果涉及到多層澡罚,則逐層恢復(fù)即可。以分區(qū)丟失為例肾请。

比如我們有一塊數(shù)據(jù)盤留搔,整盤我們只是用fdisk分了一個區(qū),現(xiàn)在分區(qū)丟失了铛铁。這種情形下隔显,只要用fdsik,按照默認(rèn)情形饵逐,重新分區(qū)就能恢復(fù)分區(qū)括眠。

就這種情形,我們給出一個可用的分析流程倍权。

癥狀和初步排查

癥狀

客戶反饋

降配重啟后掷豺,系統(tǒng)無法啟動

排查發(fā)現(xiàn)客戶一邏輯卷無法掛載導(dǎo)致重啟失敗。在/etc/fstab中注釋掉邏輯卷的掛載配置薄声,系統(tǒng)啟動成功当船。

但是客戶的邏輯卷上有重要數(shù)據(jù)。此邏輯卷在數(shù)據(jù)盤上奸柬,數(shù)據(jù)盤大小是2TB生年。此磁盤全部2TB全部分配給一個分區(qū),此分區(qū)上創(chuàng)建有LVM結(jié)構(gòu)廓奕。

分區(qū)數(shù)據(jù)如下

[root@localhost ~]# fdisk -l -u /dev/vdbDisk /dev/vdb: 2199.0 GB,2199023255552bytes5 heads,3sectors/track,286331153cylinders, total4294967296sectorsUnits = sectors of1*512=512bytesSector size (logical/physical):512bytes /512bytesI/O size (minimum/optimal):512bytes /512bytesDisk identifier: 0xde220917? Device Boot? ? ? Start? ? ? ? End? ? ? Blocks? Id? System/dev/vdb1204842949672942147482623+83Linux[root@localhost ~]#

初步排查

首先確定分區(qū)上是否有數(shù)據(jù)抱婉,通過查看一些扇區(qū)档叔,我們就會有很大的概率確認(rèn)這一點。當(dāng)然也可以逐扇區(qū)確認(rèn)蒸绩。

逐扇區(qū)確認(rèn)衙四,可以用如下命令辦理。假設(shè)磁盤是/dev/vdb患亿。

max_sector_to_check=nrsectorforiin$(seq0${max_sector_to_check});doddif=/dev/vdbbs=512count=1skip=${i}2>/dev/null| sha256sum;done |sort -n| uniq;

當(dāng)然传蹈,也可以通過抽樣檢查來確認(rèn)。這種方法通常是檢查磁盤分區(qū)的前面一部分扇區(qū)步藕。比如惦界,下面的例子,通過檢查前面幾十個扇區(qū)咙冗,我們可以確認(rèn)磁盤上確有數(shù)據(jù)沾歪。

[root@localhost ~]# dd if=/dev/vdb1 bs=512count=602>/dev/null | od -tx1000000000000000000000000000000000000000*0007000f9800000f9800100f9800200f98003000007020f9800400f9800c00f9800d00f98018000007040f9802800f9803e00f9807900f980ab000007060f9803801f9806c01f9804504f980b0040007100f9801a06f980d00c f980841e00000000000712000000000000000000000000000000000*0017000fa800000fa800100fa800200fa8003000017020fa800400fa800c00fa800d00fa8018000017040fa802800fa803e00fa807900fa80ab000017060fa803801fa806c01fa804504fa80b0040017100fa801a06fa80d00c fa80841e00000000001712000000000000000000000000000000000*0027000fb800000fb800100fb800200fb8003000027020fb800400fb800c00fb800d00fb8018000027040fb802800fb803e00fb807900fb80ab000027060fb803801fb806c01fb804504fb80b0040027100fb801a06fb80d00c fb80841e00000000002712000000000000000000000000000000000*0037000fc800000fc800100fc800200fc8003000037020fc800400fc800c00fc800d00fc8018000037040fc802800fc803e00fc807900fc80ab000037060fc803801fc806c01fc804504fc80b0040037100fc801a06fc80d00c fc80841e00000000003712000000000000000000000000000000000*0047000fd800000fd800100fd800200fd8003000047020fd800400fd800c00fd800d00fd8018000047040fd802800fd803e00fd807900fd80ab000047060fd803801fd806c01fd804504fd80b0040047100fd801a06fd80d00c fd80841e00000000004712000000000000000000000000000000000*0057000fe800000fe800100fe800200fe8003000057020fe800400fe800c00fe800d00fe8018000057040fe802800fe803e00fe807900fe80ab000057060fe803801fe806c01fe804504fe80b0040057100fe801a06fe80d00c fe80841e00000000005712000000000000000000000000000000000*0067000ff800000ff800100ff800200ff8003000067020ff800400ff800c00ff800d00ff8018000067040ff802800ff803e00ff807900ff80ab000067060ff803801ff806c01ff804504ff80b0040067100ff801a06ff80d00c ff80841e00000000006712000000000000000000000000000000000*0074000[root@localhost ~]#

接下來使用testdisk工具恢復(fù)數(shù)據(jù)。嘗試數(shù)次雾消,testdisk工具總是在掃描到2%時停滯灾搏,處理過程不能繼續(xù)。

初次恢復(fù)嘗試

分區(qū)還在立润,但是LVM結(jié)構(gòu)丟失狂窑,經(jīng)檢查,由LVM工具鏈維護的備份數(shù)據(jù)/etc/lvm/backup/vg_xxxxxx文件還在桑腮。因此泉哈,這種情形下,按照我們的恢復(fù)流程到旦,只要在分區(qū)之上旨巷,嘗試重建LVM和文件系統(tǒng),應(yīng)該就可以解決問題添忘。

[root@localhost~]# pvdisplay /dev/vdbFailedtofind deviceforphysical volume"/dev/vdb".[root@localhost~]# ls /etc/lvm/backup/vg_xxxxxx/etc/lvm/backup/vg_xxxxxx[root@localhost~]#

根據(jù)備份數(shù)據(jù)恢復(fù)LVM結(jié)構(gòu)采呐,可以參考Recovering Physical Volume Metadata「槠铮可惜的是斧吐,我們第一步就折戟沉沙了。

[root@localhost ~]# pvcreate --uuid "X1cHlO-kdFk-RZIM-1L12-qHit-0QA5-C1fZxm" --restorefile /etc/lvm/backup/vg_xxxxxx /dev/vdb1WARNING: Device /dev/vdb1 has sizeof4294965247sectors whichissmaller than corresponding PV sizeof4294966977sectors. Was device resized?? Oneormore devices usedasPVsinVG vg_xxxxxx have changed sizes.? Can't initialize physical volume"/dev/vdb1"ofvolume group"vg_xxxxxx"without-ff[root@localhost ~]#

看樣子仲器,分區(qū)的數(shù)據(jù)有些地方出錯了煤率。根據(jù)上面命令報錯的信息,對比LVM的備份數(shù)據(jù)和分區(qū)數(shù)據(jù)乏冀,很快我們就發(fā)現(xiàn)了問題〉矗現(xiàn)有分區(qū)記錄的其擁有的扇區(qū)數(shù)目,少于其上LVM卷組記錄的扇區(qū)數(shù)量辆沦。

問題出在哪里昼捍?

因為種種原因识虚,我們不能確認(rèn)分區(qū)信息和LVM備份數(shù)據(jù)為何不一致。但是妒茬,我們可以進(jìn)一步從磁盤上提取担锤、分析數(shù)據(jù)。因為有關(guān)分區(qū)的元數(shù)據(jù)在(分區(qū)在)乍钻,所以我們進(jìn)一步檢查磁盤上還有沒有有關(guān)LVM的元數(shù)據(jù)肛循?這只要使用下面的命令行

ddif=/dev/vdb1 bs=512count=1282>/dev/null| od -tc

結(jié)果及其結(jié)果分析如下

所以,磁盤上還有有關(guān)LVM的元數(shù)據(jù)银择,但是為什么系統(tǒng)沒有憑借這些數(shù)據(jù)構(gòu)建出LVM結(jié)構(gòu)呢多糠?我們創(chuàng)建一個測試環(huán)境,用strace追蹤下系統(tǒng)處理LVM物理卷元數(shù)據(jù)的執(zhí)行路徑浩考。如下命令即可

strace-s512pvdisplay

當(dāng)然熬丧,更好的辦法是把strace記錄放置到文件中,以備仔細(xì)檢查

starce -o path_to_strace_log-s512-f-ff pvdisplay

我們組合使用strace和grep命令來確認(rèn)系統(tǒng)默認(rèn)的LVM物理卷位置怀挠。如果你沒有耐心分析下面的數(shù)據(jù),請?zhí)^直接看后面的截圖

strace -o /tmp/pvdisplay-strace.log-s512pvdisplaygrep -E'^open|^lseek|^read'/tmp/pvdisplay-strace.log

數(shù)據(jù)清洗結(jié)果如下害捕。如果沒有耐心分析绿淋,請?zhí)^直接看下面的分析截圖

[root@localhost ~]# grep -E '^open|^lseek|^read|^close' /tmp/pvdisplay-strace.log…close(4)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =0open("/dev/vdb1", O_RDONLY|O_DIRECT|O_NOATIME) =4close(4)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =0open("/dev/vdb1", O_RDONLY|O_DIRECT|O_NOATIME) =4lseek(4,21037056, SEEK_SET)? ? ? ? ? ? =21037056read(4,"…",512) =512lseek(4,21118976, SEEK_SET)? ? ? ? ? ? =21118976read(4,"…",512) =512lseek(4,0, SEEK_SET)? ? ? ? ? ? ? ? ? =0read(4,"…",512) =512lseek(4,4096, SEEK_SET)? ? ? ? ? ? ? ? =4096read(4,"\26\326\216\333 LVM2 x[5A%r0N*>\1\0\0…",512) =512close(4)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =0…[root@localhost ~]#

很明顯,系統(tǒng)預(yù)期LVM元數(shù)據(jù)是在分區(qū)的第8個扇區(qū)尝盼,但是在需要做數(shù)據(jù)恢復(fù)的磁盤上吞滞,LVM的元數(shù)據(jù)卻是在第71個扇區(qū),而分區(qū)的起始扇區(qū)是2048盾沫,因此裁赠,LVM數(shù)據(jù)根本不在分區(qū)內(nèi)。這就是為什么磁盤上還有LVM元數(shù)據(jù)赴精,系統(tǒng)卻沒有識別出來LVM的原因佩捞。

既然系統(tǒng)是因為有關(guān)LVM的元數(shù)據(jù)所在扇區(qū)不對而導(dǎo)致系統(tǒng)無法識別LVM結(jié)構(gòu),設(shè)想通過重新分區(qū)蕾哟,我們把有關(guān)LVM元數(shù)據(jù)調(diào)整到分區(qū)的第8個扇區(qū)一忱。稍加計算,就會發(fā)現(xiàn)谭确,只要把分區(qū)的起始扇區(qū)從第2048個扇區(qū)調(diào)整到第63個扇區(qū)即可帘营。不僅如此,通過調(diào)整分區(qū)大小逐哈,我們同樣也解決了磁盤分區(qū)扇區(qū)數(shù)不足的問題

數(shù)據(jù)恢復(fù)

較新的fdisk工具芬迄,不允許起始扇區(qū)小于2048,因此昂秃,我們用parted工具來調(diào)整分區(qū)的起始扇區(qū)禀梳。

調(diào)整過程是先刪掉扇區(qū)杜窄,而后再創(chuàng)建之。而結(jié)果正如我們所預(yù)期的出皇,分區(qū)調(diào)整完成羞芍,客戶的數(shù)據(jù)立刻恢復(fù)了。物理卷郊艘、卷組荷科、邏輯卷、文件系統(tǒng)以及數(shù)據(jù)纱注,都完好無損畏浆。

結(jié)語

從處理這個實際case可以看出,如果知道如何識別各層元數(shù)據(jù)狞贱,比如分區(qū)刻获,LVM文件系統(tǒng);能夠追蹤系統(tǒng)處理各層元數(shù)據(jù)的邏輯瞎嬉,那么蝎毡,組合使用UNIX常用的ddod等工具氧枣,足以簡單有效的處理元數(shù)據(jù)損壞的情形沐兵,快速恢復(fù)數(shù)據(jù)。如果掌握了常見的系統(tǒng)調(diào)用便监,并且掌握了strace工具扎谎,那么對于如何識別元數(shù)據(jù)以及系統(tǒng)如何處理元數(shù)據(jù),完全可以通過簡單分析strace輸出拿到相應(yīng)答案烧董。

除了易學(xué)毁靶、簡單、快捷逊移、高效预吆,元數(shù)據(jù)修復(fù)方案還有一個優(yōu)點,就是可以確保不會破壞數(shù)據(jù)螟左。這可能是這個方案的最大亮點啡浊。

參考

本文提供鏈接,優(yōu)先鏈接內(nèi)容的嚴(yán)謹(jǐn)與可靠性胶背,而非便利性巷嚣。如鏈接無法訪問,請按照文字自行檢索資料和圖書钳吟。

1.數(shù)據(jù)恢復(fù)軟件列表

2.shred (Unix)

3.使用Linux文件恢復(fù)工具

4.如何恢復(fù) Linux 上刪除的文件廷粒,第 1 部分

5.硬盤分區(qū)

6.RHEL 6 Logical Volume Manager Administration

7.Linux 文件系統(tǒng)剖析

8.Linux man pages online

9.元數(shù)據(jù)

10.Linux文件系統(tǒng)中元數(shù)據(jù)的加鎖機制與組織方式

本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請發(fā)送郵件至yqeditor@list.alibaba-inc.com坝茎;如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容涤姊,歡迎發(fā)送郵件至:yqgroup@service.aliyun.com 進(jìn)行舉報,并提供相關(guān)證據(jù)嗤放,一經(jīng)查實思喊,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末次酌,一起剝皮案震驚了整個濱河市恨课,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岳服,老刑警劉巖剂公,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吊宋,居然都是意外死亡纲辽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門璃搜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拖吼,“玉大人,你說我怎么就攤上這事这吻÷陶辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵橘原,是天一觀的道長。 經(jīng)常有香客問我涡上,道長趾断,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任吩愧,我火速辦了婚禮芋酌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雁佳。我一直安慰自己脐帝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布糖权。 她就那樣靜靜地躺著堵腹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪星澳。 梳的紋絲不亂的頭發(fā)上疚顷,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音,去河邊找鬼腿堤。 笑死阀坏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笆檀。 我是一名探鬼主播忌堂,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酗洒!你這毒婦竟也來了士修?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤寝蹈,失蹤者是張志新(化名)和其女友劉穎李命,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箫老,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡封字,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耍鬓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阔籽。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牲蜀,靈堂內(nèi)的尸體忽然破棺而出笆制,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布悍手,位于F島的核電站工闺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匆篓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一寇窑、第九天 我趴在偏房一處隱蔽的房頂上張望鸦概。 院中可真熱鬧,春花似錦甩骏、人聲如沸窗市。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咨察。三九已至,卻和暖如春福青,著一層夾襖步出監(jiān)牢的瞬間扎拣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留二蓝,地道東北人誉券。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像刊愚,于是被迫代替她去往敵國和親踊跟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 不支持上傳文件鸥诽,所以就復(fù)制過來了商玫。作者信息什么的都沒刪。對前端基本屬于一竅不通牡借,所以沒有任何修改拳昌,反正用著沒問題就...
    全棧在路上閱讀 1,960評論 0 2
  • 2015年6月初炬藤,是人生的一個低谷期。第一年的研究生生活碴里,期待著自己有一個質(zhì)的飛躍沈矿,能把日子過成詩,無奈卻把生活過...
    妖精的汪閱讀 268評論 0 1
  • 其實我今天不知道自己想寫什么咬腋,一切正常羹膳,沒有想要表達(dá)的。晚上和豆苗一起看電視她裝睡變成真睡了根竿,所以也沒有夜話陵像。 寫...
    懸崖上的小樹閱讀 220評論 7 4
  • 示愛 不要怕愛,不要總是逃避和無奈寇壳, 因為生活本身亦是愛的搖籃蠢壹, 年紀(jì)輕輕、多情善感的少年男女九巡, 又何必去壓抑那份...
    魯陽之子閱讀 368評論 0 0
  • 文/大江 (一) 寫下這個標(biāo)題,我就做好了挨磚頭的準(zhǔn)備蹂季。但請您先把掄圓的膀子收一收冕广,把差點砸出的板磚先在手上捏一會...
    大江_e0ad閱讀 444評論 0 2