UNIX管道和重定向功能在系統(tǒng)備份中的妙用
UNIX命令有三個(gè)有效的數(shù)據(jù)流:標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯(cuò)誤。
管道是從一個(gè)程序進(jìn)程向另一個(gè)程序進(jìn)程單向傳送信息的技術(shù)。與其它形式的進(jìn)程間通訊,如IPC、MESSAGE PASSING、SOCKET等不同,管道特點(diǎn)是單向的。通常,管道把一個(gè)進(jìn)程的輸出傳給另一進(jìn)程作為輸入。在接受進(jìn)程接收信息前,系統(tǒng)臨時(shí)保留管道信息。
UNIX shell中,管道在命令行中由一個(gè)豎杠(|)表示。管道左邊的命令的標(biāo)準(zhǔn)輸出作為管道右邊命令的標(biāo)準(zhǔn)輸入。
UNIX的輸入和輸出重定向可以將命令的標(biāo)準(zhǔn)輸入輸出,從鍵盤(pán)和終端轉(zhuǎn)移定向到其他的設(shè)備文件。
我們可以利用管道和輸入輸出重定向功能,從而在UNIX系統(tǒng)中巧妙地實(shí)現(xiàn)一些功能,舉以下三例說(shuō)明(假設(shè)用戶均有相應(yīng)的權(quán)限)。
I. 主機(jī)tom沒(méi)有磁帶機(jī),而主機(jī)jerry有磁帶機(jī)。
我們?nèi)蝿?wù)是要將tom的數(shù)據(jù)通過(guò)jerry備份到磁帶上。
假設(shè)我們要用tar命令,將/dir目錄備份到磁帶上。
首先,在tom上修改文件/etc/hosts,加入jerry的IP地址:
192.0.0.2 jerry
然后,ping jerry,看網(wǎng)絡(luò)是否通暢。
修改tom的.rhosts,加入下行:
jerry
使jerry為tom的信任主機(jī)。
現(xiàn)在,在jerry上,rlogin tom,正常情況下,不需要口令,應(yīng)能登錄到tom機(jī)上。
在jerry上,運(yùn)行:
rsh tom ""tar cvf - /dir"" > /dev/rmt0h
其中,tar cvf - /dir 是將/dir拷貝到標(biāo)準(zhǔn)輸出,然后再到重定向到主機(jī)jerry的磁帶機(jī)上,完成備份。
II. 如何實(shí)現(xiàn)多臺(tái)主機(jī)的磁帶機(jī)同時(shí)備份,加快備份速度。
隨著信息化進(jìn)程的加快,不少企業(yè)從手工操作發(fā)展到利用信息技術(shù),來(lái)提高生產(chǎn)率,企業(yè)也積累了大量的數(shù)據(jù),其中不少數(shù)據(jù)庫(kù)要求7x24小時(shí)運(yùn)轉(zhuǎn)的。
數(shù)據(jù)庫(kù)的備份過(guò)程,即使不停機(jī)也會(huì)降低服務(wù)器的性能,盡量縮短備份時(shí)間窗的好處是顯而易見(jiàn)的。
但是一臺(tái)UNIX主機(jī)一般只配置一臺(tái)磁帶機(jī)。假設(shè)我們有另外一臺(tái)帶磁帶機(jī)的UNIX主機(jī)可供利用,我們可以利用兩臺(tái)磁帶機(jī)同時(shí)工作加快備份時(shí)間。
#p#假設(shè)有ORACLE數(shù)據(jù)庫(kù)運(yùn)行在主機(jī)tom上,該數(shù)據(jù)庫(kù)有四個(gè)各為2GB的數(shù)據(jù)文件:
/dev/volume1
/dev/volume2
/dev/volume3
/dev/volume4
每個(gè)數(shù)據(jù)文件備份到磁帶上需要15分鐘,如果利用tom自帶磁帶機(jī)備份需花掉1小時(shí)。
我們有jerry主機(jī)帶磁帶機(jī),且空閑。 以下操作利用管道技術(shù),縮短備份時(shí)間。
***步,將jerry做成tom的信任主機(jī),方法同上。
第二步,將備份任務(wù)分為兩組,volume1,volume2在tom上備份,volume3,volume4在jerry上備份。
在tom上運(yùn)行:
dd if=/dev/volume1 of=/dev/rmt0
dd if=/dev/volume2 of=/dev/rmt0
在jerry上運(yùn)行:
rsh tom ""dd if=/dev/volume3"" |dd of=/dev/rmt0
rsh tom ""dd if=/dev/volume4"" |dd of=/dev/rmt0
通過(guò)上述辦法,可將備份時(shí)間縮短一半。如果有更多的主機(jī)加入備份工作,在充分利用網(wǎng)絡(luò)帶寬的情況下,效果將更加顯著。
III. 解決磁盤(pán)空間不足,如何使應(yīng)用程序產(chǎn)生數(shù)據(jù),不經(jīng)過(guò)中間過(guò)程,直接生成壓縮文件。
以O(shè)RACLE數(shù)據(jù)庫(kù)邏輯備份工具exp/imp為例。
ORACLE數(shù)據(jù)庫(kù)用exp備份出來(lái)的數(shù)據(jù),經(jīng)過(guò)壓縮,如compress壓縮,可節(jié)約一半左右的磁盤(pán)空間。但要經(jīng)過(guò)中間過(guò)程,在壓縮中需要原文件大小的約一半的緩沖空間。利用管道可以直接生成最終的壓縮文件,省略中間過(guò)程。
常規(guī)的exp命令運(yùn)行如下:
exp system/manager@testdb file=expdat.dmpfull=y
運(yùn)用管道,如下:
mknod exp_pipe p /* 生成命名管道 */
exp system/manager@testdb file=./exp_pipefull=y /* 將備份數(shù)據(jù)送往管道 */
compress exp_pipe > expfull.dmp.Z /* 生成壓縮備份文件*/
恢復(fù)操作也可以利用管道,跳過(guò)將文件解壓縮,生成原始文件的過(guò)程,如下:
mknod imp_pipe p /* 生成相應(yīng)的命名管道 */
uncompress -c expfull.dmp.Z > imp_pipe/* 將解壓縮數(shù)據(jù)送入管道 */
imp system/manager@testdb file=./imp_pipefromuser=scott
touser=scott /* 將管道數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)testdb*/
【編輯推薦】