ClearCase的備份策略(經典)

1 前言

ClearCase在IT軟件開發公司中作爲配置管理平臺被使用時,由於存放着大量重要IT項目數據,所以許多公司愈來愈重視ClearCase數據的備份保存。因此本文以<<ClearCase Administrator’s Guide>>中的第10章爲依據和引用,在翻譯的基礎之上對常見的ClearCase備份策略進行闡述。

2 ClearCase數據的備份

ClearCase管理人員重要任務就是定期備份數據。管理員在針對ClearCase VOB和View(視圖)進行備份時,不僅應該考慮VOB和View有其特殊的備份和恢復特性,而且在UCM(統一變更管理)方式使用ClearCase的環境中,Vob之間或者VOB同ClearQuest Database之間有着緊密的數據相關性,備份時應該尤其給予重視,本文會說明如何在保證數據相關性的基礎上進行備份。

注意:在本文的示例中,關於介紹使用tar進行數據拷貝時,應確保所使用tar版本能夠拷貝目錄中的所有文件而不管其文件大小。如果tar沒能拷貝所有文件,則備份將會失敗。

2.1 備份工具的要求

Vob和View的數據在物理上看都是普通文件和目錄,它們可以使用常用的文件備份工具來備份,備份工具需要具有下面幾個特徵:

  • 能夠備份超大文件。最大文件的大小受操作系統和存儲設備的限制,在VOB的schema 54版本中可以支持超過2GB的文件。確保備份工具可以支持這樣的大文件。
  • 能夠保存NTFS ACLs。當Vob和View存儲在Windows平臺上的NTFS文件系統中,VOB和View的NTFS ACL是很重要的,VOB和View也可存儲在FAT文件系統中(不推薦),備份工具應能夠完整的保存NTFS ACL信息。
  • 能夠備份處於打開狀態中的文件。在ClearCase所有支持的平臺上,即使VOB被lock住,Vob server仍然可以讀取和寫入Vob數據庫。(在lock住Vob後,clearcase自身的程序和服務仍可以讀取VOB數據庫,除非將Clearcase的服務停止。)所以備份工具應能夠備份處於打開讀取狀態的文件。許多系統工具如copy和xcopy並沒有這種能力,因此不要使用這種工具。
  • 保存文件訪問時間。在linux和unix平臺上,tar常用於系統的備份,但會重置文件時間,對於VOB,文件最後訪問時間會影響對DO(Derived Object)和存儲池(Cleartext storage pool)的清洗(scrubber),那些需要清洗的文件就不會被清理掉,對於這些平臺上VOB的備份,cpio是不錯的選擇(linux和unix平臺)。

2.2 VOB備份策略

進行Vob備份前必須考慮的要點:

備份所有必需的數據;Vob必須在加鎖(lock)的狀態下備份,加鎖的Vob會阻止數據變更(例如check-in)的寫入。如果VOB服務不能定期停機,應仔細考慮備份策略,儘量減小鎖住Vob的時間。在有管理Vob的環境裏,這些有着超連接(hyperlink)的Vob必須同時備份與恢復。同樣,在ucm集成ClearQuest的環境中,PVob與ClearQuest的Database中存在着很多關聯,需要制定詳細的備份和恢復計劃。建議在制定備份策略時,首先知曉VOB存儲目錄的結構。

2.2.1 常規備份還是快照備份(snapshot backup)

常規備份是指應用備份工具備份VOB服務器上的物理目錄, 使用快照備份需要使用 Vob_snapshot工具,這種備份可以減少Vob加鎖的時間。

常規備份是指首先應對Vob加鎖,備份整個Vob存儲目錄,最後在Vob解鎖。Vob必須在備份過程中處於鎖定狀態。如果備份工具不能正常備份這些處於寫入的文件,則需要停止 Clearcase服務後再進行備份。在Vob處於鎖定狀態時,會阻止所有的檢出(check-out),檢入(check-in)以及其他影響到Vob數據的操作。這包括UCM中deliver和rebase操作,這些都需要merge。VOB處於加鎖狀態時,開發人員可以在已經checkout或hijack(僅適用於快照和Web視圖)的文件版本上工作。Clearmake和Omake在Vob處於鎖定狀態時處於休眠狀態並定時重試。詳細的設置可以查看Clearmake 的命令行參考手冊。

