Total Pageviews

Thursday, 12 December 2019

重装你的Mac,不再迟疑

我大约每三年就会清除重装一次电脑。所谓「清除重装(Clean Install)」的具体意义是执行以下步骤:
  1. 选择重要资料备份到外部空间
  2. 重新格式化硬碟并重新安装macOS
  3. 将备份资料重新迁移回原本的地方并恢复原先的环境
听起来有点麻烦甚至吓人。你可能会问,假如我忘记备份某个重要档案,可能是价值$19 的软体授权档案、珍藏的照片或是只输入过一次永远想不起来的密码,那不是给自己找麻烦吗?那究竟为什么我(或是你)还是应该定期执行这个作业呢?
清除重装就是重新夺回你电脑的控制权
电脑经过多年的使用,建立、搬移甚至复制了无数的资料夹跟档案。其中当然部分是有意为之,但其实大部分都不是。这些可能因为系统升级而变动的路径跟档案、新版程式支援新的同步服务搬移不全或是单纯健忘而重复汇入的资料。有时候它们只是单纯占用了系统空间,但有时候它们就是莫名状况的根本原因,例如每次搬移档案到特定资料夹就会出现的密码视窗或是行事历图标的错误日期等等。
撇开这些不谈,假设你的电脑运作完全没问题,多年的使用也表示使用的软体同样经过多年的演进,不管是有更好的替代品或是根本已经下架了。以我的自身经验举例。一开始我使用内建的Mail,然后转换到快速与装置间体验一致的Airmail,再转换到收件匣归零哲学的Mailbox直到它下架,现在则换成了Spark当然,你可能一直以来都用内建的Mail直到现在都没问题。那你有用微软Office 2014 for Mac但现在考虑要转换到Office 365吗?还是从Adobe Photoshop换成Sketch?我的意思是,软体其实一直在演进,定期的检视手上的工具是否合适对依赖电脑产出的工作者尤其重要。
清除重装的过程,我们谨慎地检视使用的软体是否依然合适,档案是否重要到需要备份,还是什么设定让我们觉得安心舒服。过程中,我们重新学习与熟悉的不只是机器本身,还有自己的使用习惯,也因为这个扫盲的过程我们逐渐取回电脑的控制权。当然,这是困难跟有风险的。意识的角落总是积累着灰尘、充满着盲点,这也是意识的特性之一。幸好我们可以透过一些工具让整个过程尽可能地安心跟省力。开心的是,这过程是累积性的,每次完成后的软体清单跟检查表都能让下次的作业更轻松,在软体的使用与选择的意识也会随着每次重新检视而逐渐提升。
清除重装不只是再安装一次而已,重要的是在过程中重新发现对自己最有价值的是什么。
让我们开始吧。这个过程共包含三个部分:备份、重新安装、档案迁移。

第一部分:备份

需求:一个外接硬碟作为Time Machine 使用与存放备份资料使用。
重要的事先做:使用Time Machine执行一次完整系统备份。有了这个保险,我们就有能力还原任何档案,真的是「任何档案」。做错任何事情想恢复?没问题,只要还原即可。
有时候大家在备份资料上会有心有余力不足的情况,原因是根本不知道从哪里开始,但是其实只要仔细想想就会发现,软体是所有资料的核心,所有的资料都由我们所使用的软体而生。所以由软体为出发点思考,我们有这三类资料需要备份:
  1. 你所使用的软体
  2. 你透过软体间接产生的资料,包含设定、历史纪录、备份档案等等⋯
  3. 你透过软体直接产生的静态档案,像是文件、照片、专案资料等等⋯
我们从使用Homebrew列出软体清单开始。Homebrew是一个Mac的命令列软体管理工具,管理的意思是它可以安装、移除还有列出软体清单。如果你像我一样是软体开发者,你可能已经正在用了,如果不是的话也不用担心,单纯地复制贴上以下步骤中的指令就可以让它运作了。
  • 打开内建的终端机程式贴上以下指令按Enter 即可
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
或:bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  • 安装mas-cli外挂让Homebrew支援Mac App Store
brew install mas
  • 使用brew bundle指令列出软体清单
