Linux刪除的檔案如何救回?

Linux 刪除的檔案如何救回?


debugfs 程式

debugfs 程式可以用來救回檔案之外,在 Ubuntu / Linux 還有不少的工具可用,像是 photorec 和 foremost 等,不過,就只有這個 debugfs 程式是預載的,不需要額外安裝,所以,在緊急的時候,馬上就可以使用,不然,如果再安裝個程式上去,可能就會不小心把想要救回來的檔案給蓋掉了哩 !

其實,要救回檔案,最重要的事,就是要知道這個檔案的內容是放在那幾個區塊 (Block)裡,有了區塊的資訊之後,就可以利用 dd 指令來將檔案的內容從那些區塊裡搬出來另外放,這樣,就有機會可以把檔案給救回來了哩! 但是,想要查到檔案的區塊資訊,就必需要透過檔案的 Inode 編號來查詢哩 !

如果檔案還沒刪之前,你就想早做準備的話,用下面的 ls 指令搭配 -i 選項就可以查出檔案的 Inode 編號,然後,把它們記下來,不小心刪除檔案時,就可以拿出來用了,但是,如果你沒那麼勤勞的話,那就要在檔案不幸被刪除的時候,用下面第二行的指令來查詢檔案的 Inode 編號囉 ! (以 /dev/sda1 磁碟裝置上的 /home/arthurtoday 這個資料夾下的檔案為例)
  •  $ ls -li
  •  $ sudo debugfs -R 'ls -d /home/arthurtoday' /dev/sda1

上面第二行的指令的用法,是要在指定要查詢的資料夾的絕對路徑,這樣,在執行會,就會出現指定資料夾下的所有檔案的 Inode 編號和檔案名稱,其中,也包括已經被刪除的檔案,因此,就可以透過這個方式來找到已經被刪除的檔案的 Inode 編號,但是,如果用這個方式找不到要救的檔案的話,就可能要試試其它救回檔案的方式囉 !

有了要救回的檔案的 Inode 編號後,接下來,就可以利用 debugfs 指令來查出檔案的區塊位置 (Block),查詢的指令如下,是以阿舍查出的 Inode 編號為 279654 為例,那個大於和小於符號是必要的,不可省略哩 !

  •  $ sudo debugfs -R 'stat <279654>' /dev/sda1

查出檔案內容所使用的區塊 (Block) 的開始編號後,就可以用像下面這樣的 dd 指令來把已刪除的檔案內容搬到新的檔案來放,有關用 dd 指令來搬出區塊資料的說明,請參考阿舍寫的這一篇囉 !=>Ubuntu 用 dd 指令複製檔案

  •  $ sudo dd if=/dev/sda1 of=xyz.jpg bs=4096 count=1 skip=563988

上面的 dd 指令範例是以阿舍找出的檔案區塊號碼是 2563988, 而且,開始和結束的 Block 編號是同一個,也就是只用到一個區塊的例子,所以,count 的值就是 1 ,然後,把救回的檔案資料放到 xyz.jpg 這個檔案哩 !

阿舍覺得這種方式的好處是不用再額外安裝軟體,而且,因為是把資料從現有的資料區塊搬出來放到另外的檔案,所以,也不需用到其它的儲存裝置來避免蓋掉要救回的檔案 (如果一次要救回很多檔案的話,還是建議把救回的資料寫到其它磁碟),算是滿方便的,只是,要對檔案系統要有一些些概念哩 ! ......以上參考自 : 阿舍 ~ Ubuntu 用指令救回已刪除檔案

使用 testdisk 這個工具

有時候我們常常會不小心刪除掉一些還要使用的檔案,若是要救回誤刪的檔案,可以使用 testdisk 這個工具,testdisk 是一個開放原始碼,且適用各種平台的磁碟工具,這裡我使用 Linux 平台來說明其使用方式,其他的平台在使用上也是大同小異。

STEP 1

首先安裝 testdisk,若是 Ubuntu 或 Debian 的話,用 apt 比較快:
  • $sudo apt install testdisk

安裝完成後,以 root 權限執行:

  • $sudo testdisk

STEP 2

建立一個 log 檔,這個部份就直接按 Enter:

STEP 3

選擇磁碟,就看之前被刪除的檔案在哪一個分割區,這裡我用一個 JetFlash Transcend 32GB 隨身碟作示範,選擇(上下鍵)好磁碟之後,就選擇(左右鍵)下方的 Proceed 繼續:

STEP 4

選擇磁碟的分割表格式,這個部份 testdisk 會自動偵測,只要直接按 Enter 就可以了:

STEP 5

選擇要使用的功能,testdisk 提供了很多功能,這裡選擇第二項  [ Advanced ] Filesystem Utils:

STEP 6

選擇分割區(上下鍵),然後選擇下方的 Undelete(左右鍵):

STEP 7

接下來就要開始回覆誤刪的檔案了,紅色的部份就是之前被刪除的檔案,選擇要回覆的檔案,然後按 c 鍵複製:

STEP 8

選擇檔案回覆後要放置的位置,這個位置不能跟之前誤刪的檔案在同一個分割區,選擇好了之後,按下 C 開始回覆:

STEP 9

檔案回覆完成後,就會回到原來的資料夾,上方會顯示 Copy done,這樣就表示完成了,如果還要繼續回覆其他的檔案,就一樣選擇檔案後,按 c 鍵,不過之後 testdisk 就會直接自動將檔案複製到剛剛所選擇的位置,不會在詢問回覆檔案放置的位置了。

STEP 10

完成之後,就按 q 鍵離開(多按幾下就能跳出 testdisk)。


留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組