常規備份特點:

  • 當clearcase的服務停止時,在該服務器上的所有vob和view都將不可用;
  • 當備份至其他的物理設備時,本機不需要額外的磁盤空間;VOB的database與存儲池同時備份與恢復,所以不會有數據的丟失。

快照備份是指在加鎖狀態下僅備份VOB database目錄,其他目錄在非鎖定狀態下備份,這樣可顯著減少加鎖VOB的時間,尤其適用於特別大的VOB時使用這種方法備份。Vob_snapshot可以簡單的配置成Clearcase任務,計劃定期執行。

Snapshot的備份特點:

  • 必須使用能夠拷貝處於打開狀態的文件的備份工具。鎖定Vob,執行完Vob_snapshot後,解鎖Vob,備份VOB中的其他存儲目錄。如果在備份過程中有用戶在寫入,則在恢復後可能會有數據的丟失;
  • 需要更多的存儲空間。snapshot備份過程中會把Vob db目錄拷貝在本地磁盤中,另外,每個Vob的source pool容器中的數據被新的版本信息取代時,會多保留30分鐘。這樣在Vob恢復後,可以提高使用checkVob 同步Vob database和storage pool成功的機率。恢復過程複雜;
  • 由於Vob storage pool和Vob database是在不同時間備份。因此在恢復後要進行同步,尤其是在進行snapshot與備份其他storage pool的間隔過程中,如果有DO和元素版本的增加或刪除,則必須用checkVob解決;
  • 恢復時可能會有數據丟失。如果恢復的storage pool比database舊,則恢復後會有一些數據丟失。如果恢復的storage pool比database更新,database會不包括新增加文件和版本的參考信息。詳情參閱checkVob -force –fix命令說明。

注意:不存儲部件(component)的PVOB沒有數據信息存儲在pool中,它可以使用Vob_snapshot進行備份且不會有數據的丟失。所有snapshot備份方式更適合備份此類PVOB。

2.3 應用Vob_snapshot進行備份

使用snapshot進行備份,首先要運行Vob_snapshot_setup,這個命令會安排在VOB中定期執行vob_snapshot操作(默認爲每天),更加詳盡的信息需要查看Vob_snapshot_setup和Vob_snapshot的命令行參考手冊。當設定某些Vob採用快照備份時,必須進行連續的操作以確保整個Vob備份的完整性。 連續操作:

  • 備份整個VOB存儲目錄,包括可能存在的遠程storage pool,儘可能在Vob_snapshot一完成後進行,此備份不需要鎖定VOB,如果能夠在Vob_snapshot完成後的30分鐘內完成備份,則在恢復時一般不會有數據的丟失。在備份時,db目錄已經被Vob_snapshot備份,這個目錄可以不用備份。
  • 備份快照後的數據,當使用快照備份的Vob database與此服務器上的Vob在同一個物理設備時,該操作尤其重要。如果Vob物理設備損壞,而使用快照備份的數據沒有備份到其他物理設備時,還是無法恢復Vob。

2.3.1 延期刪除

當使用Vob_snapshot_setup時,就對該Vob啓用了延期刪除。當storage pool的備份在Vob_snapshot完成後的30分鐘內進行,則會完整備份snapshot時的所有數據存儲池的信息。默認情況下,按照元素的存儲機制,一個元素的所有版本信息可存儲在一個或多個物理文件中,當數據信息被更新時,新的存儲文件被創建,舊的則被刪除。如果延期刪除啓用後,舊的存儲文件會被記錄並保存30分鐘。