brew bundle dump
这个指令会在当前目录(预设是家目录)新增一个叫做Brewfile的档案:
... 
#格式
# brew 'app_name' 
# cask 'app_name' 
# mas 'app_name', id: xxxxxxxxx 
brew 'mas' 
cask 'java' 
mas 'iMovie', id: 408981434 
...
档案的每一行都会以三个关键字brewcaskmas开头,表示软体使用Homebrew的哪个工具安装:brew大多是命令列工具,cask是以命令列方式安装Mac apps,mas则表示从官方Mac App Store安装。在空格之后是以单引号包住的软体名称。规则可参照上述范例,行列可以互换,#开头的文字视为注解。
接着,检视这个清单并比较你在应用程式资料夹的apps。如果有不在清单上的app,表示这可能是从其他的来源像是开发者的网站或是CD-ROM。使用brew cask search {app_name}指令来搜寻其他替代来源安装
brew cask search java 
==> Exact Match 
java ✔ 
==> Partial Matches 
eclipse-java java-jdk-javadoc netbeans-java-ee netbeans-java-se yourkit-java-profiler 
==> Remote Matches 
caskroom/versions/java- beta
因为brew-cask是社群维护的工具,有很大的机会可以从这边找到安装来源。如果有的话,在Brewfile加入一行cask 'app_name'即可。如果找不到而你又需要这个软体的话,就必须手动备份或是找到其他替代方案了。
完成之后我们就有了详细的软体清单Brewfile,如果怕忘记的话也可以用注解的方式写下软体的用途。之后把这个档案储存在外接硬碟或是Dropbox,我们稍后会用到。
更多Homebrew的细节可以参考homebrew , homebrew-bundle , homebrew-caskmas-cli你也可以查看我的软体清单
我们已经制作也重新检视了目前的软体清单,也写下为什么需要他们的注解,相当确定这就是我们需要的软体。现在进行下一步,也就是软体资料的部分。在这个步骤,我们要打开每一个我们需要的app,检视每一个曾经做过的设定、产生的文件或是资料的备份,用自己的方式记录下来确保我们可以在重新安装后有能力还原。详细的内容根据每个人使用的软体或习惯不同而有所不同,不能一概而论。我自己是在检视完所有软体跟设定之后列出一个检查表,其中的部分内容如下:
*接下来出现的波浪符号~表示你的家目录
系统偏好设定
  • 一般> 使用暗色选单列和Dock
  • 一般> 最近使用过的项目:0 个文件、App 和伺服器
  • 桌面与萤幕保护程式> 萤幕保护程式> 启动前闲置时间:2 分钟
  • 桌面与萤幕保护程式>萤幕保护程式>使用Apple TV Aerial Screen for Mac
钥匙圈
  • 启用iCloud 钥匙圈
Safari
  • ~/資源庫/Safari/Bookmarks.plist 备份书签
  • ~/資源庫/Safari/History*备份历史浏览纪录
照片
  • ~/圖片/Photos Library.photoslibrary备份整个照片图库
iTunes
iBooks
讯息
1Password
  • 启用iCloud 同步
  • ~/資源庫/Containers/2BUA8C4S2C.com.agilebits.onepassword-osx-helper/Data/Library/Backups/备份1Password备份档
字型
Dotfiles(开发者才需要)
  • 备份 ~/.ssh
  • 备份 ~/.gitconfig
  • 备份 ~/.zshrc
最后是静态档案,相较前面两个步骤这是比较简单的。只要检视以下资料夹内哪些档案需要备份即可,或是直接备份每一个资料夹也可以。
  • ~/桌面
  • ~/文件
  • ~/下載項目
  • ~/音樂 除了已经备份的iTunes 资料夹以外的档案
  • ~/影片
  • 其他存放个人资料的资料夹
哒啦!你已经完成了!🎉
温馨提醒,以上并不是完整的清单,完整与否根据每一个人不同的需求而不同。对我来说,我想要我的电脑可以让细碎的片段延续,像是浏览纪录、对话纪录等等这些每天的生活片段。但毕竟每个人偏好不同,说不定你更是把过去抛诸脑后,未来对你才是最重要的类型,完全没问题的。

第二部分:重新安装

需求:一个大于8GB 的​​随身碟
首先,我们需要一个可开机的随身碟
  • 下载macOS Mojave
  • 打开磁碟工具选择随身碟、点击清除、名称使用Untitled、选择Mac OS Extended (Journaled) 重新格式化
  • 終端機输入以下指令来制作可开机随身碟
sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install\ macOS\ Mojave.app --nointeraction
接着,再以Time Machine 完整备份一次并确认完成以下:
  • 你的Time Machine 完整备份已经完成
  • 软体清单Brewfile档案及记载各种设定的文件已经放在Dropbox或外接硬碟
  • 手动备份的档案可以正常的存取准备好搬移
注意:你即将在下个步骤开始删除电脑上的所有档案,你将不能正常使用你的电脑直到新的作业系统安装完毕
最后,开始格式化硬碟并重新安装作业系统:
  • 接上可开机随身碟
  • 重新启动电脑后按住Option(⌥) 键
  • 选择使用可开机随身碟开机
  • 从选单选择磁碟工具并以Mac OS Extended (Journaled)重新格式化硬碟(通常是Macintosh HD)
  • 完成后回到主选单,选择安装macOS 并安装在刚完成格式化的硬碟
  • 依照指示完成安装设定步骤

第三部分:迁移档案

首先,还原曾经安装过的软体,神奇的Brewfile上场了
  • 打开終端機贴上以下指令来安装Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
或:bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  • 复制Brewfile到家目录
  • 输入brew bundle,如有提示则登入AppleID供mas使用
这时Homebrew 将会根据稍早完成的软体清单安装所有软体。这会需要一点时间,等待的同时我们可以边把手动备份的静态档案以原本的方式搬移回去。直到软体安装完毕之后,再把软体资料以原本的方式搬移回去,我们就大功告成啦!🎉🎉🎉

参考资料

  • 我把自己用的流程检查表公布在GitHub上,未来也会持续更新,欢迎自由取用
  • 我也把开发者用的Dotfiles公开在GitHub上,包含我的Brewfile如果你对Dotfiles有兴趣,这是一份由Zach Holman维护的较为复杂的版本
  • 如果你对开发者工具相当熟悉也想要自动化所有流程,可以参考Boxen
感谢你们的阅读。