如何備份你的 Mac :高階備份法
2006/11/22 4:57 pm 吉米丘

在開始之前,若夥伴還搞不懂,甚麼叫做備份,那可以先看這篇「如何備份你的 Mac :基本備份法」。

接著高階備份法這部份的備份呢,就是要動到系統啦,所以這部份的修改,建議各位夥伴量力而為,或是請專家幫你處理,甚至,或是等未來有夥伴有能力將下面的動作寫成一個程式時候,再來處理吧~

這個高階備份有甚麼特色呢?說穿了很簡單,就是把系統硬碟裡面所有關於「使用者」的東西,全部搬離這台硬碟…




…到你的另外一硬碟分割區,或是另外一個硬碟,甚至是你的外接磁碟陣列,例如吉米就是透過這樣把所有的使用者資訊,改到外接磁碟陣列 RAID1 去。

這樣有甚麼好處?就是系統跟資料分離之後,下次你可以隨意的更新、備份你的系統碟,然後再將使用者資料給「掛」回來,那就又完全可以套用上所有資料啦~

這還有另外一個好處,若你電腦的 OS 壞了,你只要覆蓋回來你的系統碟備份,或是拿出實體的系統硬碟備份(對,吉米就有這樣做一台,以防萬一時,可以馬上接手使用),而使用者資料也會自動從外接磁碟陣列給傳回來,所以不用擔心工作開天窗。

或是你的電腦掛了,送修不會這麼快回來,而你也不是白金級 VIP ,所以也不會有「替代機」可以讓你繼續 work ,那怎麼辦呢?

你就需要這種方式,然後找一台電腦,用你的備份系統碟開機,並且串上你的使用者資料的外接陣列系統,就這樣,你又是一條活龍囉~

而你也不用再那裡,搬動你的資料,搬來搬去,怕哪天忘記少搬了一個,你的資料就會有空窗期囉~

好啦,不多說費話了,那這部份要怎麼做?

A. 首先,請記住備份再備份,先把你的硬碟給完全備份起來吧,最好是用硬碟備份,不燃燒錄成 DVD 或是 CD 也是很漫長的一條路哩~



B. 當然啦,開始將你的個人目錄給複製到其他硬碟去,在終端機裡面要輸入的語法如下…

sudo ditto -rsrcFork -V /Users /Volumes/你的磁碟名稱/Users


上面的 /Volumes/你的磁碟名稱/Users ,其中「你的磁碟名稱」就是你想要移動過去的地方。

或許有人問,我怎麼知道我的磁碟名稱叫做甚麼?

你可以在磁碟管理工具裡面看到下面有這個名稱的顯示,但建議用英文的,不要自己以為很厲害用中文,這樣有甚麼問題吉米不敢保證…




接著,若你的名稱中間有個空白,例如吉米這個名稱為「S2VR DUO」你可別就這樣輸入成 /Volumes/S2VR DUO/Users 喔,因為這樣是錯的。

你要輸入成 /Volumes/S2VR\ DUO/Users 才對喔,也就是空白前面要加上「\」反斜線,才是正確喔。

不過,若你嫌這樣自己輸入太麻煩,又怕輸入錯誤,那你就拿出你「原本」應該有的「直覺」,當你指令打到 sudo ditto -rsrcFork -v /Users 的時候,後面不是還要加上目標目錄嗎?這時候你把你桌面上的目標磁碟的圖示,給拖過來終端機,然後放開,他就會幫你自動輸入那台機器的名稱囉~

有沒有很直覺呢?

所以以吉米的例子來說,存到外 接eSATA 陣列系統 JCMS DATA RAID 就是輸入成

sudo ditto -rsrcFork -V /Users /Volumes/JCMS\ DATA\ RAID/Users





然後按下 Enter…




就開始複製啦~

等待複製完成之後呢,接著就來看步驟 C 。



C. 接著,請執行從你的「應用程式」->「工具程式」->Netinfo管理程式。

並且在User下面,找到你的使用者名稱的簡寫,然後點選他,出現這個畫面,並且先按下左下角的鎖頭解鎖,然後修改 Home 的值




若你不知道你使用者名稱的簡寫是甚麼,你可以在左上角的「藍色蘋果」->「系統偏好設定」->「帳號」->「密碼」這裡看到你的簡寫…




然後改成你的目標磁碟的路徑,這裡又要注意一下喔,這裡的目錄就「不要」輸入反斜線「\」,若你怕出包,一樣,把這格清空,然後去開啟你的那個目錄夾,把他找出來,然後拖來這個輸入格子內,他會自動幫你輸入成上面的路徑,然後儲存並且離開。