延期刪除需要更多的磁盤空間,在linux或unix平臺上,可以使用kill -HUP pid (pid爲Vob_server的pid)發送延續刪除信息至Vob log中,可使用cleartool getlog Vob查看。

使用checkVob檢查存儲池時可以列出延期刪除的文件列表。

延期刪除列表每五分鐘寫入VOB存儲目錄中的delete_list.db中。

2.4 常規備份

    除了snapshot備份方式以外,還有另一種常規備份方式,可以按照下面的步驟來做:

A. 鎖定Vob,不使用nusers參數;

B. 備份整個Vob存儲目錄,包括所有的遠程storage pool;

C. 解除Vob的鎖定

2.4.1 查看Vob的存儲目錄 

可以適用clearcase 管理控制檯和cleartool lsVob來查看Vob的存儲目錄。如果備份程序在本地運行,則使用VOB server access path來定位Vob的存儲目錄,如果備份程序在網絡中的其他計算機中運行,則應使用網絡全局路徑。

2.4.2 VOB的鎖定和解鎖 

必須用Vob的owner或clearcase特權用戶的身份來進行Vob的鎖定和解鎖。有圖形界面操作,也可使用cleartool lock和unlock命令方式。

2.4.3 遠程存儲池 

如果linux或unix的VOB server上存在遠程存儲池,則必須進行備份。無論是採用snapshot還是常規的備份方式。 在任意的View中執行lspool檢查Vob是否存在遠程存儲池,可以用-long參數列出
cleartool lspool -long -inVob Vob:/Vob/src
pool "ampool"
2006-11-01T15:38:18+08 by root.root@ams
"among create Vob pool"
owner: root
group: root
kind: source pool
pool storage link target pathname "/home/among/ampool"
pool storage global pathname "/home/ccstg/Vobs/src.vbs/s/ampool"
pool "cdft"
2006-07-13T09:59:46+08 by root.root@ams
"Predefined pool used to store cleartext versions."
owner: root
group: root
kind: cleartext pool
pool storage global pathname "/home/ccstg/Vobs/src.vbs/c/cdft"
maximum size: 0 reclaim size: 0 age: 96 

注意:在unix和linux上,一些備份工具,如tar和cpio,用參數可以跟蹤符號鏈接,如果遠程存儲池在備份期間可用,會備份符號鏈接及其實際文件內容。

2.4.4 如果不能備份全部數據時的可選備份 

如果使用文件級別的備份工具,則可以排除一些子目錄以減少備份時間。在整個vbs目錄中,第一層目錄,db,s目錄都一定需要備份的。admin和c目錄可選,d目錄裏面存儲着derived object,很重要,但不是必須的。VOB目錄的重要性可以參見下表:

2.4.4.1 DO 存儲池的備份 

ClearCase LT不支持構建管理,所有LT Vob中的DO存儲池是空的,不需要備份,在動態View中使用clearmake,omake,clearaudit後,Derived object 存儲池會存儲相關信息。DO可以從源碼重新編譯,所以備份DO pool不是必須的,在不同情況,是否備份DO pool的重要性依不同情況而不同:

A. 在項目開發的早期,源程序變動頻繁,大多數DO的使用機會很少,所以不備份DO pool不會有大的問題。

B. 當項目源程序趨於穩定時,會有很多DO的重用,DO的丟失會顯著增加下次系統重構建的時間。

C. 已結束的項目中會包含許多很難重新構建的DO(如需要特殊的編譯器,沒有可用的View等),這些DO是有價值的,應該進行備份,更好的方式是作爲元素進行版本控制。 

如不需要備份DO pool,至少需要備份pool的根目錄(默認爲d目錄中的ddft)和 pool_id 文件。這樣可防止恢復後checkVob時的檢查錯誤。

2.4.4.2 Cleartext存儲池的備份 

cleartext pool不是非常重要,它們可被重新創建,即使不備份cleartext pool,至少應該保存pool根目錄(默認爲c/cdft)和pool_id 文件,這樣可防止恢復後checkVob時的檢查失敗。

