重装Ubuntu 22.04后/dev/sdb硬盘文件丢失,请求数据恢复帮助
别慌,先按下面的步骤来,首先最重要的是:绝对不要再往/dev/sdb这个金士顿240G SSD里写任何东西——包括新建文件、格式化、甚至不要用读写模式挂载它,不然原来的文件可能被彻底覆盖,再也找不回来了。
从你提供的磁盘信息来看,这个磁盘的分区表出现了异常(gdisk扫不到GPT/MBR,显示为loop分区表),但文件系统还是被识别为ext4,大概率是分区表损坏了,而文件本身可能还在磁盘上,我们一步步来尝试恢复:
第一步:先给磁盘做完整镜像备份(最关键,避免操作失误彻底搞坏数据)
先找一个有足够空间的磁盘(比如你的1.8T硬盘sda,挂载在/mnt/735e126b-dc1a-4add-be58-0dd9a591d8e0,剩余空间足够存240G的镜像),先安装专业的备份工具:
sudo apt install gddrescue
然后执行备份命令(把命令里的备份路径换成你实际的大磁盘挂载目录):
sudo ddrescue /dev/sdb /mnt/735e126b-dc1a-4add-be58-0dd9a591d8e0/sdb-backup.img /mnt/735e126b-dc1a-4add-be58-0dd9a591d8e0/sdb-backup.log
这个命令会把/dev/sdb的所有数据完整复制成一个镜像文件,哪怕遇到坏块也会尽量跳过,日志文件会记录备份进度,中途中断可以续传。备份完成后,后面所有操作都可以在镜像文件上做,不用碰原盘。
第二步:尝试直接挂载原磁盘(或镜像)的文件系统
因为lsblk显示/dev/sdb本身是ext4文件系统,我们先试试只读挂载它:
- 先创建一个挂载点:
sudo mkdir /mnt/sdb-recover
- 只读挂载磁盘:
sudo mount -o ro /dev/sdb /mnt/sdb-recover
- 查看里面的文件:
ls /mnt/sdb-recover
如果能看到你的文件,那恭喜!赶紧把所有文件复制到其他磁盘(比如sda或者nvme1n1),复制命令可以用:
sudo cp -r /mnt/sdb-recover/* /mnt/735e126b-dc1a-4add-be58-0dd9a591d8e0/recovered-files/
复制完成后,用sudo umount /mnt/sdb-recover卸载挂载点。
如果挂载失败,提示超级块损坏,那看下一步。
第三步:用备份超级块修复ext4文件系统
ext4文件系统会自动创建多个备份超级块,我们可以用这些备份来尝试挂载:
- 先查看/dev/sdb的超级块位置:
sudo dumpe2fs /dev/sdb | grep -i superblock
执行后会输出类似这样的内容:
Backup superblock at 32768, Group descriptors at 32769-32769 Backup superblock at 98304, Group descriptors at 98305-98305 Backup superblock at 163840, Group descriptors at 163841-163841
- 用其中一个备份超级块只读挂载,比如用32768这个:
sudo mount -o ro,superblock=32768 /dev/sdb /mnt/sdb-recover
挂载成功后就可以复制文件了,和第二步一样。
第四步:用TestDisk恢复分区表
如果上面的方法都不行,试试用TestDisk这个专业的分区恢复工具,它能扫描磁盘上残留的分区信息,恢复分区表:
- 安装TestDisk:
sudo apt install testdisk
- 运行TestDisk:
sudo testdisk
- 按照提示操作:
- 选择
[Create]创建一个新的日志文件 - 选择
/dev/sdb,然后按Proceed - 选择分区类型:如果之前你的磁盘用的是GPT(Ubuntu默认用GPT),选
[EFI GPT];如果是MBR,选[Intel],然后按Proceed - 选择
[Analyze]分析磁盘分区 - 选择
[Quick Search]快速扫描 - 扫描完成后,TestDisk会列出它找到的分区,你可以看看有没有你之前的分区,选中后按
P可以预览分区里的文件,如果能看到你的文件,说明找对了 - 确认分区正确后,按
Write写入恢复的分区表,然后按Y确认 - 重启系统,然后再尝试挂载恢复后的分区(比如/dev/sdb1)
- 选择
等所有数据都安全备份到其他磁盘后,再考虑修复这个磁盘的分区表或者重新格式化。
备注:内容来源于stack exchange,提问作者Mr-Creature

