2015-07-01

Ubuntu 用指令救回已刪除檔案

阿舍之前有介紹過用 Ubuntu 現有的指令就可以救回在 NTFS 檔案系統中已刪除的檔案,那時阿舍有想過,那 Linux 用的檔案系統是不是也有辦法可以用指令救的回來 ? 不過,那時阿舍沒有用到,所以,就沒花時間去瞭解哩 ! 而最近發現到有一個叫做 debugfs 的指令是可以用來救回在 Linux 檔案系統已刪除的檔案,因此,就花了點時間來研究了一下哩 !



阿舍後來發現,除了這個 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 指令來搬出區塊資料的說明,請參考阿舍寫的這一篇囉 !

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

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

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







[+] Ubuntu 指令新手會用到的35個技法 - 這是以阿舍的使用經驗編寫出來的電子書,三天內應該就看的完,學的起來哩 ! 有空就參考一下囉 ! ... ^^=

關於阿舍

好文不藏私,請多分享囉!! ^^=



沒有留言 :

張貼留言

如果留言後,發現留言不見了,這通常是因為 Goolge 把它認為是垃圾留言了,請用信件通知阿舍調整 ( ayubiz@gmail.com )。謝謝 !