Backup-With-MSDOS mini-HOWTO Christopher Neufeld, neufeld@physics.utoronto.ca v, 5 August 1997 _________________________________________________________________ 此份 HOWTO 記述如何利用 Linux 相容的磁帶機安裝在 MS-DOS 的機器,來備份 Linux 機器的檔案系統 ( filesystem )。 _________________________________________________________________ 1. 前言 / 介紹 2. 方法 3. 備忘錄 4. 版權 _________________________________________________________________ 1. 前言 / 介紹 早先我在網上提出如何用 Colorado Jumbo 250 磁帶機﹝tape drive﹞在 MS-DOS 的機器上備份 Linux 機器這個問題。從我所回收的電子郵件中顯示,這 是一個經常被思考的問題。現在我將它整理後,公佈作法。如果有任何人想要把 這個放入 HOWTO 文件中,請讓我知道。 我要感謝 Jim Nance ﹝ [1]jlnance@isscad.com﹞ 指出 MS-DOS 的機器不一定總是個 MS-DOS 的機器。 這個方法應該也可以運用在任何其他被 ftape 模式所支援的磁帶機,及由於適當 明顯改變的 SCSI 磁帶機 ﹝例如替換 /dev/st0 for /dev/ftape﹞。 我所設定的標準﹝criteria﹞是起源於設定應該儘量安全與相當簡單,並只佔用 一點或無須MS-DOS 機器上的硬碟空間。它應該也能復原最糟的系統情況,甚至包 括硬碟的遺失,或需要恢復為最原始的 Linux 檔案系統。在此記述的方法無須使 用 MS-DOS 機器的硬碟空間,可是那機器需要被指定﹝assigned ﹞一個 IP#。你 將需要三片已格式化的1.44 MB 軟式磁碟片。 2. 方法 在這份文件的各處,我將會提到兩個機器如 ``msdos'' 與 ``linux'' 。``msdos'' 是機器的名稱,它必須擁有一個磁帶機,而通常執行 MS-DOS 。``linux'' 是你嚐試去藉由磁帶機來備份或恢復它的磁碟的 Linux 機器。 為 簡單起見,我將第一部機器稱做 msdos'' 即使它在執行 Linux。 此外,所有文 件中的路徑﹝path﹞名稱應該加以考慮 Linux 機器與搜尋及救援 ﹝Search-And-Rescue (SAR)﹞的磁片裝置於何處,兩者在系統上的相對的關係。 那意謂著如果檔案 /etc/passwd 是一個你的 Linux 機器的硬碟中的加密檔案 ﹝password file ﹞,此時在這種情況,/tape144/etc/passwd 是在軟碟機上的 相對應檔案。 我使用 Karel Kubat 的備份命令稿﹝scripts﹞,版本數 1.03,可於此處得到 [2]ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.g z 在文件各處,我將會簡單的提及這些``備份命令稿''。 你不一定需要使用這個命 令稿來備份你的東西到磁帶機上。 我喜歡這些命令稿, 因為他們使用 afio 把壓 縮檔解壓備份, 而不是把檔案壓縮備份. 前者比較安全, 因為 restore 時若有一 點讀取錯誤, 不會造成所有檔案復原失敗。我聽聞 Karel 不再支援 ﹝supporting﹞檔案備份,但現在有產品 'tob' 或磁帶導向﹝tape oriented﹞ 的檔案備份。 雖然我自己並未嚐試過新的套裝軟體,它不可能與此處程序的描述 要點有重要的差異。 所有的起頭,獲得 ftape 模組﹝module﹞。它是所有現代核心的一部份,但如果 你使用較舊的核心,你可以在此處找到這個模組: [3]ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz 接下來,取得 Slackware 開機磁碟 ﹝我使用網路磁碟,但這沒什麼不同﹞與 tape144 根磁碟,提供翻版﹝the images ﹞有關 3"1/2 軟碟機。 要用 ftape 這個模組,它的版本一定要和你在編譯 ftape 時用的那個核心的版 本一樣才行。 我不能在 tape144 根磁碟﹝ root disk﹞使用 ftape.o 模組,我 想是因為該模組為符號﹝symbols ﹞所剝奪﹝stripped ﹞而沒有安裝。所以你現 在必須自網路取得支援 ftape 新 ftape.o 的新核心﹝如果你使用舊的核心﹞。 詳讀隨 ftape 檔案傳送的指引來指導此階段。 記住,你所編譯的核心必須支援 Linux 與 MS-DOS 兩台機器的乙太網路卡。 複製較新的核心副本覆蓋網路開機磁碟上的。 使用 /bin/cp,而非利用 ``dd'' 命令建立一個開機磁碟,如同你建立一個可開機的核心副本﹝kernel image﹞。 將開機磁碟寫上保護,標示它為 SAR#1。 現在,裝上 tape144 根磁碟。 我將假設裝設的點在 /tape144,來避免檔案名稱 的混淆。 我們需要去釋放它的一些空間,所以刪除接下來的檔案: /tape144/bin/dialog /tape144/bin/elvis /tape144/bin/vi /tape144/boot/ftape.o 現在,建立一個新檔案: /tape144/etc/exports 它將包括接如下的一行: /mnt msdos(ro) 此處的 ``msdos'' 應該要以有安裝磁帶機的 MS-DOS 機器的名字或 IP# 來取代 。 然後,如此你不需要去依賴姓名伺服器﹝name server﹞,加入幾行 Linux 與 MS-DOS 機器的名字與 IP 號碼到檔案 /tape144/etc/hosts。 舉例來說,我的包 括如下的兩行: 128.100.75.114 caliban.physics.utoronto.ca caliban caliban.physics 128.100.75.111 ariel.physics.utoronto.ca ariel ariel.physics 現在,有一些關於 inetd 配置﹝configuration﹞這類的問題。我們在它中輸入 rsh daemon 完整的路徑。 改變 /tape144/etc/inetd.conf 中第十九行成為: shell stream tcp nowait root /usr/etc/tcpd /usr/etc/in.rshd 加入局部網路﹝local net ﹞通訊路徑資訊到 /tape144/etc/rc.d/rc.inet1,讓 MS-DOS 的機器能使用網路。 這格式﹝format ﹞依靠你的網路配置而定,你可以 自你的 Linux 中 /etc/rc.d/rc.inet1複製出適當的格式。 在我的網路,需要被 增加一行: /etc/ifconfig eth0 128.100.75.111 broadcast 128.100.75.0 netmask 255.255.255.0 /etc/route add -net 128.100.75.0 netmask 255.255.255.0 在進入 ifconfig 的 IP# 是 MS-DOS 機器的那個。 現在,複製這個檔案到 /tape144/etc/rc.d/rc.inet1-l,並且在新的檔案改變 IP# 在此檔案中可反應此為 Linux 機器而 不是 MSDOS 機器. 再來,剪下 /tape144/etc/rc.local中的第 3 到第 11 行。 那是個執行檔案 rc.inet* 的指令。 我們不希望這事在開機的時候發生。 建立一個新的檔案:/tape144/root/.rhosts 包括此行: linux root 此處,再一次的, ``linux'' 代表替代所有的機器名稱﹝包括領域﹝domain﹞﹞ 或 Linux 機器的 IP#。 在 /tape144/etc/passwd 的密碼區域填入密碼給 root login,並且你在做備份 時, 避免別人 login 到 MS-DOS 機器。 你可以藉由自你 Linux 機器的 /etc/passwd file 複製對應的領域來達成。 複製 /usr/bin/rsh into /tape144/usr/bin. 複製接下來的檔案,由 /usr/etc 到 /tape144/usr/etc: in.rshd rpc.mountd rpc.nfsd rpc.portmap services tcpd 建立一個新的命令稿 ── /tape144/bin/tapesetup,它由接下來的所組成: ﹝ 改變 ``linux'' 對應成為你的 Linux 機器的名字﹞。 #! /bin/sh /bin/sh /etc/rc.d/rc.inet1 /bin/sh /etc/rc.d/rc.inet2 /bin/mount linux:/nfs /mnt /bin/insmod /mnt/ftape.o 注意!最近的核心將不需要 insmod 這行。 接下來,建立另外一個新的命令稿 ── /tape144/bin/msdosset,內容如下: ﹝改變 ``linux'' 對應成為你的 Linux 機器的名字﹞。 #! /bin/sh /bin/sh /etc/rc.d/rc.inet1 /bin/sh /etc/rc.d/rc.inet2 mount linux:/mnt /mnt /bin/insmod /mnt/ftape.o 如同上述的,新的核心將不需要 insmod 這行。 建立一個易讀的檔案 ── /tape144/root/notes,它包括用來完全復原時此處所 列的有用資訊: 為了完全復原一個垃圾硬碟,使用 SAR 磁片 #1 與 #2 來將你的 Linux 機器開機,然後如 下輸入: /bin/sh /etc/rc.d/rc.inet1-l /bin/sh /etc/rc.d/rc.inet2 /usr/etc/rpc.portmap /usr/etc/rpc.mountd /usr/etc/rpc.nfsd 接下來,插入 SAR disk #3 且輸入: mount /dev/fd0 /mnt 建立一個新的安裝點﹝mount point﹞,以: mkdir /mnt2 並安裝﹝mount ﹞你的 Linux 硬碟分割區在這個 點﹝point﹞上。 首先你可能需去重新格式化﹝reformat ﹞分割區。如果如此,依循記述在 Linux 安裝 HO WTO﹝Linux Installation HOWTO﹞中的方法。 SAR 磁片包括了所有執行重新格式化時所需的檔案。 最後,使用磁片 SAR#1 與 SAR#2 將 MS-DOS 機器開機,並且在那個機器上執行 /bin/msd osset 命令稿。 它可能需要耗費一點時間去執行那個命令稿,因為它必須由軟碟機上取得 NSF 檔案,所以 請忍耐片刻。 現在,在 Linux 機器上由磁帶機重建 /mnt2。 如果你使用備份命令稿﹝backup scripts ﹞,你將必須複製 'afio' 到 /tape144/local/bin 子目錄。 此備份命令稿檔案不需要在重建的磁碟上有暫存 空間,檔案﹝archive ﹞可以僅使用 'afio' and 'gzip' 就可以重建。 當它們送來時,我還不會使用備份命令稿。 這個磁帶備份似乎完整無缺 ,但無法 復原(救回)。我發現升級區塊容量﹝block size ﹞與轉變指令來修正它。 這裡 所示的是 ``netbackup'' 命令稿的片段。 利用這個修補程式來更改 Linux 機器 硬碟上的和 SAR 磁碟上的 netbackup 程式。 *** netbackup.orig Mon Jan 9 17:22:32 1995 --- netbackup Mon Jan 9 17:23:25 1995 *************** *** 35,41 **** "'mknod", devname, "p'"); exec ("su -", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "of=" REMOTE_DEVICE, "obs=20k", "conv=sync\"", "<", devname, "'&" ); --- 35,41 ---- "'mknod", devname, "p'"); exec ("su -", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "of=" REMOTE_DEVICE, "\"", "<", devname, "'&" ); *************** *** 50,56 **** "'mknod", devname, "p'"); exec ("su", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "if=" REMOTE_DEVICE, "ibs=20k", "conv=sync\"", ">", devname, "'&" ); --- 50,56 ---- "'mknod", devname, "p'"); exec ("su", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "if=" REMOTE_DEVICE, "\"", ">", devname, "'&" ); 你現在完成你的 SAR 磁片 #2。 請加上防寫保護。 接下來,插入一個乾淨的、格式化完成的磁片﹝利用 fdformat 與 mkfs 來建立 ﹞。 複製 ftape.o 檔案到磁片上,並且標示為 SAR#3。 如果你對此磁片採用防 寫保護,因著某些理由,事情將會變糟。 所以請讓它可以寫入。 在 Linux 機器上,為 NFS 檔案服務建立一個新的目錄。 我建了一個目錄: /nfs 將 ftape.o ﹝unstripped,約 500+ kB﹞,至此子目錄。 在你的 Linux 的輸出 檔案 /etc/exports 上建立一個登錄﹝entry ﹞: /nfs msdos(ro) 注意!你的 NFS 目錄與其子目錄的所有檔案均為非安全的。 某些人也能夠利用 他自己的開機磁片來開啟 MS-DOS 機器進入 Linux 並 mount 這個目錄。 如此一 來,你不要放置任何敏感的東西在你的 NFS 子目錄。 重新啟動你的 NFS 駐留程式﹝daemons﹞rpc.mountd 與 rpc.nfsd。 它們似乎無 法用 SIGHUP 重新啟動,所以刪除它們然後再重新引用﹝reinvoke ﹞它們。 如 果你並不是使用這些駐留程式在你的 /etc/rc.d/rc.inet2,你現在或許要去用它 。 好了,現在我們完成了備份與重建所有的設定。 完全備份 Linux 機器,利用 SAR#1 來開啟你的 MS-DOS 機器。 當出現第二片的提示時,放入 SAR#2 讀取。 使用 root 登錄,執行命令稿:/bin/tapesetup。 登出 MS-DOS 機器。 如果你 使用備份命令稿,則程式 netbackup 現在將會運作。 你也可以使用 ``-f msdos:/dev/ftape'' 啟動 GNU tar、cpio 或 mt,並利用此法製作你的備份。 如果你擁有備份程式,但它僅可以寫成局部檔案﹝local file﹞,如下操作。 假 定該備份程式被稱為``局部備份﹝localbackup﹞'' ,寫入的檔案藉由該程式命 令列的引數﹝argument﹞來表示: mknod /tmp/tapepipe p rsh msdos dd of=/dev/ftape < /tmp/tapepipe & localbackup /tmp/tapepipe 當它完成,刪除 /tmp/tapepipe。 復原到一個活的﹝live ﹞Linux 機器: netbackup 命令稿、tar、cpio 與其他 相似的在除了部分操作者使用的特別動作外將可完成全部的工作。 如果你擁有一 個備份程式,但它僅能寫到局部檔案﹝local file﹞, 執行: mknod /tmp/tapepipe p rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe & localrecovery /tmp/tapepipe 刪除 /tmp/tapepipe 在你完成之後。 留心我使用 'rsh' 成為在 MS-DOS 機器上的基本使用者。 一個正確的 .rhosts 項目可以工作正常。 這個在 'tape144' 磁碟上的配置准許 rsh 成為一個 root ,但不准許 telnet 或 rlogin 成為 root,控制台﹝console﹞的登入是被限制 的。 如此有益於安全性。 如果你擔心基礎的 .rhost 檔案,你可以建立一個新的使用者 ``tapeuser'' 在 SAR#2 上,以准許來操作磁帶機但並非磁碟﹝建立一個新的群組﹝group ﹞並將 tapeuser 置於該群組,然後 chown 與 chmod 檔案 /dev/rft* 與 /dev/nrft*﹞ 。 你的備份程式當時應該能了解 rsh 這個名字相較於 root 更適合。 當然目前 得有一個 .rhosts 檔案在 ~tapeuser 在 SAR#2。 在我自己的使用,相較於一個 基礎 .rhosts 我會選擇此種方法。 終於,這份文件圓滿的復原一個垃圾硬碟。 假定現在 Linux 分割趨勢完全不能 復原的。 如果有需要,像 Linux 安裝 HOWTO上說的重新格式化該分割區。 自 SAR 磁片 #1 啟動 Linux 機器,當出現提示,插入磁片 #2。 現在,依循在檔案 /root/notes 中的敘述﹝這裡是 /tape144/root/notes ,在當它被安裝上你的 Linux 機器時﹞。 一但兩台機器都被啟動完成,執行你需要的復原慣例﹝ recovery routine ﹞。 如果你是使用備份命令稿,你可以如下操作: 1. 改變你將恢復的硬碟安裝點的指南﹝directory ﹞。 2. 如果任一 mounted volumnes 已在此備份上, 而你想把它們復原,你只要在 硬碟上建一些 mount point, 然後把備份 mount 在這些 mount point 上。 3. 輸入命令: rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 - or rsh -n -l tapeuser msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 - 或 mknod /tmp/backpipe p rsh -n msdos dd if=/dev/ftape >> /tmp/backpipe & afio -i -v -Z -c 1024 /tmp/backpipe 這裡是讀取在遠方機器上的磁帶機,將結果寫到 stdout,那是 afio 所點取的地 方。 '-i' 參數告訴它用相對於'目前目錄'來 recover ﹝此處是硬碟分割區的根 目錄﹞。 '-v' 是很冗長的,列出它們復原的檔案清單。 '-Z' 告訴 afio ,此 為一個各別的壓縮檔案。 '-c 1024' 告訴它使用 5 MB 的流動緩衝區來避免太多 的磁帶轉回動作。 3. 備忘錄 在 /tape144/root/notes 檔案中列出的命令可以在命令稿上執行。 當我在嚐試 的時候,我得到 rpc 設定錯誤。 我猜想它只是命令執行的太快,portmapper 自 己沒有適當的安裝完成。 我發現手動輸入順序﹝sequence ﹞的工作情形良好, 所以我推薦如此。 我想這是一個安全的設定方法。 有人仍可以在你取出磁帶前, 先一步把磁帶取出 將所有檔案讀出. 對於重視資料機密的人會考慮備份資料流的加密. 也就是說, 原備份的輸出 pipe 到加密程式再把加密程式的輸出送到 之前所說的 /tmp/tapepipe. 但是要住意, 這個加密的備份在復原過程中的錯誤,將導致在該 點之 後的所有檔案無法復原, 因為該備份是一個獨立的 DES 加密資料流。 我們 也可以用 afio 的選項, 先把每個檔案 gzip 再做加密. 但這種 先壓縮的作法會 導至一堆已知的字串(gzip 過會有固定 header), 比 較容易被破解. 所以比較好 的作法是跳過 gzip, 直接做 DES 加密, 代價是需要較多的磁帶空間. 不用說也 知道, DES 加密是不作壓縮的. 我附上的 rc.inet1 寫法只能使用在地區網路 (Local network) 上,而不能用一 個 Gateway 和外界溝通。 在完全恢復到空白硬碟的期間,SAR 磁片 #3 提供 ftape.o 讓 MS-DOS 機器穿過 NFS。 這是因為 ftape 模組某些舊的版本不能在有磁片在軟碟機時管理某些磁帶 機。 在較新的核心程式,所有的 NFS 要素﹝stuff ﹞會被忽略。 這是非常重要的。 ***測試*** SAR 復原程序。 I did, but don't leave anything to chance. 確定你可以僅使用 SAR 磁片復原至少一個檔案到 Linux 機器上﹝例如沒有安裝硬碟﹞。 如果你不能重新啟動 Linux 機器在不照成太多 使用者不便的情況下,改變在 SAR 磁片中的設定資訊,指派 ``linux'' 的身分 到另一個 MS-DOS 機器,然後啟動兩個 MS-DOS 機器進入 Linux 去確定均可正常 運作。 然後,將 ``linux'' 的身分修正回來,如此你擁有一個可用的 SAR 磁片 。 4. 版權 Copyright Jan 10, 1995 by Christopher Neufeld ( [4]neufeld@physics.utoronto.ca) 修正於 二月 6, 1996. 修正於 八月 5, 1997. References 1. mailto:jlnance@isscad.com 2. ftp://sunsite.enc.edu/pub/Linux/system/Backup/backup-1.03.tar.gz 3. ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz 4. mailto:neufeld@physics.utoronto.ca