exFAT格式U盘完美恢复流程攻略

1.问题引入

当插入U盘/SD卡等可移动存储介质时,提示要求格式化,或者根本不能识别U盘内容(如图),此时有一定概率是MBR或者DBR出了问题。

(这当然不能格式化了!存储卡里可是我几天的心血啊!!!里面可是我idol小缘喵的盛世美颜😍😍😍)

为确认存储卡是否正确已插入,使用DiskGenius查看通过DiskGenius,已经找到该U盘,说明存储卡已插到位。

右键用【管理员模式】打开WinHex,按【F9】打开磁盘,选择【物理驱动器】中的存储卡,打开。

按CTRL+F打开搜索,回忆你存储卡中可能存在的文件或者扩展名,例如我拍摄的视频都是MP4格式的,这时候搜索MP4

点按确定搜索,这时找到了我视频名称,这初步意味着,只损坏了MBR或者分区表,没有损坏数据区,一切的一切都有救。


2.恢复思路

整体的恢复思路有2种,一种是使用DiskGenius自动修复分区表,另一种是使用WinHex人工修复。

2.1使用DiskGenius自动恢复分区表

用DiskGenius打开该盘,对整个盘(不是分区)右键,选择【搜索已丢失分区(重建分区表)

在弹出的对话框中,一般选【搜索范围】:【整个磁盘】,点击【开始搜索】。

当出现提示搜索到一个exFAT分区,问是否保留分区的时候,选择【保留】,直到搜索完毕。

这时,该存储卡下就列出了分区,可以将选定的内容恢复到指定文件夹即可。

这时,切记要保存更改!!

要保存更改!!

要保存更改!!

重要的事情说三遍!

一定要先把数据全部备份后再进行分区操作。


2.2 使用WinHex人工恢复分区

由于我自己操作的时候,在2.1节步骤中,没有备份数据就保存了分区表,导致数据没被取出来,数据也没有恢复,可以说是聋子治成了瞎子。受EXFAT文件系统DBR的完美恢复文章的启发,决定用WinHex进行人工恢复。

在继续前,先普及一些基础知识:

2.2.1 基础知识

2.2.1.1 MBR

主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。   

MBR扇区位于物理硬盘的0柱面,0磁头,1扇区,也就是整个硬盘的第一个扇区(偏移量为0),共占512个字节(即一个扇区),每个物理硬盘只有一个MBR扇区。

MBR扇区由三部分构成:第一部分是446字节的引导代码,也就是上面提到的MBR;第二部分是DPT(Disk Partition Table,硬盘分区表),包含4个表项,每个表项16字节,共占用64字节;第三部分是2个字节的结束标志,0x55AA。其结构如下图:

