由 Symlink 引起的数据迁移

作为一个不是很细心的人,以前我一直以为替身和 symlink 是一个东西,而且 OS X 系统也很明确地告诉我,他俩的文件名都为替身,曾经试过用替身将系统文件链接出来,但都没成功,后来就没再研究了,直到这两天强迫症又犯了,看到 SSSSSSSD 的空间不断缩小缩小缩小,想着这其中有许多奇奇怪怪的应用程序我也不常用,但就是占地方,比如 Xcode。在替身的指引下,我又研究了 symlink:

关于这个 Symbolic Link 和普通 替身 也就是快捷方式的区别,这里说一下。

创建替身是 hard link (硬链接),实际上是为文件建一个别名。链接文件和原文件实际上是同一个文件。

symbolic link 建立的是一个指向,即链接文件内的内容是指向原文件的指针。它们是两个文件。

hard link 只能用于文件,不能用于目录;symbolic link 可以为目录建链接。

hard link 不能跨文件系统操作;symbolic link 连接的是文件名,可以跨文件系统建立连接。

这个解释说了半天还是让人一头雾水,简单地说,你把系统文件迁移到别的位置,再建立一个替身放回原来的目录,不可行!建立一个 symlink 放回原来的目录,可行!

于是在 symlink 的指引下,我开始对系统文件进行搬迁操作。首批搬迁的几个大文件有:

  • /usr/local/texlive/2013
  • /Library/Application Support/Adobe
  • /Users/Boyux/Library/Caches,这个目录我选择放在了 RamDisk 里,省得自己清理
  • 更新:/Users/Boyux/Library/Application Support/com.evernote.Evernote
  • 更新:/Users/Boyux/Library/Mail/V2

后来我不满足于 symlink 搬迁,由于我是 SSD+HDD 手动管理的结构(早就不用 FusionDrive 了),属于活在 SSD,吃在 HDD 的模式,这其中的一个问题在于,默认的 Home 目录(也就是那些文稿图片下载目录)放在 SSD 中,许多程序默认调用的目录也都在这个 Home 目录下,但基本上这些数据性文件我都会放到 HDD,通知由于 Home 目录无法编辑,你一编辑系统就提示 OS X 需要这些文件,连管理员权限都不行。我一直都想把 Home 目录迁移走,至于为什么到现在才完成这事儿,主要还是因为我懒…

搬迁的几个问题有:

  • Library 目录的迁移,这个用 symlink 可以解决;
  • 一些程序内有指向性目录的目录变更问题,比如我的三个网盘,尤其以 Dropbox 最为抽风,在更换 Home 目录之后,Dropbox 会直接报错,还不给你修复选项,Google 后发现需要删除home目录下的.dropbox文件,这是一个隐蔽文件…而百度云和坚果云只需重新定位一下目录文件即可
  • 原来建立的 symlink 由于原始文件变更,原来的 symlink 们都失效了,得把他们找出来删除换上新的 link。

这其中有一个小插曲,起初转移的三个文件夹中,那个 2013 文件夹,我只记得是在 texlive 文件夹下,但具体在哪个目录我给忘了,翻遍整个系统目录,又用 cleanmymac 审查了 tex 的相关文件都找不到,后来一翻 simple note,发现自己当时在转移这个文件的时候随手记下了路径,瞬间有种想为自己点赞的冲动,看来习惯记笔记是好事啊,自己有一个好习惯→_→。

但是现实总是有些阻碍,比如我在设置默认截图路径的时候,

defaults write com.apple.screencapture ~/Pictures/Capture

由于我的 HDD 名字里带有 ( 符号,导致命令行里一直出现错误,虽然总觉得能有解决方法,但是为了方便,我直接把磁盘名中括号都去了,结果这一去,程序们又不识别路径了,只能在账户设置里重新指定一下 Home 目录(然后又得和三大网盘抗争一番)。

更改 home 目录或者 home 文件夹名称的方法可参考我的另一片博文:

更改 Mac 账户名称和个人目录名称

目前我的系统已经不会瞎闹腾了,一切都趋于良好,只是在其他软件都正常快速工作的时候,我的 Simple Note 在打开速度上总是慢半拍,想了一下,它的文件存储路径应该还是在 SSD 上,为何打开速度会这么慢…


关于优化 SSD,这里简略地罗列一下

开启 Trim

我用的 Trim-Enabler

变更睡眠模式

sudo pmset -a hibernatemode 0

然后在桌面新建一个空白无后缀文本文件 sleepimage,进入 /var/vm 目录,将桌面的 sleepimage 覆盖到 /var/vm 路径中,然后按 cammand+i 将锁定选项勾上,防止系统更改。这能为 SSD 腾出至少 5GB 的空间。

关闭 time machine 本地备份

sudo tmutil disablelocal

禁用虚拟内存

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

更新:由于一些众所周知的原因,我又开启了虚拟内存→_→

用 `noatime` 方式挂载 SSD

在桌面新建 com.SSD.noatime.plist 文件,用文本编辑器打开后贴上:

Label
com.SSD.noatime
ProgramArguments

mount
-vuwo
noatime
/

RunAtLoad

保存后在终端输入:

sudo mv ~/Desktop/com.SSD.noatime.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/com.SSD.noatime.plist

然后重启,在终端输入 mount,查看 ssd 后的状态是否为 noatime

觉得有必要的,可以添加 RamDisk

打开 AppleScript 编辑器,输入

do shell script "

if ! test -e /Volumes/RamDisk ; then

diskutil erasevolume HFS+ RamDisk `hdiutil attach -nomount ram://$((2*1024*1024*2))`

mkdir -p /Volumes/RamDisk/Chrome/Cache

mkdir -p /Volumes/RamDisk/Safari/Cache

mkdir -p /Volumes/RamDisk/Library/Caches

fi

"

创建 2G 的 ramdisk,并在 ramdisk 中创建三个缓存目录,保存为应用程序,添加到启动项既可。重启后,将三个缓存目录分别建立 symlink 到各个 chrome、safari 和 library 的缓存路径就可以了。

Chrome: ~/Library/Caches/Google/Chrome/Default
Safari: ~/Library/Caches/com.apple.Safari
Library: ~/Library/Caches

当然,一般来讲当把整个 caches 目录搬进 ramdisk 就无需单独设置浏览器缓存了。

大概就这些了…等想起来再补充


突然想到,这么一来,time machine 的备份中就会出现奇奇怪怪的 symlink 链接,然后如果我要换电脑或者重装系统这些链接就会失效,然后就……

算了,用一天 Mac 当一天果粉,没准明天就换 Windows 了呢…

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s