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 好了。 備份步驟如下:

[2020/12/4 原先推貴哥版 finnix 的地方通通改推較新的貴哥版 grml linux]

  1. 關機後, 用另一個 linux (例如 貴哥實驗室版 grml linux) 重開電腦。 這樣才能把 /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 一起被燒毀了) 那就要先用 grml linux 開機, 再用 mbootuz mkboot /dev/sdz 把開機管理員 extlinux 安裝到 sdz 的第一分割裡面的 /boot/syslinux 子目錄。 接下來查看 /dev/sdz77 的 UUID: blkid /dev/sdz77 或是掛載 /dev/sdz77 並查看它的 /etc/fstab 也可以 -- fsarchiver 在還原時已自動幫我們把它裡面的 /dev/sdz77 改成新的 UUID。 假設印出 Filesystem UUID: fedcba98-1234-5678-9abc-0123456789ab 根據這個數值去編輯 /dev/sdz1 裡面的 boot loader 的設定檔: nano /media/sdz1/boot/syslinux/extlinux.conf (假設 /dev/sdz1 掛載在 /media/sdz1) 要把原始機的開機選單的內容剪貼過來, 並且找到 root=/dev/sda99 那一段, 把它改成 root=UUID=fedcba98-1234-5678-9abc-0123456789ab。 設定檔的語法詳細解說請見 extlinux 多重開機分解動作教學

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

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

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。