(本节引用自《MBR、EBR与DBR详解》

2.2.1.2 DBR

分区引导扇区也称DBR(DOS BOOT RECORD),是由FORMAT高级格式化命令写到该扇区的内容,DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区才会被MBR装的DBR入内存运行。

在对硬盘分区之后,每一个分区均有一个DBR与之对应。DBR位于每个分区的第一个扇区,大小为512字节。

DBR的结构与分区格式有关,NTFS与FAT32的DBR格式是不同的。

(本节引用自《MBR、EBR与DBR详解》

2.2.1.3 常用换算关系

通常情况下,一扇区(Sector)包含512字节(Bytes)。

2.2.2 数据备份

吸取教训,本次操作前先进行数据备份。可以用WinHex打开磁盘后,按Alt+C创建磁盘镜像,创建成Raw格式,完整获取存储介质,不分割镜像文件;或使用DiskGenius创建磁盘镜像。然后用Windows自带的磁盘管理创建VHD,大小比U盘相当或略大,初始化成MBR模式,格式化成exFAT格式。再将镜像文件恢复到VHD分区。

2.2.3 恢复操作

介绍完基本知识,备份了分区,现在回过头开始分析被破坏的U盘。

用WinHex打开U盘,从2.2.1.1节,我们知道0x01BE~0x01CD代表第一个分区分区表(DPT),其具体格式见链接。一般来说,在Windows系统,至少在U盘/存储卡修复中,我们不考虑Head(磁头)、Sector(扇区)、Cylinder(柱面),因此可以从其他存储卡中复制0x01BE~0x01CD部分到本存储卡,选中上述部分按Ctrl+Shift+C即可复制16进制数据,如我从另一张存储卡中复制来以下部分。

00 0A 09 02 07 FE FF FF 00 80 00 00 00 80 75 07

这其中,重要的是起始扇区数(00 80 00 00)和总扇区数(00 80 75 07)。注意这里是小端模式,最低字节在前,最高字节在后,也就是说,起始扇区应为(00 00 80 00)➡0x8000,换算成偏移量为0x8000*0x200(一个扇区512个字节,换算成16进制为0x200)=0x0100 0000。

按Alt+G,打开【转到偏移量】对话框,相对于开始,偏移量0100 0000(要填入一个十六进制数),点击确定。

这时,我们发现0x0100 0000并不是扇区的起始位置,0x0100 0200才是扇区开始位置(以EB 76 90 开头,详见exFAT文件系统Volume Layout(卷格式)介绍以及Boot Sector介绍)。这时,有2种方案,一是按EXFAT文件系统DBR的完美恢复文章建议的,修改各扇区地址配置信息(包括但不限于MBR种起始扇区地址、总扇区数量、DBR中各扇区配置);二是削足适履,将分区信息修改到适当位置。

在继续之前,我们查看exFAT分区Boot Sector扇区0x40偏移量(即图中0x0100 0240),在Boot Sector介绍中,它包含PartitionOffset(分区偏移量)(以扇区为单位)和VolumeLength(卷长度)(也以扇区为单位),与MBR中起始扇区和分区总扇区大小参数一致。注意到本U盘(损坏的U盘)数据为:

00 80 00 00 00 00 00 00 00 30 E2 0E 00 00 00 00

注意,这里分区偏移量和卷长度都是8个字节,而MBR中是4个字节,因为是小端模式,我们取前4个字节

00 80 00 00 00 30 E2 0E

同时,拼上好U盘的分区表其他参数,只有最后8个字节用上面的代替,得到

00 0A 09 02 07 FE FF FF 00 80 00 00 00 30 E2 0E

这就是待替换的MBR中分区表部分,将空格部分删除,得到

000A090207FEFFFF008000000030E20E

复制上述十六进制数据,Alt+G转到偏移量0000 01be

按Ctrl+B,将复制的十六进制数据写入0x01be中,剪贴板格式选择ASCII Hex。

蓝色部分为已写入的新数据

至此,我们恢复进程已经走完了万里长征的第一步。

一个exFAT卷的格式一般为1个Boot Sector扇区,8个Extend Boot Sectors扇区,1个OEM Parameters扇区,1个保留扇区,1个Boot Checksum扇区,共计12个扇区(扇区0~扇区11),扇区12~23为扇区0~11的备份。

在Boot Sector中,偏移量0x26C代表每扇区中包含的字节数量,通常是0x09,意为每扇区包含2^9=512个字节,可以在WinHex中选择菜单栏【工具】→【磁盘工具】→【设置磁盘参数】,设置【每扇区字节数】为512(或按实际情况设置),这时,WinHex中一个分割线为一个扇区。

通过分析,发现本U盘exFAT卷对应的第0扇区(0x0100 0000)为不知道什么东西,后面跟着一个Boot Sector分区,8个Extend Boot Sectors扇区,1个OEM Parameters扇区,1个保留扇区,接下来又是Boot Sector扇区。到这里,问题已找到,为丢失了一个Boot Checksum扇区,继续往下翻,发现备份Boot Region中Boot Checksum扇区完好无损。

综上,我们选择0x0100 0200扇区所有内容,按Ctrl+Shift+C复制16进制,在0x0100 0000处按Ctrl+B粘入,以此类推,将每个第0扇区至第10扇区每个扇区向上移动一个扇区,然后从备份引导区中取出Boot Checksum复制到第11扇区。

结束前,我们确认自0x0100 0000处开始,前23个扇区分别为1个Boot Sector扇区,8个Extend Boot Sectors扇区,1个OEM Parameters扇区,1个保留扇区,1个Boot Checksum扇区,共计12个扇区(扇区0~扇区11),扇区12~23为扇区0~11的备份。

按Ctrl+S保存,忽略它的警告,直接点确定。

Windows自动弹出资源管理器,大功告成!

3.参考文献

1.EXFAT文件系统DBR的完美恢复(https://blog.csdn.net/xlzgwry/article/details/104477331

2.MBR、EBR与DBR详解(https://blog.csdn.net/Hilavergil/article/details/79270379

3.exFAT格式介绍(https://www.ntfs.com/exfat-overview.htm

4.硬盘基础介绍(https://blog.csdn.net/xlzgwry/article/details/104477331


4.写在最后

1.2024年第一堂课——碰到数据损坏的存储器后,不要尝试任何【写】的操作!哪怕是扫出来分区表是完全正确的,也不要写!也不要写!也不要写备份损坏的分区表。读取/备份损坏的数据——尝试恢复分区表,这才是正确的操作!

2.数据恢复软件能力非常有限,我使用了很多款,都扫不出来完整的数据;

3.我本来以为这回在温州漫展上录的那么多毛哥视频都没了!一度极度悲伤过!😭😭😭现在又大喜!😃😃😃2024年1月6日是我今年到目前为止最开心的一天!😉😉😉

4.最后——小缘是女王!😉我喜欢的人超厉害~😘😍🤩

### 回答1: 要在Linux上挂载exFAT格式U盘,需要执行以下步骤: 1. 确保系统已经安装了exFAT文件系统的支持。如果没有安装,可以使用以下命令安装: ``` sudo apt-get install exfat-fuse exfat-utils ``` 2. 插入U盘,然后使用以下命令查看U盘的设备名称: ``` sudo fdisk -l ``` 在输出结果中找到U盘的设备名称,例如/dev/sdb1。 3. 创建一个用于挂载U盘的目录,例如/mnt/exfat: ``` sudo mkdir /mnt/exfat ``` 4. 使用以下命令挂载U盘: ``` sudo mount -t exfat /dev/sdb1 /mnt/exfat ``` 这里的/dev/sdb1是U盘的设备名称,/mnt/exfat是挂载点的路径。 5. 挂载成功后,可以使用以下命令查看U盘的内容: ``` ls /mnt/exfat ``` 6. 卸载U盘时,可以使用以下命令: ``` sudo umount /mnt/exfat ``` 注意,如果U盘正在使用中,需要先关闭所有文件和进程,然后再卸载。 ### 回答2: ExFAT是一种比FAT32更好的文件系统,可以支持更大的文件和更大的存储容量。如果你使用Linux来访问ExFAT格式U盘,你需要在Linux系统中安装exfat-fuse和exfat-utils软件包。下面是在Ubuntu 18.04 LTS版本中的操作步骤: 1. 打开终端,输入以下命令以更新软件包列表: sudo apt update 2. 安装exfat-fuse和exfat-utils包: sudo apt install exfat-fuse exfat-utils 3. 插入ExFAT格式U盘。如果U盘已经自动挂载在文件系统中,需要确保此时U盘未被占用。 4. 在终端中输入以下命令以检查U盘设备名称: sudo fdisk -l 你将看到类似如下的输出: Disk /dev/sdb: 14.7 GiB, 15728640000 bytes, 30720000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 30719999 30717952 14.7G c W95 FAT32 (LBA) 这表明U盘对应的设备名称为/dev/sdb1。 5. 确认U盘上没有文件被使用。然后,在终端中输入以下命令来挂载U盘: sudo mount -t exfat /dev/sdb1 /mnt 其中,/mnt是Linux系统中的一个挂载点(即文件夹),它可以是你想要的任何文件夹。如果/mnt文件夹不存在,请在终端中输入以下命令: sudo mkdir /mnt 6. 然后,用以下命令查看挂载点是否成功: mount | grep /mnt 你将会看到以下信息: /dev/sdb1 on /mnt type exfat (rw,relatime,fmask=0022,dmask=0022,iocharset=utf8) 这表明U盘已经成功挂载。 7. 当你要卸载U盘时,在终端中输入以下命令: sudo umount /mnt 这些就是在Linux系统中挂载ExFAT格式U盘所需要的步骤。如果你遇到了任何问题,可以在Linux社区中寻求帮助。 ### 回答3: Linux是一种基于Unix的操作系统,其内核提供了支持各种文件系统的驱动程序。ExFAT是一种文件系统,它旨在为可移动存储设备和闪存模块提供一种更好的支持。但是,在Linux上挂载ExFAT格式U盘并不像其他常见文件系统(如FAT32、NTFS)那样简单。因此,本文将向您介绍如何在Linux上挂载ExFAT格式U盘。 首先,您需要安装exfat-fuse和exfat-utils软件包,它们提供了与ExFAT文件系统交互所需的工具。 在Debian/Ubuntu上安装exfat-fuse和exfat-utils: ``` sudo apt-get install exfat-fuse exfat-utils ``` 在Fedora上安装exfat-fuse和exfat-utils: ``` sudo dnf install exfat-utils fuse-exfat ``` 在Arch Linux上安装exfat-utils: ``` sudo pacman -S exfat-utils ``` 安装完成后,可以将ExFAT格式U盘插入Linux计算机的USB接口。然后,执行以下命令进行挂载: ``` sudo mount -t exfat /dev/sdb1 /mnt/usb ``` 上述命令将ExFAT格式U盘挂载到/mnt/usb目录。/dev/sdb1是U盘的设备节点。你可以用以下命令替换自己的设备节点: ``` sudo fdisk -l ``` 该命令将显示系统上连接的磁盘和分区列表,类似于以下输出: ``` Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 5246975 5244928 2.5G 83 Linux /dev/sda2 5246976 6239023 992048 484M 82 Linux swap /dev/sda3 6239024 8386559 2147536 1.1G 83 Linux ``` 在上面的输出中,U盘的设备节点为/dev/sdb1(Linux可能会在/dev/sdb或/dev/sdb2等位置识别U盘的设备节点,具体取决于U盘的分区设置)。 您也可以使用以下命令卸载U盘: ``` sudo umount /mnt/usb/ ``` 或者,如果您想以读写模式挂载ExFAT格式U盘,请执行以下命令: ``` sudo mount -o rw,uid=1000,gid=1000,umask=000 /dev/sdb1 /mnt/usb ``` 上述命令将ExFAT格式U盘挂载到/mnt/usb目录,并使用读写模式挂载,并将文件的权限设置为所有用户可读、写、执行。 通过上面的步骤,您就可以在Linux上成功挂载ExFAT格式U盘了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值