《硬件历险》之Mac抢救出现问题的时间机器硬盘中的数据

本文虽然使用“抢救”一词,但是运气比较好,远没有达到访问和修改底层的信息来抢救的地步。如果你是需要通过访问和修改底层信息来抢救数据,建议阅读刘伟的《数据恢复技术深度揭秘(第二版)》或者寻找专业人士的帮助。

《数据恢复技术深度揭秘(第二版)》并没有提及如何修复现在 macOS 使用的 APFS,最新只有 HFS+。APFS 的结构要复杂一些,但是也是个尝试。

问题的前因后果

之前买过一块 3TB 的 SMR 盘用来专门时间机器备份,但是有次将其接到显示器上的 USB 接口,备份的时候显示器黑屏连接断开了,再次打开之后无法连接,等待相当长时间自检修复之后,弹出窗口显示“无法修复磁盘”,需要赶快抢救这些文件。

我当时要崩溃了,因为我的时间机器一直是手动备份的,所以从 2019 年一直到 2022 年四年的备份都在其中,这要是没了挺烦的。

好在这时候是可以正常访问硬盘内容的,只是整个硬盘都是只读的,无法再次使用时间机器来操作这个硬盘。

请添加图片描述

其中,我看到了那个被打断的备份(下图高亮):

请添加图片描述

这部分也没什么有用的内容,所以后面也不需要复制他们(由于现在是整个硬盘都是只读也没法删除)。

跳过系统的修复

上面看到了系统的修复是没啥用的,但是每次插上这个硬盘之后,需要很长时间才能看到卷宗。这是因为系统发现这个卷宗出现问题了,在使用fsck尝试修复。如果此时你在活动监视器中搜索fsck可以看到如下(_hfs后缀表示修复的文件系统是 HFS 格式的):

请添加图片描述

这时候强行退出这个进程就会弹出提示窗口,然后就能看到卷宗内容了。(命令行使用PS -A |grep fsck搜索,然后kill杀死进程即可)

这是为了节约时间。因为此时我们已经确定文件系统出现了问题,我们需要尽快将数据导出。有的时候fsck尝试修复只需要几分钟、十几分钟就会弹出修复失败的信息,但是有些时候会达到十几个小时(我遇到过),甚至数天(我在论坛看有人遇到过)。

诊断问题

首先得确定到底是硬盘坏了,还是文件系统坏了。前者的话抢救完数据就不能用了,而且得减少操作防止进一步恶化。后者的话格式化就好了,也不用担心操作太多导致更大的问题。

我知道很多人由于 SMR 结构的问题,会直接认为硬盘损坏,但是正如我上面所说,我基本没有复写操作,都是增量写入。这也是 SMR 的适合使用场景(一次写入,多次读取,尽量别再次复盖写入),所以不能简单地认为就是硬盘的问题。

我们在 Linux 或 Windows 上查看到这个硬盘(虽然无法读取,但是我们只需要检查),本文使用 Windows。

为什么不使用 Mac 来查看和检测?
这是因为 macOS 不支持对外部硬盘查看 SMART 信息,你可以使用 smartmontools 中的smartctl试一下,这点在 smartmontools 官方问答中也有列出 OSX - External USB / FireWire drive diagnostics support,机翻如下

请添加图片描述

连接上之后使用查看 SMART 信息的工具,以及其他一些检查工具(DiskInfo 等等)看看硬盘有没有问题。

好消息是硬盘没坏。加上能正常访问,用测速软件发现速度也没下降。也就是说只有文件系统出现了问题,这样只要抢救完文件就没有什么损失了。

抢救数据

根据上面的情况,个人猜测是时间机器相关的结构出现了问题,而不是 EFI 分区。因为是可以正常访问的,打开一些文件也没有问题,不然连硬盘卷宗都看不到。

由于整个硬盘是只读的,无法使用时间机器迁移到新硬盘,所以只能复制需要的内容。

接下来就是抢救这些文件了。

一些不能复制的文件和目录

如果你直接拖Backups.backupdb到新的硬盘中,会发现弹出:

请添加图片描述

这并不是因为目标硬盘是 APFS,和时间机器的 HFS+ 不一样,而是有一些隐藏文件作为时间机器的文件系统。所以同时按下“Command + Shift + .”三个键来显示所有的隐藏文件:

请添加图片描述

这里高亮的.RecoverySets目录是用来恢复 Mac 的。当然并不是只有这一个目录或者文件用来组成时间机器的文件系统,所以这时候也不要直接拖拽最下面没被隐藏的文件夹。

需要复制的文件和目录

实际需要复制的是下面这两个目录中的内容:

请添加图片描述

第一个目录下存放的是系统的东西,比如说系统自带的应用程序等等;第二个目录下则存放的是用户的数据和应用程序。

只复制一部分文件

如果你只需要一些数据文件,那么复制第二个目录下的内容即可。Macintosh HDMacintosh HD - 数据都对应的是系统的根目录/,前者存放的是系统相关的,后者是用户和使用相关的(可以想象一下将真正的根目录拆分成两部分)。