2.4.4.3 Administrative目錄的備份 

VOB中的admin目錄保存着Vob及其存儲池的空間佔用情況統計信息。clearcase任務計劃會定期收集磁盤空間信息並保存在該目錄中。默認情況下會保存最近30天的數據,該數據不能被重建,如果覺得此數據很重要,注意備份admin目錄。

2.4.5 不要執行增量備份 

當創建一個元素的新版本時,clearcase並沒有修改已存在的物理數據文件,而是在數據存儲池中創建一個不同名的新的物理數據文件,並把舊數據刪除。該機制與大多數增量備份策略有衝突,增量備份只會備份上次備份以後修改和新增的文件。按照增量備份的機制來恢復,會恢復一些已被正常刪除的文件,這些信息已經無用了。 

舉例,當一個文本類的元素每天產生一個新版本,每天的增量備份會備份一個不同的物理存儲文件,如果在這一週後進行恢復,會爲該元素恢復所有的存儲文件,而只有最後一個有用。checkVob會報告出這些無引用的數據。 所以增量備份對Vob的備份不太合適,應儘量避免,如使用,應保證完整備份後的增量備份次數儘量少。

2.5 視圖(View)的備份

View中的數據與Vob不同,它們可被簡單的重建,除了已經被check out的版本及私有文件,可以通過重建View來重現View中的數據。備份View也是重要的,尤其對那些沒有定期check-in習慣的人。備份View與備份Vob類似,而且更簡單一些。

View的目錄結構中,View的storage directory存儲在View server中,動態View中僅有一個私有的數據存儲區.s目錄,靜態veiw中沒有.s目錄,所有的版本信息都在本地的View root directory中。

不要對View storage directory和View root directory進行部分的備份。所有的數據都是重要的。尤其是那些已經修改的check out後的文件及私有文件。

注意:備份View storage directory的工具必須可以備份那些爲寫入而打開的文件,如果工具不支持,則必須停止View server上的clearcase服務。

靜態View和web View除了用View storage directory外,還有View root directory,用於存儲下載下來的通過View config_spec過濾的版本信息。該目錄也必須備份。

備份視圖:

A. 列出View storage directory

可使用clearcase管理控制檯或lsView命令列出View storage directory信息。如果通過網絡備份,則需要網絡的全局路徑。請獲取View server access path:
cleartool lsView –long r5_integration
Tag: r5_integration Global
path: /net/mars/Viewstg/r5_integration.vws
...
...
View on host: mars View server access path: /Viewstg/r5_integration.vws ...

B. 確保備份的完整與一致性

爲確保View在備份過程中處於非活動狀態,使用chView阻止用戶更新View database
cleartool chView -readonly r5_integration
properties:readonly

該命令並不會阻止config_spec的修改,爲保證備份的完整性,最好使用cleartool endView -server Viewtag停止View server上的View 服務。

C. 列出是否有遠程存儲池

在linux和unix上,使用ls命令列出View storage dierctory中是否存在軟鏈接
ls –ld .s ... .s -> /net/ccsvr04/Viewstore/r5_integration.stg

該例中標識了一個遠程的私有存儲區,確保也可正常備份。

D. 進行備份

對於動態和靜態View,備份整個View storage directroy,使用local path或網絡全局path,對於靜態View和web View,還需備份View root dierctory。

note:在備份和恢復靜態View時,必須使用可以保存文件修改時間及權限的工具備份View內的文件,否則View內的文件會變爲hijacked狀態。

E. 後繼操作

cleartool chView -readwrite r5_integration
Properties: readwrite

恢復View至可寫的狀態。

F. 如果將View存儲目錄改過名稱,現在將名稱再改回初始名稱

2.6 備份Registry信息

