2015年3月8日 星期日

隨遇而安四海為家的 linux (如何把 linux 備份/還原/複製到別部機器)

飛行在天空中的 snoopy 的家 [2017/3/2 根據 V字龍Vdragon 提醒而重新改寫: 應該要用 fsarchiver 而不是 tar 來做備份還原, 這樣 Extended Attributes 等等資訊才不會遺漏。]

(熟悉 linux 的讀者應該都知道這件事; 這篇是為我學生而寫的。) 想要備份/還原一般的 linux 甚至是把它搬到另一部電腦, 其實非常簡單, 除了拷貝整個檔案系統之外, 只需要改一個設定檔。 你想: linux 隨身碟遇到哪一部機器都能開機, 它還會在乎當初是被安裝在哪一部電腦的嗎? 以下是我經常做的備份/還原分解動作 -- 還原到另一個分割或另一部電腦, 就變成複製。 也就是說, 一個版本的 linux 只需要安裝一次, 從此以後就可以輕易地把它搬到其他任何一部電腦上。 同樣的道理, 本文也適用於 P2V (實體機=>虛擬機遷移, physical to virtual migration) 的情境。 以下假設你已在 /dev/sda99 這個分割裡面安裝好某個版本的 linux -- 比方說是 debian 7.8 好了。 備份步驟如下:

  1. 關機後, 用另一個 linux (例如 阿貴版 finnix) 重開電腦。 這樣才能把 /dev/sda99 當做資料 (而非系統) 分割來處理。 以下稱這部電腦為 原始機
  2. 檢查剛裝好的分割是否一切正常: fsck -f /dev/sda99
  3. 假設 /backup 子目錄已經掛載了一個尚餘很多空間的分割。
  4. 備份: date ; fsarchiver savefs /backup/debian-7.8-a.fsa /dev/sda99 ; sync ; date 如果需要備份好幾個分割, 就直接在/dev/sda99 後面加上更多參數(用空格分開)。 詳見 fsarchiver 的手冊範例。

每做了一些設定、 新增一些套件, 到達一定的里程碑, 我就會把 /dev/sda99 上面的 /var/cache/apt/archives 清空, 並且如上製作 -b.fsa、 -c.fsa、 -d.fsa、 ... 各里程碑版本的備份。

從此以後, 想要把這個備份還原到其他任何一個分割, 甚至是另一部電腦上, 都變得很簡單。 假設要還原的目的地分割是 /dev/sdz77 好了: date ; time fsarchiver restfs /backup/debian-7.8-a.fsa id=0,dest=/dev/sdz77 ; date 如果需要還原好幾個分割, 就直接在 id=0,dest=/dev/sdz77 後面加上更多類似的寫法(用空格分開)。 詳見 fsarchiver 的手冊範例。 可以另開新分頁, 用 df 查看進度。

再來, 如果 /dev/sdz 上面原先並沒有安裝開機管理員 (例如這是一顆新的硬碟,或是剛剛跟著 /dev/sdz77 一起被燒毀了) 那就要先用 finnix 開機, 再從以下工具當中任選一個來安裝開機管理員:

  1. extlinux
  2. mbootu2 (底層其實採用 extlinux)
  3. grub 0.97
  4. mk-boot-usb (底層其實採用 grub 0.97)

以上工具 finnix-ckhung16c 裡面都有。 接下來查看 /dev/sdz77 的 UUID: blkid /dev/sdz77 或是掛載 /dev/sdz77 並查看它的 /etc/fstab 也可以 -- fsarchiver 在還原時已自動幫我們把它裡面的 /dev/sdz77 改成新的 UUID。 假設印出 Filesystem UUID: fedcba98-1234-5678-9abc-0123456789ab 根據這個數值去編輯 /dev/sdz 的 boot loader 的設定檔: 如果是 extlinuxnano ..../extlinux.conf 如果是 grub 0.97nano ..../menu.lst。 不論是哪個 boot loader, 總之要把原始機的開機選單的內容剪貼過來, 並且找到 root=/dev/sda99 那一段, 把它改成 root=UUID=fedcba98-1234-5678-9abc-0123456789ab

也有可能這幾個設定檔原先的寫法本來就是 UUID=... 而不是 /dev/sda99 。 (沒把握的話, 就回原始機 blkid /dev/sda99 確認一下那就是 /dev/sda99 的 UUID 沒錯。) 總之要改成 /dev/sdz77 的 UUID。 然後重開機, 就可以開機進入複製好的 linux。

windows 跟 linux 的 venn diagram 你從來不知道複製作業系統可以這麼簡單吧? 去問問微軟專家, 看 windows 有沒有這麼彈性好用 :-) (他應該會幫你上一堂智慧財產權洗腦課 哈哈)

我的研究室跟家裡有一堆機器, 每次升級或移民 (更換 linux 版本) 都是這麼做的, 要不然就累斃了。 偶爾會遇到顯示卡不支援。 這時可在開機選單上面加上 "nomodeset" 選項, 採用未加速、 較安全的顯卡驅動程式。 詳見 問答一 問答二

沒有留言:

張貼留言