数据恢复折腾
数据恢复折腾
背景
事情是这样的,以前年轻不懂事,为了多一点存储空间,一块小的容量的ssd和一块大的机械盘,用扩展模式做了存储,直到有一天,终于坏了。想想我那些照片,至少也是个记忆,还是想能捞多少就多少吧。
于是就把两个硬盘拿出来恢复。于是就开始折腾。
DiskGeneius
凭心而论,真心不错的一款磁盘工具,下载一个免费版本,一看磁盘,还不错,大部分文件都在,而且还能预览,可能是数据写入后就没有怎么动过,顺序维持的比较好。但是需要把文件导出来,需要注册一下。请朋友帮忙,吃个饭也得大几百,注册一个也好。但在注册时候把我整懵了,还区分标注版和专业版,好吧,专业版功能应该是最完整的;下一步,专业版还区分普通锁和U盘锁,U盘锁还分16G和32G,还区分读写速度,彻底懵了,是说U盘的读写速度还是恢复数据的速度?标注版还不提供普通锁,到现在为止我还不知道什么是普通锁。按照逻辑,专业版优于标注版,专业版的防护标注应该要比专业版做的更好。
感叹,为啥把定价做的这么麻烦,假如U盘还只是做个锁,为啥还要分个容量?放弃了。
但是还是感谢DiskGeneius,从DiskGeneius我可以确定两个事情,第一,大部分的数据还在;第二,磁盘是linux的lvm。
LVM
是一种逻辑盘技术,简单概括一下,有三个概念,pv,vg,lv。
pv:物理卷【也可以理解为分区】,把物理磁盘分区就是pv。
vg:卷组,把多个物理盘组成一个卷组,就是把多个物理卷合并在一起,看起来就像一个超大的磁盘。
lv:逻辑卷,在vg这个大盘上再分成多个逻辑卷。
区别,传统的技术直接把pv挂载,pv的大小受限于单个磁盘的大小。lvm技术通过中间的vg,实现了多个物理卷的逻辑组合,不再受限于单个物理盘的容量,理论上可以实现无限大的盘。并且可以通过软件动态扩容,缩容等。
wsl2
那现在的直接想法就是把磁盘挂到linux下,直接用linux读取lvm ext4卷。wsl2太秀了,基本上可以完全替代虚拟机了,比如vmware之类的虚拟机软件。注意,用的wsl2版本,而且需要开启systemd服务。wsl启动之后,修改/etc/wsl.conf。
1 | [boot] |
windows powershell 中执行GET-CimInstance -query "SELECT * from Win32_DiskDrive" 可以获取windows的硬盘信息。
通过以下命令把磁盘挂到wsl,注意其中的 —bare参数,大概就是裸盘的意思吧。
1 | wsl --mount \\.\PHYSICALDRIVE0 --bare |
没有那么顺利
进入wsl之后,一切很正常,也能正常的看到lv的信息,但是就是mount不了。总是提示superblock信息丢失。这里我折腾了好几天,google了一堆的方案尝试,有个最蛋疼的是,一个晚上fsck,总提示要不要修复,一直要按y,最后还是用pyautogui写了个脚本,按了一晚上y,把fsck执行完,但最终还是失败了。
大致梳理下我走过的坑,在上一步中,用各种lvm工具,能看到我的逻辑卷,但是mount到文件系统的时候,就是不对。大致原因是之前的两块硬盘组成的vg,在vg上分了一个大分区,也就是这个分区占了两个硬盘。举个例子,比如每一个硬盘上有100个块,两个硬盘总共200块,在逻辑分区上的信息是从0-200,但现在物理盘少了一个,100以后的块就找不着了,自然是要错的。网上也有人提出把后面的100-200也用另一块盘补上;我的思路是既然只有0-100,能不能直接把lv的信息改成0-100,但是依旧是没有找到可行的方案。
数据恢复
既然正常读盘的方式走不通,那就直接做数据恢复的,能捞多少算多。DG能做,有没有免费的?一搜果然,大佬TestDisk,但是就是名字取得太低调和不正经,以至于还以为是什么垃圾软件。一搜,才发现是自己浅薄了。
TestDisk和打包一起的PhotoRec,还提供windows版本,没得说了,启动打开windows版本,根据提示选择要恢复的磁盘和保存的路径,几个小时后等着收文件就行。几万个文件恢复处理了,有一点瑕疵就是目录结构和文件名没有还原,而是按照原来的目录1,2,3的依次平铺。
总结教训
数据存储容灾不得忽视,多做几个备份,RAID 0千万要不得,RAID 1虽然空间减一半,但可靠性提升一倍。