ClearCase註冊信息保存在註冊服務器中的rgy目錄下的一組文件中,它們都是普通的文件,可以進行常規的備份。請使用可備份已打開文件的備份工具。

  • 在linux或unix上,註冊信息位於/var/adm/rational/clearcase/rgy
  • 在windows上,註冊信息位於ccase-home-dir/var/rgy

所有的註冊信息必須同時備份與恢復,已連接的客戶端列表文件也需備份,它不在rgy目錄中。

  • 在linux或unix上,位於/var/adm/rational/clearcase/client_list.db
  • 在windows上,位於ccase-home-dir/var/client_list.db

2.7 備份其他有關聯的數據

在使用UCM的情況下,各種數據存儲庫之間存在着複雜的關係,可分爲以下幾種:

  • UCM PVOB與Component VOB間有着hyperlink聯繫
  • Administrative VOB多層次關係中metadata數據依靠hyperlink關聯
  • 在使用ClearQuest集成的UCM環境中,ClearCase PVOB與ClearQuest DB中相互關聯,各自存儲着關聯的數據信息

UCM中的操作,如加入project,創建一個活動,deliver或是rebase會改變相關聯的數據。在一些情況下,關聯是相互的, 即使沒有使用UCM,在Admin VOB的層次中一個小小的操作也會對多個VOB產生影響。在第一個和最後一個部分備份的間隔可能會很長。這樣在恢復後,可能會出現數據不一致的情況。

對上圖所示的環境中,按照下面的步驟做是一個好的備份策略:
   A. lock所有相關的VOB與ClearQuest Database
   B. 備份所有相關的VOB和ClearQuest Database
   C. unlock所有相關的VOB和ClearQuest Database

除了那些不大的Vob和較小clearquest db的情況下,不太可能在一個確切的時間內按照上面的步驟來備份所有的數據。即使可以一次備份所有的數據,也不太可能同時進行數據的恢復。更多的情況下是 一個或兩個數據庫恢復到原來的環境中,所以在恢復的數據庫和原有數據庫之間又會有數據不一致的情況發生。關於數據恢復後的修復關聯請查看第十一章的內容。

一個常用的備份策略:
   A. 備份Component VOB,如可能,使用Vob_snapshot進行備份
   B. 備份關聯的ClearQuest Database
   C. 使用Vob_snapshot備份PVOB,沒有包含component信息的PVOB可用Vob_snapshot備份且不會有數據丟失。如果環境 中存在着多個PVOB,一起備份所有的PVOB和administrative VOB。(注意先鎖定所有的Vob,備份,最後解鎖。) 該策略能夠最大化減少恢復後的數據不一致,在恢復後,PVOB比所有的ClearQuest Database和Component VOB都要新,會簡化修復數據不一致的工作。

注意:在使用該備份策略時,儘量在一個最小的時間段內備份所有的數據。注意經常備份,在恢復時,一個昨天備份會比一週前備份的數據所產生的數據不一致要少。

查看數據關聯

在非UCM環境中,數據庫間的關聯主要是administrator VOB層次,該層次是依靠hyperlink關聯的,可使用clearcase管理控制檯或cleartool desribe來查看AdminVOB的信息。一個VOB只可有一個AdminVOB的hyperlink指向上層,可接受多個VOB的AdminVOB hyperlink的指向。

在UCM環境中,所有的數據關聯由project組織管理,在project中的所有可修改的Component,PVOB,關聯的ClearQuest Database是相互關聯的,必須被同時備份。(project中只讀的Component也應備份,但只讀的Component在PVOB中的引用數 據在較長的時間內不會被修改,所以可不參與上面的備份計劃與其它數據一起備份。)可使用Project Explorer或cleartool lsproject來查看project中的component信息。

2.8 結束語

本文主要是以<<ClearCase Administrator’s Guide>>爲依據和引用,對ClearCase的數據備份進行了描述,如果有其中有錯誤理解,還需讀者及時指正。另外如果有讀者對ClearCase的恢復感興趣的話,也可以參見<<ClearCase Administrator’s Guide>>的第11章ClearCase的數據。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章