[華語, cmn-Hant-TW]
今天早上用 MacBook Pro 的時候覺得系統頓頓的,開 Activity Monitor 一看原來是有一個 fsck_hfs 的程序正在狂吃記憶體跟 CPU,接著查 log 發現他是在 fsck /dev/disk1s2 …… 啊咧我明明只有一顆硬碟那個 disk1 是從哪冒出來的啊?
再測試了一些東西之後我猜應該是和 Time Machine 有關,因為只要強制砍掉 backupd 這個程序之後 /dev/disk1 就會消失,所以很明顯的這個 /dev/disk1 是對應到 Time Machine 的磁碟映像檔, 在 Time Machine 開始備份之前會經過某道神祕的程序把磁碟映象檔「加」到 /dev 裡面,然後才開始備份,而這個 fsck_hfs 應該就是在這道神祕程序中被叫起來的,既然是卡在執行 fsck_hfs 這個程式的時候,那當然就要手動來跑一下看是什麼情況。
在這個討論串裡有講到要手動加上 Time Machine 的 sparsebundle 映像檔 (從底層來看他實際上是一個目錄而非檔案) 的方法,首先要執行 hdiutil,假設此檔名為 $image_name,系統對應到 /dev/disk1 (hdiutil 會告訴你他對應到哪個節點):
hdiutil attach -nomount -readwrite $image_name.sparsebundle |
然後再執行 fsck_hfs:
fsck_hfs -f /dev/rdisk1s2 |
這樣就可以看到他跑的過程了,看起來程式執行上是沒啥問題,可能是因為檔案超大所以吃爆多資源而且要掃很久才會有掛掉的錯覺,事實上他是很認真的在 fsck 的啊!