这点与实际系统上的结构完全不同,因为实际的系统上的Macintosh HD才是根目录,而Macintosh HD - 数据是挂载在/System/Volumes/Data的,需要注意这点。

比如说“照片”App 的内容一般在"Macintosh HD - 数据/Users/用户名/Pictures/照片图库.photoslibrary"(双引号防止在空格中断)。你只需要将其复制到其他地方,直接打开就能在“照片”中看到了。

“Pictures”在“访达”中可能因为本地化显示为“图片”,其他这些文件同理。很多人会将东西放在桌面,就可以在“桌面”或“Desktop”中看到。

对于开发人员来说,可能还需要复制一些配置文件或者二进制文件,这些都可以在对应位置找到。

复制所有的内容

通过上面我们知道了有些目录和文件是不能复制的,以及对我们有用的文件都在哪。

所以理所当然的,我们想可以在新的硬盘中创建对应目录,然后将Macintosh HDMacintosh HD - 数据依次拖到对应的目录下就行。

但是新的问题总是一个个冒出来:某些文件的直接拖拽复制可能会出现问题,比如说库乐队(GarageBand):

请添加图片描述

我一开始以为是硬盘坏块或者什么(我的魅族MX3上的一些照片就是闪存问题丢失了一些照片),但是尝试了多个备份中的库乐队,发现还是这样,说明不是硬盘的问题。

类似的还有 iMovie 和 Xcode,但是库乐队是一种特殊情况,像 iMovie 和 Xcode 的图标上都有所显示,但是库乐队没有这个符号(如下),却也无法复制成功:

请添加图片描述

这是因为库乐队找不到的是下载到乐器资源这些后期才有的资源,而不是程序本身的依赖项(比如 Xcode 使用的编译器、动态连接库等),所以图标上并没有显示,而它的记录是有这些的,但是这个时候找不到,就导致复制失败(因为在本机上找的)。

这里不展开去说其他程序的,因为不同的程序出现问题的原因不同,但是简而言之就是复制的时候破坏了软链接

解决方案也很明显,就是不破坏软链接来进行复制,这时候就不能使用拖拽的方法了,实践表明这会破坏软链接,所以需要使用rsync -l来保留软链接进行复制(速度有时差不多)。注意不要使用cp -RPcp -a来复制,某些文件会复制失败(按理说是等价的,但是可能因为某些原因导致出现问题,如果后面发现了我会在这贴出来)。

我们先尝试复制一次备份的内容,如果可以的话再使用脚本自动复制所有的备份即可。

命令如下:

sudo rsync -av \
"/Volumes/时间机器/Backups.backupdb/XXX的Macmini/2019-11-19-142257/Macintosh HD - 数据/" \
"/Volumes/10TB/时间机器手动导出/Macintosh HD - 数据/"

其中:

  • a是存档模式,这会递归读取目录,不破坏符号链接、权限等信息。a等价于rlptgoD,所以我们不需要再使用l选项。rsync默认(无选项)是存档模式的,但是我们使用了其他选项,所以需要再使用一下。
  • v会打印传输完成的文件。使用这个是为了让看到是否在传递文件(可能会降低一点速度)。
  • 第二行是源地址。
  • 第三行是目标地址。时间机器手动导出这个目录需要手动创建一下。

创建文件列表需要一段时间,然后就可以看到在复制文件了,如下:
请添加图片描述

v选项几乎不会影响速度,如下:

请添加图片描述

速度最高速度如上图(5400 RPM 的消费级机械硬盘这速度差不多满速了),速度低的话就几十 KB/s 都有可能。

现在单个复制完成之后,就可以开始写脚本了。下面的脚本仅供参考,因为不同的人可能有所不同,我只是根据我的情况编写的。

#!/bin/bash
#
for dir in $(ls); do# 忽略三个不需要的文件和目录名,防止路径出现问题if [ $dir == *.inProgress ]||[ $dir == Latest ]||[ $dir == "com.apple.TimeMachine.inheritance.plist" ]; thenecho "Skip this directory"else# 在目标位置创建对应目录mkdir "/Volumes/10TB/时间机器手动导出/$dir"# 复制两个目录sudo rsync -av "$dir/Macintosh HD/" "/Volumes/10TB/时间机器手动导出/$dir/Macintosh HD/"# 排除.DocumentRevisions-V100文件会快很多sudo rsync -av --exclude '.DocumentRevisions-V100' "/Volumes/时间机器/Backups.backupdb/XXX的Macmini/$dir/Macintosh HD - 数据/" "/Volumes/10TB/时间机器手动导出/$dir/Macintosh HD - 数据/"fi
done;

希望能帮到有需要的人~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/278156.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 NXP PCA85073A 实时时钟读取数据时出现 IIC 传输失败的原因解析和解决方法

一、前言 对使用 I2C 传输的 RTC 外设 PCA85073,在 I2C 传输过程中若有复位信号输入,则有概率出现 I2C 死锁的状态,即 SCL为高,SDA一直为低的现象。 二、I2C 基本协议 在分析问题出现的原因之前,我…

es索引操作命令

