文章目录
- 背景
- 解决方案
- 数据丢失
- 软件安装
- 总结
背景
前一段时间,我的电脑突然就开不了机了,进入安全模式之后,发现硬盘无法读取,大概率是硬盘坏掉了。电脑是 MacBook,自己不太好换。于是跑到华强北,找了一家维修店,师傅给换了一块硬盘就好了(这里感谢一下董老师,带我跑华强北去维修)。
在硬盘坏掉之后,我发现可能会面临以下几个问题:
- 隐私泄漏(社死),电脑里面可能存了不想让别人知道的东东,如果硬盘修复一下又能够继续使用了,维修的师傅可能会看到硬盘上的内容,特别是如果不是立等可取的话,电脑放在别人那里很没安全感;
- 数据丢失,如果硬盘坏掉,里面的数据全部或者部分都会丢掉;
- 系统重装,所有软件重新安装,环境变量需要重新配置,非常的麻烦。
解决方案
因为我的硬盘是整个坏掉了,里面的数据也没办法读取了,所以也不存在社死的问题,换了硬盘之后,我就把坏掉的硬盘拿回家了。
这里主要分享一下数据丢失和软件重装的解决方案。
数据丢失
备份!备份!备份!重要的事情说三遍!
我在家里部署了一台 NAS,所有的数据我都会定期的往里面存,我用的是群晖的机器 DS220+ ,这个型号有两个硬盘插槽,互相备份,除非两块硬盘同时坏掉,否则数据不会丢失。
另外,它里面还有非常多的套件,有一个网盘同步的套件,可以将本地的数据同步到网盘里面,基本上市面上主流的网盘都支持,我就开了个百度网盘,将本地的数据再同步到百度网盘里面,这样就更加不会丢失了。
有个问题,群晖的用户量比较大,用它的 QuickConnect 服务,在外网访问的时候有时候速度会比较慢,在局域网里面就没问题。
这里可以考虑下国产的方案,比如华为家庭存储,使用华为全家桶的话,体验会比较好。
软件安装
还有另外一个让人烦恼的问题,就是换了硬盘之后,软件都必须重新安装,有一些环境变量还需要重新配置,都是一些没有技术含量的体力活,特别费劲。也可以将整个系统进行备份,但是这样就不太灵活,不方便随时更改。
docker可以解决么?
一开始,我想是不是可以用 docker 来解决呢?比如用 docker 部署一个 Android 的开发环境,这样当换电脑的时候,只要把对应的镜像下载到本地就可以了,而不需要再重新安装 java,Android studio,Android sdk,NDK 乱七八糟的一堆东西。
想象得很美好,但实际上好像不太行。docker 本身是用于部署运维的工具,对于 UI 貌似支持得不太好,而且 docker 在 Mac 上虚拟出一个 linux 环境,性能肯定没有直接在本机上跑好,所以这个方案不是很好。
homebrew
接着我想是不是可以用脚本来解决呢?
本质上我只是不想再做一些重复的体力活,如果将安装和配置环境变量的过程用脚本来实现,我只需要执行一下,就自动将环境配置好了,这样也能够满足我的需求,而且脚本还可以随时修改。
然后我就发现了 homebrew 这个神器!我们常用的一些软件,竟然都可以用它来安装,并且安装完成之后自动就帮我们配置好了环境变量!特别方便!
这里可以直接搜索它支持安装的软件
https://formulae.brew.sh/
然后,再写个脚本,就可以将我们需要的软件批量安装了!
分享一下我写的脚本,除了 ohmyzsh 是需要自己写安装过程,其他的软件都只要一行代码就可以了
#!/usr/bin/env base
#一些基础的软件
init() {
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
brew install git
brew install git-lfs
ohmyzsh
}
ohmyzsh() {
# 安装
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
#安装插件
git clone https://gitee.com/bright_007_admin/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
#配置插件
tobeReplaced='plugins=(git)'
replaced='plugins=(git zsh-autosuggestions)'
file=~/.zshrc
sed -i '.bak' "s/$tobeReplaced/$replaced/" "${file}"
#提升速度
git config --add oh-my-zsh.hide-dirty 1
git config --add oh-my-zsh.hide-status 1
}
android() {
brew install --cask android-studio
brew install --cask homebrew/cask-versions/adoptopenjdk8
# brew install --cask android-sdk
# brew install --cask android-ndk
brew install gradle
brew install android-platform-tools
brew install --cask flutter
}
other() {
brew install nodejs
brew install npm
brew install python3
# 博客工具
npm install hexo-cli -g
brew install --cask intellij-idea-ce
}
tools() {
brew install --cask visual-studio-code
brew install --cask snipaste
brew install --cask utools
brew install --cask google-chrome
brew install --cask wpsoffice-cn
brew install --cask betterzip
brew install --cask safeincloud-password-manager
brew install --cask wechat
brew install --cask qq
brew install --cask wechatwork
brew install --cask notion
}
finish() {
brew cleanup
}
#功能:往环境变量文件里面写入内容,如果文件里面已经存在,则不写入
write() {
content=$1
# 环境变量文件
envFile=~/.zshrc
if cat $envFile | grep "$content" >/dev/null; then
echo "已经存在配置${content},不写入"
else
echo "写入配置${content}"
echo "${content}" >>$envFile
fi
}
echo "开始配置"
init
android
other
tools
finish
echo "结束配置"
总结
所以终极解决方案就是 NAS + homebrew