成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

記一次刪庫到數(shù)據(jù)恢復

存儲
在最近的一次升級中,我調(diào)整了源碼的目錄結(jié)構(gòu),腦子一抽刪除了數(shù)據(jù)庫。于是就開始為期一天的數(shù)據(jù)恢復過程,最后的結(jié)果是很悲劇,好在影響不大,可以放到后面講。

記一次刪庫到數(shù)據(jù)恢復

熟悉的朋友可能知道,進入架構(gòu)組后,今年一直在為團隊做各種開發(fā)輔助工具,其中包括一個服務器。

最近這個服務器也上線有三月多了,也不斷收集了很多數(shù)據(jù),包括用戶的各種行為操作、API 調(diào)用數(shù)據(jù)等等。

在最近的一次升級中,我調(diào)整了源碼的目錄結(jié)構(gòu),腦子一抽刪除了數(shù)據(jù)庫。

于是就開始為期一天的數(shù)據(jù)恢復過程,***的結(jié)果是很悲劇,好在影響不大,可以放到后面講。

文件找回

需要說明的是,因為是小微服務,采用的是最簡單的 SQLite 數(shù)據(jù)庫。SQLite 區(qū)分其他的數(shù)據(jù)庫的明顯地方是,它只提供最基本的數(shù)據(jù)服務,但并不啟用端口監(jiān)聽,可以簡單的認為這就是個文件,如果刪除了,就和普通文件從系統(tǒng)中消失是一樣的。所以通常如果使用 SQLite 保存數(shù)據(jù)需要自行定期備份。

所以這次的博文雖然叫『刪庫』,但實際上可以簡單的理解成文件找回。

rm -rf

我在誤刪時,是使用 rm -rf 命令,這當然是個耳熟能詳?shù)膼好h揚的命令(以至于我當時請教后端大佬的時候,后端大佬的反應是『哦,你也終于刪一次庫啦』)

rm 是 linux 系統(tǒng)的用于『刪除文件或目錄』的命令

-f 標識表示 force,即:

  • 在除去有寫保護的文件前不提示。

-r 標識表示:

  • 當 File 參數(shù)為目錄時允許循環(huán)的刪除目錄及其內(nèi)容

extundelete 與磁盤存儲

extundelete 是 linux 系統(tǒng)下一個有力的數(shù)據(jù)恢復工具。extundelete使用存儲在分區(qū)日志中的信息來嘗試恢復已從分區(qū)中刪除的文件。

我們稍微復習一下計算機基礎知識:

硬盤

硬盤是一種采用磁介質(zhì)的數(shù)據(jù)存儲設備,數(shù)據(jù)『物理意義上的』存儲在若干個磁盤片上。在磁盤片的每一面上,以轉(zhuǎn)動軸為軸心、以一定的磁密度為間隔的若干個同心圓就被劃分成磁道(track),每個磁道又被劃分為若干個扇區(qū)(sector)。

主引導扇區(qū)和分區(qū)表

硬盤的0磁道0柱面1扇區(qū)是主引導扇區(qū)位,包括硬盤主引導記錄MBR(Main Boot Record)和分區(qū)表DPT(Disk Partition Table)。操作系統(tǒng)通過分區(qū)表把硬盤劃分為若干個分區(qū),然后再在每個分區(qū)里面創(chuàng)建文件系統(tǒng),寫入數(shù)據(jù)文件。

分區(qū)日志

分區(qū)日志系統(tǒng)是一個文件系統(tǒng),用于修復由于計算機關(guān)閉不當而導致的任何不一致。這種關(guān)閉通常是由于電源中斷或軟件問題造成的。即記錄了分區(qū)的數(shù)據(jù)讀寫操作。

通過這些日志,可以知道分區(qū)中的歷史操作。

數(shù)據(jù)存儲

具體的數(shù)據(jù)存儲原理內(nèi)容比較多,這里不做贅述。為了便于理解,我在此理解為:

  • 操作系統(tǒng)中的文件在硬盤的表現(xiàn)形式是在硬盤一片數(shù)據(jù)區(qū)域記錄二進制信息,并由操作系統(tǒng)的一個指針指向該物理地址
  • 而操作系統(tǒng)級別的『刪除文件』,即刪除這個『指針』
  • 原來的物理地址內(nèi)沒有『指針』指向后,相當于被釋放,當操作系統(tǒng)需要時,可以被復寫上新的數(shù)據(jù)。

由此觀得,extundelete 通過查閱分區(qū)日志,找到被刪除的指針,告訴用戶,可以嘗試恢復哪些數(shù)據(jù)。

但由于操作系統(tǒng)隨時可以復寫空余磁盤,所以如果要恢復的物理地址已經(jīng)被改寫,數(shù)據(jù)將無法找回。

DEMO

為了脫敏,我使用我自己的服務器,具體記錄一下文件恢復的過程。

  • 環(huán)境
  • CentOS 7.4 64位

文件目錄: /root/Sparrow/db.sqlite3

刪除文件

  1. # rm -rf db.sqlite3 

安裝 extundelete

  1. # yum install extundelete -y 

掛載磁盤

首先我們?nèi)ゲ樵冞@個文件或上級文件夾所處的磁盤

  1. # df /root/Sparrow/ 
  2. 文件系統(tǒng)          1K-塊    已用     可用 已用% 掛載點 
  3. /dev/vda1      41151808 2614640 36423736    7% / 