索引操作 index 创建索引 put 方法创建索引 使用 put 创建索引时必须指明文档id,否则报错 # PUT 创建命令 # test1 索引名称 # type1 类型名称,默认为_doc,已经被废弃 # 1 文档id PUT /test1/type1/1 {"name":"zhangsan&…

【体验有奖】用 AI 画春天,函数计算搭建 Stable Diffusion WebUI

人工智能生成内容 AIGC(Artificial Intelligence Generated Content)是当下备受关注的概念之一,是继 PGC 和 UGC 之后的新型生产方式。AIGC 技术的核心思想是利用人工智能算法生成具有一定创意和质量的内容。例如,根据用户的描述或…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中,会损失大量信息,例如图中的马在建模过程中逐渐变得模糊,从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说, PGI包含三个部分,&#xff0…

AJAX 02 案例、Bootstrap框架

AJAX 学习 AJAX 2 综合案例黑马 API01 图书管理Bootstrap 官网Bootstrap 弹框图书管理-渲染列表图书管理-添加图书图书管理-删除图书图书管理 - 编辑图书 02 图片上传03 更换图片04 个人信息设置信息渲染头像修改补充知识点:label扩大表单的范围 AJAX 2 综合案例 黑…

【鸿蒙HarmonyOS开发笔记】自定义组件详解

自定义组件 除去系统预置的组件外,ArkTS 还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。 我们开发的每个页面其实都可以视为自定义组件内置组件的结合 语法说明 自定义组件的语法如下图所示 各部分…

深度序列模型与自然语言处理:基于TensorFlow2实践

目录 写在前面 推荐图书 编辑推荐 内容简介 作者简介 推荐理由 写在最后 写在前面 本期博主给大家推荐一本深度学习的好书,对Python深度学习感兴趣的小伙伴快来看看吧! 推荐图书 《深度序列模型与自然语言处理 基于TensorFlow2实践》 直达链接…

基于centos7的k8s最新版v1.29.2安装教程

k8s概述 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语&…

AI系统性学习01- Prompt Engineering

文章目录 面向开发者的Prompt Engineering一、简介二、Prompt设计原则1 环境配置2.两个基本原则2.1 原则1:编写清晰、具体的指令2.1.1 策略一:分割2.1.2 策略2:结构化输出2.1.3 策略3:模型检测2.1.4 策略4:提供示例 2.…

css设置选中文字和选中图片字的颜色

要改变页面中选中文字的颜色,可以使用 CSS 的 ::selection 伪元素来实现 *::selection {/* 改变选中文字的背景色 */background-color: #c42121;/* 改变选中文字的文本颜色 */color: #fff; } 用通配符选择器给所有元素都加上了 ::selection伪元素,用于…

鸿蒙开发之MPChart图表开发

一、简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一,因此需要经常使用图表,如折线图、柱形图等。OpenHarmony提供了一个强大而灵活的图表库是实现这一目标的关键。 在 ohpm 中心仓(https://ohpm.openharmony.cn/)中,汇聚了众多开发者…

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

基于JavaWeb+SSM+Vue“鼻护灵”微信小程序系统的设计和实现

基于JavaWebSSMVue“鼻护灵”微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 摘 要 3 Abstract 1 1 绪 论 1 1.1研究背景 1 工作的效率。 1 1.2 研究意义 1 1.3研究现状 1 1.4本文组织结构 2 2 技术介绍 3 2…

Flutter:构建美观应用的跨平台方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java数据结构二叉树练习

1.检查两棵二叉树是否都是相同的练习 我要求时间复杂度为1,所以我们不用前序中序后序是否都一样来进行判断 如何判断二叉树是否都是相同的子问题方式 先判断根节点是否相同 再判断左子树和右子树是否都是相同的 先用代码判断不相同的情况,都相同的化…

Linux:系统初始化,内核优化,性能优化(3)

优化系统的文件句柄数(全局) 也就是系统的最大文件数量 查看最大数量 cat /proc/sys/fs/file-max 当我们的服务器有非常大的一个数据并发的时候十几二十万的文件需要去配置,可能这个是远远不够的,我们就要去修改 vim /etc/sy…

服务器开机不输入密码自动进系统, 与设置开机启动项

打开运行[win R ] 输入: control Userpasswords2设置开机启动项 运行 输入 shell:startup在这里插入图片描述

中国城市统计年鉴、中国县域统计年鉴、中国财政统计年鉴、中国税务统计年鉴、中国科技统计年鉴、中国卫生统计年鉴​

统计年鉴是指以统计图表和分析说明为主,通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴,则是研究者常用的途径。目前国…

【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程

本文作者: slience_me 文章目录 ARIMA 非平稳过程通过差分转化为平稳过程文章原文具体解释详解参照 ARIMA 非平稳过程通过差分转化为平稳过程 文章原文 Many time series forecasting methods start from the classic tools [38, 10]. ARIMA [7, 6] tackles the fo…

sqllab第二十七关通关笔记

知识点&#xff1a; union select 关键字过滤 通过<> /**/进行截断处理 un<>ion sel<>ect 没效果uni/**/on sel/**/ect 被过滤了双写绕过 这关对select进行了多重过滤&#xff0c;无法进行双写绕过 大小写绕过 UNion SElect (这关可以用&am…