記住!!所有的使用者,都要這樣修改喔!!



D. 接著要來告訴「系統」你使用者的 home 目錄搬家了,而這時候不能使用「替身alias」的原因是因為 Mac OS X 底層的 unix 架構,並不認識這個替身,所以要下指令,告訴他實際的對應位置。只是在此之前,要先把原本硬碟裡面的 /Users 目錄全部砍掉,或是改名字。這裡教你的是把他砍掉,所以要用的指令如下:

sudo rm -dr /Users


這樣就搞定啦~

接著你要下這樣的語法來告訴他你的目標磁碟的 Users 目錄,要對應到原本的 /Users 目錄

sudo ln -s /Volumes/你的目標磁碟/Users /Users





接著,按下 Enter,基本上都確認無誤之後就可以重新啟動電腦啦。



當然,故事還沒有結束,若這當中你出了甚麼差錯,例如吉米就是在上面那個 Netinfo manager 那邊輸入錯誤的路徑位置,也就是自以為聰明的在路徑的空白名稱上面加上了反斜線,然後就直接開機,那就當然找不到你的家目錄,導致該 User 無法 login ,而好死不死,吉米又一次把所有人都搬走了…

照成系統沒問題,只是找不到家目錄而無法 login。那怎麼辦呢?很簡單。

