事前有一块在window下中exe病毒的U盘,需要尽量恢复里面的文件。 现在手上工作机有一台只有四个type-c接口的2017款Mac Pro, 没有type-c转USB转接器。好在旁边还有一台有USB插口的笔记本(centos 7)。

查看centos硬盘

> fdisk -l |grep /dev 
Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors
Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Disk /dev/mapper/centos-swap: 6308 MB, 6308233216 bytes, 12320768 sectors
Disk /dev/mapper/centos-home: 438.8 GB, 438820667392 bytes, 857071616 sectors
Disk /dev/sdb: 8178 MB, 8178892800 bytes, 15974400 sectors
/dev/sdb1   *          56    15974399     7987172    c  W95 FAT32 (LBA)

挂载

> mkdir -p /mnt/usb
> mount /dev/sdb1 /mnt/usb

查看磁盘情况

> df -h

最后将文件复制到本机

mac> scp -r user@host:/mnt/usb /local/folder
??   ????  ????   ?????                        ???(???)201807-?.xlsx  PPT      System Volume Information
??   ????  ????   200????????? ppt???????????  5???                   PPT????
???  ????  ?????  ????201806.xls               ????-????????.docx     ??.pptx

查看文件,已经面目全非,且rar后缀的文件无法用unrar解压。 想办法查看文件的前10字节,以其文件签名决定是什么文件类型。

function handleDir($dir)
{
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $entry = $dir . '/';
                if (is_dir($entry)) {
                    handleDir($entry);
                }
                else {
                    $invalidChar = [' ', '?', '?'];
                    $newEntry = str_replace($invalidChar, 1, $entry, $count);
                    if ($count > 0) {
                         if (!rename($entry,  $newEntry))
                            continue;
                    }
                    if (false !== ($fp = fopen($newEntry, 'rb'))) {
                        $byte = fread($fp, 10);
                        fclose($fp);
                        var_dump(bin2hex($byte));
                    }
               }
            }
        }
        closedir($handle);
    }
}
handleDir($argv[1]);

查看其十六进制对比结果表明,文件损坏。卒!