找到后首要的是掛載磁盤,掛載后磁盤將不會被繼續(xù)寫入,保護現(xiàn)場

  1. umount /dev/vda1 

/dev/vda1 就是文件所在的磁盤。

不掛載也是可以的,這樣會導致磁盤可能會被其他的進程寫入數(shù)據(jù),從而抹掉原來的數(shù)據(jù),所以我***沒有找回文件就是因為沒有及時掛載。

inode

inode 是 linux 系統(tǒng)下文件或者文件夾的標識。通過 ls –id 就可以看到。

讀取根目錄的 inode 值:

  1. # ls -id / 
  2. 2 / 

現(xiàn)在我們知道磁盤根目錄的 inode 是 2。

extundelete 查詢可恢復的數(shù)據(jù)信息

先查詢磁盤根目錄下的可恢復信息

  1. # extundelete /dev/vda1 --inode 2 

執(zhí)行時,如果沒有掛載磁盤,會提示。

得到結(jié)果: 

重點盤紅圈內(nèi),看到 root 的 inode 是 131073,繼續(xù)查詢 /dev 的信息:

  1. # extundelete /dev/vda1 --inode 131073  

看到 /Sparrow 是 262194,繼續(xù)查詢 /dev 的信息:

  1. # extundelete /dev/vda1 --inode 262194 

最終找到了刪除信息: 

可以看到 db.sqlite3 被標識為 Deleted。

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

執(zhí)行 –restore-directory 恢復指定目錄

  1. # extundelete /dev/vda1 --restore-directory /root/Sparrow/db.sqlite3 

或執(zhí)行 –restore-all 恢復所有可恢復的數(shù)據(jù)

  1. # extundelete /dev/vda1 --restore-all 

執(zhí)行結(jié)束后,會在當前路徑下,生成一個 RECOVERED_FILES 文件夾,里面有所有被恢復的文件。

如果磁盤已經(jīng)被讀寫,無法恢復,會提示類似信息:

  1. Loading filesystem metadata ... 320 groups loaded. 
  2. Loading journal descriptors ... 27896 descriptors loaded. 
  3. Searching for recoverable inodes in directory /root/Sparrow/db.sqlite3 ... 
  4. 120 recoverable inodes found. 
  5. Looking through the directory structure for deleted files ... 
  6. 120 recoverable inodes still lost. 
  7. No files were undeleted. 

后記

這一次的『刪庫』事件,給我了一個很好的教訓。服務器的數(shù)據(jù)一定要及時備份或做好容災,防止丟失。同時,這次也借此機會進行學習了文件恢復。

當然,希望大家都不會出現(xiàn)我這樣的悲劇 😂。

責任編輯:未麗燕 來源: 小魚周凌宇
相關(guān)推薦

2018-02-23 13:41:05

數(shù)據(jù)庫MySQL數(shù)據(jù)恢復

2018-06-26 13:30:32

數(shù)據(jù)庫MySQL損壞恢復

2014-03-06 09:35:40

Git提交

2021-10-14 10:53:20

數(shù)據(jù)庫查詢超時

2021-11-11 16:14:04

Kubernetes

2017-03-14 14:09:08

數(shù)據(jù)庫Oracle備份

2018-12-06 16:25:39

數(shù)據(jù)庫服務器線程池

2019-08-19 01:34:38

數(shù)據(jù)庫SQL數(shù)據(jù)庫優(yōu)化

2019-09-27 17:24:26

數(shù)據(jù)庫優(yōu)化sql

2019-11-22 08:05:01

數(shù)據(jù)庫mysql分區(qū)

2017-07-07 16:07:41

2014-08-11 09:31:52

2023-04-06 07:53:56

Redis連接問題K8s

2019-11-18 13:42:55

MySQL數(shù)據(jù)庫遷移

2019-09-11 08:22:57

MySQL數(shù)據(jù)庫遠程登錄

2022-01-07 11:48:59

RabbitMQGolang 項目

2019-11-28 08:31:21

Oracle數(shù)據(jù)庫索引

2019-12-12 10:38:10

mysql數(shù)據(jù)庫nnodb

2013-01-17 10:31:13

JavaScriptWeb開發(fā)firebug

2023-10-10 12:05:45

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九九热免费观看 | 欧美亚洲国产日韩 | 国产高清视频一区二区 | 成年人免费看的视频 | 久国产精品| 搞黄视频免费看 | 久久国产日韩 | 午夜影院在线观看免费 | 亚洲一区二区久久久 | 国产成人精品一区二区三区视频 | 国产精品美女久久久久久久久久久 | 午夜在线视频 | 精品日韩 | 国产精品欧美一区二区三区不卡 | 2018国产大陆天天弄 | 在线一区视频 | 国产在线中文字幕 | 久久久亚洲综合 | 精品天堂| 国产精品日韩在线 | www国产成人免费观看视频,深夜成人网 | 美女国内精品自产拍在线播放 | 成人h动漫精品一区二区器材 | 国产精品国产三级国产aⅴ浪潮 | 久久精品国产a三级三级三级 | 成年视频在线观看 | 精品在线免费看 | 国产精品国产三级国产aⅴ原创 | 青青久久 | 国产精品免费高清 | 色桃网| 成人精品国产免费网站 | 亚洲国产情侣 | 欧美中文字幕在线 | av毛片在线播放 | 国产久| av网站免费在线观看 | 久久这里有精品 | 美女国产 | 国产视频福利一区 | 亚洲欧洲一区 |