使用foremost恢复已删除文件
foremost是一款根据文件头,尾和内部结构来尝试从镜像文件(或者磁盘)中恢复文件的工具。
foremost默认可以扫描出 jpg
, gif
, png
, bmp
, avi
, exe
, mpg
, mp4
, wav
, riff
, wmv
, mov
, pdf
, ole
, doc
, zip
, rar
, html
, cpp
文件。
但是通过配置它的配置文件(默认为 /etc/foremost.conf
),你还可以为它增加新的支持类型。
安装foremost
sudo pacman -S foremost
使用foremost扫描文件
最常用的方法就是
sudo foremost -t 文件类型 -i 磁盘/镜像文件
比如,我误删除了一个 png
文件,那么可以运行
sudo formost -t png -i /dev/sda1
这会扫描 /dev/sda1
分区,尝试查找其中的 png
文件,并将这些 png
文件保存到当前目录下的 output
目录中。
你也可以通过 -o
选项来指定存放文件的目录,但要注意,这个目录需要是空的,否则会提示错误。
sudo formost -t png -i /dev/sda1 -o /tmp/png
为了方便,你也可以使用 T
选项让foremost自动根据当前时间戳来生成output目录,这时生成的目录是类似这样的 output_Thu_Mar__8_11_43_40_2018
sudo formost -t png -i /dev/sda1 -T
foremost
需要扫描整个磁盘或镜像文件来查找可能的文件,这常常是一个很漫长的过程,可以使用 -q
来加快扫描速度。
当启用 -q
选项后, foremost
会仅仅在每个扇区的开始位置与文件头进行对比,这会极大地减少扫描时间,但可能会丢失一些嵌套在其他文件内的文件(比如嵌套在doc文件中的图片)。
sudo formost -q -t png -i /dev/sda1 -T
与 -q
常连用的是 -b number
, 它可以指定磁盘每个扇区的大小,默认是512个字节。但对于 ext4
文件系统来说,这个值一般是4096.
sudo formost -q -b 4096 -t png -i /dev/sda1 -T
具体文件系统的扇区大小是多少,可以通过 dumpe2fs
来查看
sudo dumpe2fs /dev/sda1 |grep "Block size" |cut -f2 -d ":"
我们可以写一个脚本,将 foremost
和 dumpe2fs
结合起来实现快速扫描。
TYPE=$1 DIR=$2 fs=$(df ${DIR}|tail -n 1 |cut -f 1 -d " ") block_size=$(sudo dumpe2fs ${fs} |grep "Block size" |cut -f2 -d ":") foremost -t ${TYPE} -q -b ${block_size} -i ${fs} -T
第一个参数指定文件类型
第二个参数指定被删掉文件所在的目录
第三行找出文件所属的磁盘
第四行找出磁盘块大小
第五行调用foremost扫描被删除的文件。