將你這台電腦開機成「目標磁碟模式」(也就是開機時,聽到東一聲之後,按著「T」不要放,就會進入目標磁碟模式,也就是這台電腦變成了一台大型的硬碟外接盒,然後用另外一台電腦來連接;並且進入這台硬碟的 /Var/db/netinfo/ 目錄下面的 local.nidb 給複製回來即可。

甚麼?!你沒有備份?!吉米不是老早就要你做一個實體備份嗎?因為吉米發現,雖然你可以直接進去改他的值,但是仍然不會有效,或是參考另外一位夥伴 JK.Chang 所告訴吉米的方法…

NetInfo的使用者資料可以用 /etc/daily 這個來定期備份,會存放在 /var/bacckups/local.nidump
當你的電腦無法登入就可以將原本的使用者資料 Restore 回來。
詳細的步驟如O'Reilly的MacOSX for Unix Geeks。
(我不能保證一定可行, 不過我是照書上的步驟完整寫下, 姑且一試吧! 我想誰也不會想去試這種情況)
1. 用 single-user 開機
2. 修復你的 file system
#/sbin/fsck -y
3. mount root filesystem 可以讀寫
#/sbin/mount -uw /
4. 到 NetInfo database 的目錄
#cd /var/db/netinfo/
5. 將舊的 database 更名
#mv local.nidb/ local.nidb.broken
6. 更換目錄至 startupItems 目錄
#cd /System/Library/StartupItems
7. 啟動 network
#./Network/Networkstart
8. 起始 port mapper
#./Portmap/Portmapstart
9. 起始NetInfo
#./DirectoryServices/DirectoryServicesstart
10. 載入 backup 的 database 到 netInfo
#/usr/bin/niload -d -r / . </var/backups/local.nidump
11. 建立 .AppleSetupDone 檔
#touch /var/db/.AppleSetupDone
12. 重新開機
#reboot


或許可以成功。



E. 行文至此,希望你還沒開始動作,因為吉米還沒說完,以上的動作是架構在你所遷徙過去的磁碟,是開機後就會自動 mount 上去的磁碟,例如內接的另外一台硬碟,或是另外一個磁碟分割區,但若你想要遷徙的是「外接」的磁碟例如火線的磁碟陣列、火線的硬碟外接盒、 USB 外接盒,甚至高速例如吉米在用的這個 CalDigit S2VR Duo 每秒傳輸速率高達 138MB/s 的 eSATA 磁碟陣列外接盒。

那你就需要系統在開機之初,就自動將所有外接硬碟給 mount 裝載完成,這樣他才能在你 login 的時候,找到正確資料,因為原本系統的設定是的外接磁碟的裝載,是在你 login 完成之後才會去裝載的,那這樣就程序不對啦。

所以你需要在 /Library/Preferences/SystemConfiguration/ 目錄下面,新增一個純文字檔案,名稱為 autodiskmount.plist ,並且將下面這段語法貼入,並且存檔,並放置於上面的目錄中即可。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AutomountDisksWithoutUserLogin</key><true/>
</dict>
</plist>


F. 好囉,一切檢查無誤之後,開始重新開機囉,接著就可以開始好好的享受你的快樂時光啦~而你所有的使用者資料,都將會被存放,並且及時的更新於你的外接磁碟陣列(或是外接硬碟)囉~



原文資料:搬動你的 Home 目錄…

http://maczealots.com/articles/home/



原文資料:開機之初,自動裝載所有外接硬碟…

http://www.macosxhints.com/article.php?story=20031103155828117





■ 吉米如此使用一個月後的後記



這個看似完美的招數,其實有個缺點跟大家報告一下,就是當你外移出去含有 Users 目錄的硬碟,吉米繼續以上面的例子名叫「JCMS DATA RAID」,再某次開機,沒有連接上的時候呢,我們偉大的 Mac OS X ,會很自動的幫你「創造」出一個也名叫「JCMS DATA RAID」的磁碟,但是你在電腦裡面打死都找不到他在哪裡,裡面一樣有 Users 的目錄,只是完全回到當初安裝完成的乾淨狀態。

說白話一點,就是說當他找不到 A ,因為沒辦法完成開機程序,所以他自己創造一個 A 來完成這個任務。而你原本的磁碟,就會被偷偷改成「A 1」,以上面的例子,就是叫做「JCMS DATA RAID 1」,但是你在桌面上面看不出來喔~要進入 Terminal 終端機裡面下指令才能發現他們。

這時候該怎麼辦呢?



1. 先打開終端機,輸入下面指令回到 /volumes/ 的目錄

cd /volumes/


2. 然後下指令 ls 看看到底有哪些外接硬碟,而這時候假的 JCMS DATA RAID 也會出現在這裡…

ls


3. 這時候你就會看到例如這樣的畫面…

JCMS DATA RAID      JCMS DATA RAID 1    
等等其他磁碟的名稱


4. 這時候的 JCMS DATA RAID 是假的,是系統創造出來的, JCMS DATA RAID 1 才是真的原本你使用的外接硬碟。



該怎麼辦呢?很簡單,就是砍掉假的 JCMS DATA RAID ,把真的名字換過來, JCMS DATA RAID 1 換回 JCMS DATA RAID !

怎麼做呢?一樣在 Terminal 終端機下面,下下面的指令…

1. 砍掉假的 JCMS DATA RAID…

mv -rf 'JCMS DATA RAID'


2. 砍掉之後呢,就要把原本的 JCMS DATA RAID 1 改回成 JCMS DATA RAID 原本的名字,這裡記住喔,你桌面上看到的那個磁碟名稱還是 JCMS DATA RAID 喔,但實際上在系統核心已經被改名字了…

mv 'JCMS DATA RAID 1' 'JCMS DATA RAID'


這樣就換回來了。

不過,還有一個地方要修改,那就是上面提到的 Net info manager…

你同樣要進去看看你的這個目錄是否仍是連結到正確磁碟 /Volumes/JCMS DATA RAID/ …




若都正確,就存檔離開,然後 logout ,然後再登入即可完成修復程序。

其實不太複雜啦,只是知道怎麼解,就簡單多了…

若上面的語法跟你說權限不足,很簡單,就在語法前面再加上 sudo 即可,例如:

sudo rm -rf 'JCMS DATA RAID'


這樣就 ok 啦。

使用這一個月來,很讚,系統歸系統、資料歸資料,由於吉米使用的外接 eSATA 磁碟陣列速度飛快,幾乎感受不出來與原本的差別。而也不用擔心主機掛掉工作停擺,換上另外一台機器,照著上面的步驟修改一下,又可以完全正常運作了…

不過,說真的,這真的適合高階玩家使用,一般使用者請參考「如何備份你的 Mac :基本備份法」吧~





■ 吉米如此使用三個月後的後記

經過了三個多月的測試,吉米有了新的想法以及經驗分享。

這個玩法,真的相當需要專業性,就是你要知道這些核心的架構以及語法 ,但是呢,若你敢玩,就可以弄得更美妙。

現在吉米把 Users 目錄搬回了系統硬碟。主要的問題在於,若你把他搬離開了系統磁碟,而你開機的時候,存放 Users 目錄的外接硬碟卻沒有來得及掛載時,那就會出現 login 不進去的狀況。尤其是當你將同樣的系統備份到 notebook 上面,要單獨攜帶出門使用時,就會出現問題;或是存放該 Users 目錄的外接硬碟、磁碟機出現問題暫時無法解決時,你就不能正常 login 使用電腦了。

所以吉米目前的心得是,大部分的 Users 目錄仍在系統碟上,但是大量使用存取的資料目錄,例如「文件」、「圖片」、「影片」、「Mail」、「音樂」等,則搬離該磁碟,從外面來…