Linux運維學習歷程-第十六天-磁盤管理(三)邏輯卷快照

  概述:邏輯卷管理(LVM)提供了爲任何邏輯卷作一個快照的功能,目的是在一致的狀態下來得到一個文件系統的備份.因爲在備份過程中,應用程序可能訪問一個分區的文件或者數據庫.一些文件可能在一個狀態被備份,而後面的文件可能在一個更新後被備份,導致備份的不完整 .傳統的解決方法是以只讀的方式掛載一個分區,對數據庫應用表級鎖或者關閉數據庫的引擎等;所有的措施反而影響可用性(但是與沒有備份相比不會丟失更多的數據).使用LVM的快照功能可以在沒有損失可用性的情況下完成一致的備份.


請注意這個信息只對已經使用LVM的分區有效.LVM快照不能在一個非LVM文件系統上使用.


邏輯卷快照


一快照技術原理

(一)、概念解釋

   像照相機一樣,機器快門一閃,很快就把剛剛的人像停留在了相紙上。存儲系統中的數據“快照”與我們生活中所說的“照片”非常相似,所不同的是,照片的對象不是人,而是數據。如同照片留住了我們過去的摸樣和歲月,快照把數據在某一時刻的映像也保留了下來。因此我們可以根據快照查找數據在過去某一時刻的映像,常常用來作爲增強數據備份系統的一種技術,它可以很大的縮短RTO和RPO兩個指標。

註解:

    RTO (Recovery Time Objective,復原時間目標)是企業可容許服務中斷的時間長度。比如說災難發生後半天內便需要恢復,RTO值就是十二小時;

    RPO (Recovery Point Objective,復原點目標)是指當服務恢復後,恢復得來的數據所對應時的間點。如果現時企業每天凌晨零時進行備份一次,當服務恢復後,系統內儲存的只會是最近災難發生前那個凌晨零時的資料。


   SNIA(存儲網絡行業協會)對快照(Snapshot)的定義是:關於指定數據集合的一個完全可用拷貝,該拷貝包括相應數據在某個時間點(拷貝開始的時間點)的映像。快照可以是其所表示的數據的一個副本,也可以是數據的一個複製品。而從具體的技術細節來講,快照是指向保存在存儲設備中的數據的引用標記或指針。 

   磁盤快照(Snapshot)是針對整個磁盤卷冊進行快速的檔案系統備份,與其它備份方式最主要的不同點在於「速度」。進行磁盤快照時,並不牽涉到任何檔案複製動作。就算數據量再大,一般來說,通常可以在一秒之內完成備份動作。

   磁盤快照的基本概念與磁帶備份等機制有非常大的不同。在建立磁盤快照時,並不需要複製數據本身,它所作的只是通知LX Series NAS服務器將目前有數據的磁盤區塊全部保留起來,不被覆寫。這個通知動作只需花費極短的時間。接下來的檔案修改或任何新增、刪除動作,均不會覆寫原本數據所在的磁盤區塊,而是將修改部分寫入其它可用的磁盤區塊中。所以可以說,數據複製,或者說數據備份,是在平常檔案存取時就做好了,而且對效能影響極低。LX Series NAS檔案系統內部會建立一份數據結構,紀錄磁盤快照備份及目前作用中檔案系統所使用到的磁盤區塊及指針,讓使用者可以同時存取到主要檔案系統及過去的磁盤快照版本。

(二)、快照技術類型

快照技術的作用:主要是能夠進行在線數據恢復,當存儲設備發生應用故障或者文件損壞時可以進行及時數據恢復,將數據恢復成快照產生時間點的狀態。快照的另一個作用是爲存儲用戶提供了另外一個數據訪問通道,當原數據進行在線應用處理時,用戶可以訪問快照數據,還可以利用快照進行測試等工作。  因此,所有存儲系統,不論高中低端,只要應用於在線系統,那麼快照就成爲一個不可或缺的功能。創建一個快照不同的設備需要不同的命令,但對於系統來說,基本都包括如下幾個步驟:

  1、首先發起創建指令;

  2、在發起時間點,指令通知操作系統暫停應用程序和文件系統的操作;

  3、刷新文件系統緩存,結束所有的讀寫事務;

  4、創建快照點;

  5、創建完成之後,釋放文件系統和應用程序,系統恢復正常運行。

  現在,快照技術已經超越了簡單的數據保護範疇。我們可以用快照進行高效且無風險的應用軟件測試。用快照數據做測試,不會對生產數據造成任何的破壞。對於數據挖掘(data mining)和電子發現(eDiscovery)應用,快照也是理想的測試數據源。在災難恢復方面,快照是一種非常有效的方法——甚至是首選,非常適合遭到惡意軟件***、人爲誤操作和數據損壞等邏輯錯誤發生時的數據恢復。過去我們認爲只有磁盤陣列具備快照功能,但事實上磁盤陣列只是其中之一而已。廣義的快照技術通常可有7個不同類型的實現主體:

  1、主機文件系統(包括服務器、臺式機、筆記本電腦);

  2、邏輯卷管理器(LVM);

  3、網絡附加存儲系統(NAS);

  4、磁盤陣列;

  5、存儲虛擬化設備;

  6、主機虛擬化管理程序;

  7、數據庫。

  下面將逐項介紹一下在各個系統中快照技術的應用,並對其進行詳細的說明。

  1、基於文件系統的快照

很多文件系統都支持快照功能,微軟的Windows NTFS有VSS卷影拷貝服務(Volume Shadow Copy Services, Vista稱作Shadow Copy);Sun Solaris的最新文件系統ZFS(Zettabyte File System);Apple公司的Mac OS X 10.6(雪豹);Novell NetWare 4.11(或更高版本)的Novell Storage Services (NSS) ; Novell SUSE Linux操作系統下的OES-Linux等等。

  “免費”是文件系統快照的優勢之一,因爲它集成在文件系統內部;另一個優點是非常好用,最新版文件系統的快照功能通常使用起來很簡單。不利的一方面是,每個文件系統都必須獨立進行管理,當系統數量激增時,管理工作會變得非常繁重。想象一下,如果我們要做快照複製的話,需要給每一個文件系統都配置一套複製關係,而且還只能複製該文件系統自己的快照。此外,不同文件系統所提供的快照種類、快照頻率、預留空間等參數也可能不一樣,當然也包括設置、操作和管理上的差異。總之,需要管理的服務器和文件系統越多,複雜程度就越高。

  2、基於LVM(邏輯卷管理器)的快照

  帶有快照功能的LVM也很多,比如惠普HP-UX操作系統的 Logical Volume Manager;Linux平臺的Logical Volume Manager 和Enterprise Volume Management System系統 ;微軟Windows 2000及後續版本自帶的Logical Disk Manager系統;SUN Solaris 10操作系統的ZFS;以及賽門鐵克公司的Veritas Volume Manager(注:Veritas Volume Manager是賽門鐵克Veritas Storage Foundation產品的一部分)。

  我們可以創建跨多個文件系統的LVM快照。像賽門鐵克的Veritas Volume Manager可以支持大多數常見的操作系統和文件系統。LVM通常還包括存儲多路徑和存儲虛擬化等功能。

  使用LVM時,通常要付出額外的成本,包括爲每臺服務器購買license(許可證)和維護費。而且,像基於文件系統的快照一樣,我們可能還要面對系統之間的協調問題和複雜的技術實施問題。

  3、基於NAS的快照

  NAS本質上就是一個經過優化的、或是專門定製的文件系統,運行在特定的設備上,或集成在存儲設備裏。大多數中端和企業級NAS系統都提供快照功能,其中既有使用專有操作系統的設備,也包括大量基於Microsoft Windows Storage Server軟件的各種NAS。

  通過網絡連接到NAS的計算機系統都可以使用這種標準的通用快照,包括物理服務器、虛擬機、臺式機和筆記本電腦。它也非常容易操作和管理。基於NAS的快照往往同Windows Volume Shadow Copy Services(卷影複製服務VSS)、備份服務器和備份Agent等軟件集成在一起使用。一些NAS廠商還爲非Windows平臺的數據應用系統開發了Agent代理程序。其他一些與NAS快照有關的技術還包括重複數據刪除(EMC公司,FalconStor軟件公司和NetApp的產品),有些廠商甚至提供了帶有自動精簡配置功能的快照,目的是讓快照佔用的空間變得更少。

  但是,使用便利的工具和附加功能也需要成本,軟件license和維護費相當昂貴,一般是按照機器數量和磁盤卷容量來計算。大多數公司的數據量增長很快,需要使用NAS快照的地方也越來越多,因此,操作和管理也將更復雜。

  4、基於磁盤陣列的快照

  大多數磁盤陣列的軟件系統裏都含有快照功能。基於磁盤陣列的快照與基於NAS的快照有非常相似的優點,即所有與磁盤陣列相連的計算機系統都可以使用這種標準的通用快照功能,包括物理服務器、虛擬機、臺式機和筆記本電腦等等。快照的實施、操作和管理也都很簡單。像NAS一樣,很多磁盤陣列的快照功能也可以被Windows VSS、備份服務器和備份Agent等軟件直接調用。一些磁盤陣列廠商還有可供非Windows平臺應用系統使用的Agent代理程序。

  基於磁盤陣列的快照也有一些缺點:license和維護費用昂貴;對非Windows平臺的應用程序支持有限;磁盤陣列的數量越多,快照的管理也就越複雜。

  5、基於存儲虛擬化設備的快照

  這裏所說的存儲虛擬化設備主要用於SAN光纖網絡環境,不同於基於文件(NFS)應用的網絡設備,像F5 Network公司的Acopia ARX產品就是排除在這個範疇之外的。主要的存儲虛擬化軟硬件設備(或融合了虛擬化功能的存儲系統)包括:Cloverleaf Communication公司的Intelligent Storage Networking System (iSN);DataCore Software公司的 SANsymphony和SANmelody;EMC的Celerra Gateway blades;FalconStor公司的IPStor;HP的XP系列存儲;HDS的Universal Storage Platform V/VM;IBM的SAN Volume Controller;LSI的StoreAge Storage Virtualization Manager (SVM)以及NetApp的V-Series storage controllers等等。

  磁盤陣列和NAS快照所具備的優點在存儲虛擬化設備上同樣能夠體現,而且某些方面還能做的更好。我們可以將來自不同廠商的很多存儲設備聚集在少量的幾個控制點或單一控制點上進行管理,提供通用的標準化快照。這樣做最大程度的簡化了快照的管理操作成本和學習成本。

  存儲虛擬化快照的缺點與上述類型相比則有些不同。使用存儲虛擬化設備會導致I/O延遲的增加,即使是採用旁路架構的設計,最終還是會影響應用程序的響應時間。增加存儲虛擬化設備還會使故障分析變得更加困難,潛在的還可能激化廠商之間對故障責任的推諉。從另一個角度看,雖然增加額外的虛擬化存儲硬件或軟件要產生一定的費用,但是與每個存儲系統都獨立購買快照功能相比,它的軟件license和維護費用都要低一些。

  6、基於主機虛擬化軟件的快照

  隨着服務器虛擬化應用的普及,基於主機虛擬化管理軟件(hypervisor)的快照技術也逐漸流行起來。像Citrix公司的 XenServer、微軟的Hyper – V、SUN的xVM Ops Center、以及VMware的ESX和vSphere4等主機虛擬化產品都支持快照功能。

  在主機虛擬化軟件層實現快照的優點是簡單直接。由於同虛擬機管理軟件綁定在一起,因此可以爲所有的虛擬機 (VMs) 提供統一的快照,並且還可以同微軟的VSS集成,隨時調用。相對而言,基於虛擬機的快照很容易部署、使用和管理。

  但是,如果非要找出不喜歡這種快照的理由?我想應該是每一套虛擬機軟件的快照需要單獨管理;而且當我們在非Windows平臺下使用這種快照技術時,必須針對整個VM。這意味着我們只能做粗粒度的數據恢復,還要消耗更多的恢復時間。這種快照是在Windows操作系統外部創建,所以它不能架構在應用軟件感知的層面,導致快照出來的映像數據有可能是不一致狀態。

  7、基於數據庫的快照

  在數據庫中,快照動作被稱爲“snapshot isolation(快照隔離)”。像Oracle和PostgreSQL這樣的數據庫需要做快照隔離以確保所有的交易命令序列化,就好像被一個個隔開一樣,然後再逐個執行。其他的一些數據庫也支持快照隔離,但並不要求將交易序列化。在一般情況下,數據庫備份工具會利用快照隔離的功能,用快照來恢復崩潰(出現一致性問題)的數據表。

  針對數據庫內部數據和基於該數據庫的相關應用,使用數據庫自帶的快照比較有效。

  相反,數據庫快照的重要缺欠就是覆蓋的範圍非常有限,其作用僅限於特定的數據庫內部和數據庫相關的應用,無法管理同在一臺服務器上的文件系統、文件類應用或其他數據庫,更不用說管理到其他的服務器了。有時候我們不得不通過其他層次的快照技術來解決數據庫之外的數據保護問題,這樣,操作和管理將變得有些複雜。

  不同類型的快照及工作原理

  通常,我們會提到6種類型的快照技術:

  1、Copy-on-write 複製寫

  2、Redirect-on-write 重定向寫

  3、Clone or split mirror 克隆或鏡像

  4、Copy-on-write with background copy後臺拷貝的複製寫

  5、Incremental 增量快照

  6、Continuous data protection 持續數據保護

  複製寫和重定向寫快照

  Copy-on-write (COW) 複製寫快照

  COW快照需要消耗一些存儲空間--建立快照卷。當我們爲一個數據卷創建一個快照之後,這些預留的空間用來存放被變化數據更新的舊數據。COW快照在初始化的過程中僅僅創建用來描述源數據塊位置的指針信息(元數據),而不是完整的將源數據塊拷貝過來。因此初始化的過程幾乎可以在瞬間完成,對系統的影響也很小。

  COW快照會跟蹤數據卷的寫操作和數據塊變化。當某個數據塊發生改變時,在將舊的數據覆蓋之前,首先將該塊的舊數據複製到預留的快照卷,該步驟僅在數據卷相應數據塊位置發生第一次寫操作請求時進行。這個處理過程確保快照出來的數據與發起快照的那個精確時間點保持完全一致。這個過程也描述了“copy on write”這個名字的含義。

  如果我們需要訪問某個時間點的快照數據,對沒有改變過的塊直接從數據卷讀取;對已經改變並被複制的塊則從快照空間讀取。從快照被創建那一刻開始,每個快照都會跟蹤記錄描述塊改變的元數據信息。

  COW快照的主要優勢在於空間的高效利用,因爲快照卷只需要保留髮生過變化的數據塊,與數據卷相比要小得多。但是我們也知道COW快照有個缺點,它會引起數據卷性能的下降,這是因爲創建快照之後,對數據卷的寫操作會增加一個等待的過程 --即舊數據塊複製到快照卷的過程。另外一個關鍵問題是每個快照卷必須依賴一個完整的數據卷。

  Redirect-on-write (ROW) 重定向寫快照

  “ROW重定向寫”與“COW複製寫”是相對的概念,它可以避免兩次寫操作引起的性能損失。ROW同COW一樣在空間利用方面效率非常高。那是什麼讓ROW快照避免了寫性能的損耗?其中的原因是ROW把對數據卷的寫請求重定向給了快照預留的存儲空間,而寫操作的重定向設計則把需要兩次寫才能完成的操作減少爲一次寫。我們知道COW的兩次寫包括:1、將舊數據寫入快照卷;2、在數據卷寫入新數據。而ROW只有寫入新數據一步。

  使用ROW快照,數據卷存放的是上一個快照時間點的舊數據,新數據最終存放在預留的快照空間。這裏也有一個複雜的問題,就是快照的刪除。被刪除的快照上的數據必須被複制到原始數據卷,並且做一致性回退。創建的快照越多,維護快照的複雜度也會以指數級別上升。這些複雜性包括對原始數據的訪問、快照數據和原始數據卷的跟蹤、以及快照刪除後的數據調整。另一個直接引發的嚴重問題是,原始數據集中會產生大量的碎片。 

  克隆或分割鏡像快照與後臺拷貝的複製寫快照

  Clone or split-mirror 克隆或分割鏡像快照

  Clone(或split-mirror)快照所創建的是數據的完整副本。Clone(或split-mirror)快照的對象可以是一個存儲卷、一個文件系統或者是一個LUN(logical unit number 邏輯單元號)。Clone快照的優點是它們具有高可用性;缺點是所有的數據都要完整的複製一份,複製的過程也不可能在瞬間完成。我們可以分割一對保持同步狀態的鏡像捲來啓用Clone快照,分割的過程瞬間即可完成。然而,當鏡像被分割成Clone快照之後,數據卷也就失去了他的同步鏡像。

  使用Clone快照需要面對的一個非常嚴重的問題是每個快照都需要和數據卷一樣大的存儲空間。尤其是當我們在任何時刻都需要保持一份以上Clone卷的情況,這個成本會非常高。另一個缺點是影響性能,因爲在鏡像卷之間保持寫同步需要一定的系統開銷。

  Copy-on-write with background copy 後臺拷貝的複製寫快照

  Copy-on-write with background copy快照有兩個生成步驟:首先創建一個瞬時即可生成的COW快照;然後利用後臺進程將數據卷的數據複製到快照空間,最後生成一份數據卷的克隆或鏡像。

  創建這種快照的目的是發揮COW快照的優勢,同時儘量屏蔽它的不足。因此,這種快照常常被形容爲COW和Clone快照的混合體。

  增量快照與持續數據保護

  (Incremental)增量快照

  增量快照的特點是可以跟蹤數據卷和快照卷的變化。當一個新的增量快照生成之後,舊的快照數據將被刷新。第一個快照和隨後創建的每一個增量快照數據上都有時間戳標記,利用時間戳我們能夠將快照數據回滾到任意的一個時間點。增量快照技術能夠加快後續快照的生成速度,而且僅僅在名義上多消耗了一點空間而已。由此,我們可以提高創建快照的頻率,也能讓快照保留得更久一點。

  增量快照的不足之處是它需要依靠上面所提到的其他基礎技術來創建第一個快照 (COW、ROW、clone/split mirror、copy-on-write with background copy) 。如果用Clone方式,那麼第一個快照需要較長的初始化時間;如果用COW方式,數據卷的性能會降低。

  持續數據保護(CDP)

  CDP的出現是爲了實現零數據丟失的RPO指標,以及瞬時數據恢復的RTO指標。它本身與同步數據鏡像很類似,不同之處在於CDP還可以對軟性災難進行恢復。包括人爲誤操作、惡意軟件***、意外刪除、數據損壞等情況。

  持續數據保護頗像頻率很高的增量快照。它會捕獲並複製任何時刻發生的數據變化,並且給這些數據塊打上時間戳。CDP本質上相當於每個時刻都創建一份增量快照,提供細粒度的精確數據恢復。有些CDP產品同時提供基於時間和基於事件(例如應用程序升級事件)兩種粒度的恢復方式。還有一個理解CDP概念的好方法就是將它看成一個快照的journal日誌。

  對於郵件系統、數據庫和基於數據庫的應用來說,CDP是一個極好的保護方案,能將數據回滾到任意的歷史時間點,恢復過程也簡便、迅速。最有代表性的CDP產品是飛康公司的IPStor,它是一個集成了CDP功能的存儲系統兼存儲虛擬化設備。

  隨着越來越多的數據需要保護,備份窗口也變得越來越緊張,因此需要快照技術來幫助我們解決備份問題。在現實的應用環境中,快照利用的是否恰當對數據保護的等級和恢復的速度有着很大的影響。儘管各類型快照之間存在的技術差異不太容易理解,但無論如何,快照技術都將在數據保護領域和日常存儲管理中扮演重要的角色。 

(三)、特別注意:快照的一致性問題

  如果用快照來處理結構化數據,可能會存在一些問題。結構化數據涉及到數據庫,以及數據庫類應用(例如郵件系統、ERP或CRM等等)。許多產品中的快照並不能與這些應用程序集成或被直接調用。有一種可能的情況是,在我們創建快照的瞬間,數據庫恰好不在靜止狀態(緩存正在刷新、寫操作事務尚未完成、索引和元數據正在更新等等),此刻生成的快照數據是不一致的,很有可能無法正常使用。

  在微軟的Windows Server平臺上,這個問題要簡單得多,利用Windows Volume Shadow Copy Services (VSS)和它的API,數據庫應用程序可以集成並調用快照工具。VSS是專門爲結構化數據應用設計的服務框架,可以驅動數據庫等應用進入數據一致性的靜止狀態,在快照開始初始化之前,完成刷新緩存、結束寫操作以及系統狀態的更新。

  遺憾的是,目前在Linux和Unix操作系統平臺上還沒有類似VSS的服務或API。VMware公司的vCenter storage API可以說是一個部分解決方案。快照的發起者可以通過vCenter storage API給vCenter發出一個指令,讓虛擬機進入靜止狀態,然後再執行快照。但這個時候,快照由於沒有通過應用程序感知,也許會存在不一致的問題。

這裏還有一個好辦法,可以不通過Windows VSS,獲得數據庫的一致性快照。這個辦法需要備份軟件的配合。將快照的API同備份軟件集成,就可以從備份服務器端驅動備份軟件的數據庫代理Agent。Agent備份代理程序可以驅動數據庫進入靜止狀態,然後反向讓備份服務器通知快照工具開始執行創建快照的操作。這也是一個比較有效的辦法。 


(四)、快照技術使用方法

具體使用快照時,存儲管理員可以有三種形式,即冷快照拷貝、暖快照拷貝和熱快照拷貝。

  冷快照拷貝:進行冷快照拷貝是保證系統可以被完全恢復的最安全的方式。在進行任何大的配置變化或維護過程之前和之後,一般都需要進行冷拷貝,以保證完全的恢復原狀(rollback)。冷拷貝還可以與克隆技術相結合複製整個服務器系統,以實現各種目的,如擴展、製作生產系統的複本供測試/開發之用以及向二層存儲遷移。

  暖快照拷貝:暖快照拷貝利用服務器的掛起功能。當執行掛起行動時,程序計數器被停止,所有的活動內存都被保存在引導硬盤所在的文件系統中的一個臨時文件(.vmss文件)中,並且暫停服務器應用。在這個時間點上,複製整個服務器(包括內存內容文件和所有的LUN以及相關的活動文件系統)的快照拷貝。在這個拷貝中,機器和所有的數據將被凍結在完成掛起操作時的處理點上。

  當快照操作完成時,服務器可以被重新啓動,在掛起行動開始的點上恢復運行。應用程序和服務器過程將從同一時間點上恢復運行。從表面上看,就好像在快照活動期間按下了一個暫停鍵一樣。對於服務器的網絡客戶機看來,就好像網絡服務暫時中斷了一下一樣。對於適度加載的服務器來說,這段時間通常在30到120秒。

  熱快照拷貝:在這種狀態下,發生的所有的寫操作都立即應用在一個虛擬硬盤上,系統的文件以保持高度的一致性。服務器提供讓持續的虛擬硬盤處於熱備份模式的工具,以通過添加REDO日誌文件在硬盤子系統層上覆制快照拷貝。

  一旦REDO日誌被激活,複製包含服務器文件系統的LUN的快照是安全的。在快照操作完成後,可以發出另一個命令,這個命令將REDO日誌處理提交給下面的虛擬硬盤文件。當提交活動完成時,所有的日誌項都將被應用,REDO文件將被刪除。在執行這個操作過程中,會出現處理速度的略微下降,不過所有的操作將繼續執行。但是,在多數情況下,快照進程幾乎是瞬間完成的,REDO的創建和提交之間的時間非常短。熱快照操作過程從表面上看基本上察覺不到服務器速度下降。在最差情況下,它看起來就是網絡擁塞或超載的CPU可能造成的一般服務器速度下降。在最好情況下,不會出現可察覺到的影響。 


(五)、快照與鏡像、複製的區別

鏡像、快照和複製是三種不同的功能

  鏡像是通過從一個I/O創建兩個I/O來複制數據。磁盤鏡像通過OS或卷管理軟件在主系統上創建。磁盤鏡像是依靠平臺和本地連接特性的本地選件。鏡像可用於DAS和SAN並且大多數NAS支持它。存儲轉發式鏡像磁盤子系統(例如,EMC SRDF, IBM PPRC, Hitachi TrueCopy)主要用於SAN產品。  複製是通過網絡傳輸數據對象(文件、表格等)。傳輸是從系統到系統進行的,而不是在存儲設備之間或子系統之間進行。複製一般也針對具體平臺,因此用於Windows 2000複製產品的運行方式與Unix平臺存在很大不同。


二、總結:


邏輯卷的作用與原理

  LVM採用寫時複製技術(Copy-On-Write,COW),不用停止服務或將邏輯卷設爲只讀就可以進行備份,使用LVM快照功能既可以獲得一致備份,又不會影響服務器的可用性。

  LVM採用的寫時複製,是指當LVM快照創建的時候,僅複製原始卷中數據的元數據。換句話說,也就是在創建LVM邏輯卷的時候,並不會發生數據的物理複製。再換句話說,複製元數據,不復制物理數據.因此快照的創建幾乎是實時的。當原始捲上有寫的操作執行時,快照會跟蹤原始卷中塊的改變,這個時候原始捲上將要改變的數據會在改變之前拷貝到快照預留的空間。

邏輯卷管理器快照

  快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝

     對於需要備份或者複製的現有數據集臨時拷貝以及其它操作來說,快照是最合適的選擇。

  LVM 快照通過把文件系統的改變記錄到一個快照分區,而不是對這個分區做鏡像.因此當你創建一個快照分區時,你不需要使用和你正創建快照的分區一樣大小的分區, 而是在做快照過程中需要改變的大小.這取決於有多少數據正在寫入分區和你希望保留LVM快照多長 時間. 你保留的時間越長,在文件系統的的改變越多,更多的快照分區就會被填充改變的信息.在分區上的改變率越高,快照的平均生命期越短.如果一個LVM分區的改變量超過了快照的大小,那麼快照就會被釋放.

   因此:謹記以下原則

   快照只有在它們和原來的邏輯卷不同時纔會消耗空間。

   在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變纔會使用這些空間

   當原來的邏輯卷中有所改變時,會將舊的數據複製到快照中。

   快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據

   建立快照的卷大小只需要原始邏輯卷的15%~20%就夠了。也可以使用lvextend放大快照。

   快照邏輯卷大小最大何其對應快照的原始邏輯卷大小相同,過大會造成磁盤空間浪費


邏輯卷管理器快照

快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享。

wKiom1fJcP6SRMumAAB3kEClOLs594.png

   由於快照區與原本的LV共用很多PE的區塊,因此快照去與被快照的LV必須要要在同一個VG上!系統恢復的時候的文件數量不能高於快照區的實際容量。



使用LVM快照

爲現有邏輯卷創建快照

          #lvcreate -L #[mMgGtT] -s -n snap-data -p r original_lv_name

   掛載快照

          #mkdir -p /mnt/snap

          #mount -o ro /dev/vg0/snap-data /mnt/snap

   刪除快照

          #umount /mnt/databackup

          #lvremove /dev/vg0/databackup


三、練習

1、創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG;要求PE大小爲16MB, 而後在卷組中創建大小爲5G的邏輯卷testlv;掛載至/users目錄

[root@localhost ~]# fdisk /dev/sdc
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁盤標識符 0x8b86db85 創建新的 DOS 磁盤標籤。

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分區號 (1-4,默認 1):
起始 扇區 (2048-41943039,默認爲 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認爲 41943039):+10G
分區 1 已設置爲 Linux 類型,大小設爲 10 GiB

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分區號 (2-4,默認 2):
起始 扇區 (20973568-41943039,默認爲 20973568):
將使用默認值 20973568
Last 扇區, +扇區 or +size{K,M,G} (20973568-41943039,默認爲 41943039):+10G
值超出範圍。
Last 扇區, +扇區 or +size{K,M,G} (20973568-41943039,默認爲 41943039):q
Last 扇區, +扇區 or +size{K,M,G} (20973568-41943039,默認爲 41943039):
您確實要退出嗎?q
Last 扇區, +扇區 or +size{K,M,G} (20973568-41943039,默認爲 41943039):       
將使用默認值 41943039
分區 2 已設置爲 Linux 類型,大小設爲 10 GiB

命令(輸入 m 獲取幫助):t
分區號 (1,2,默認 2):1
Hex 代碼(輸入 L 列出所有代碼):l

 0  空              24  NEC DOS         81  Minix / 舊 Linu bf  Solaris        
 1  FAT12           27  隱藏的 NTFS Win 82  Linux 交換 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隱藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 擴展      c7  Syrinx         
 5  擴展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系統數據 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 純文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可啓動      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 訪問       
 a  OS/2 啓動管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 擴展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隱藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 診斷     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隱藏的 FAT16 <3 61  SpeedStor       ab  Darwin 啓動     f2  DOS 次要       
16  隱藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隱藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自動
1b  隱藏的 W95 FAT3 70  DiskSecure 多啓 bb  Boot Wizard 隱  fe  LANstep        
1c  隱藏的 W95 FAT3 75  PC/IX           be  Solaris 啓動    ff  BBT            
1e  隱藏的 W95 FAT1 80  舊 Minix       
Hex 代碼(輸入 L 列出所有代碼):8e
已將分區“Linux”的類型更改爲“Linux LVM”

命令(輸入 m 獲取幫助):t
分區號 (1,2,默認 2):
Hex 代碼(輸入 L 列出所有代碼):8e
已將分區“Linux”的類型更改爲“Linux LVM”

命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   20G  0 part /testdir
sdb      8:16   0  200G  0 disk 
sdc      8:32   0   20G  0 disk 
├─sdc1   8:33   0   10G  0 part 
└─sdc2   8:34   0   10G  0 part 
sdd      8:48   0   20G  0 disk 
sde      8:64   0   20G  0 disk 
sdf      8:80   0   20G  0 disk 
sr0     11:0    1  7.2G  0 rom  /run/media/root/CentOS 7 x86_64
[root@localhost ~]# pvcreate /dev/sdc{1,2}
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdc1       lvm2 ---  10.00g 10.00g
  /dev/sdc2       lvm2 ---  10.00g 10.00g
[root@localhost ~]# vgcreate -s 16M testvg /dev/sdc{1,2}
  Volume group "testvg" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 19.97g 19.97g
[root@localhost ~]# lvcreate -L 5G -n testlv testvg 
  Logical volume "testlv" created.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 5.00g  
[root@localhost ~]# mkdir /users
[root@localhost ~]# mkfs.ext4 /dev/testvg/testlv
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
[root@localhost ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Jul 26 04:42:29 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=68200b07-fec2-4be9-95a7-79fba9e46abf /                       xfs     defaults        0 0
UUID=de6b3e61-2dd2-4699-82c2-cb20d4b3ea1f /boot                   xfs     defaults        0 0
UUID=b43f466d-a800-45b2-abb7-956252340786 /testdir                xfs     defaults        0 0
UUID=ee28f7a7-70a5-4f52-a3c2-887e1edf2bae swap                    swap    defaults        0 0 
UUID="dc3eb62d-b18c-4ec2-8f89-6bb69264121a"     /users  ext4    defaults        0       0
[root@localhost ~]# mount /dev/testvg/testlv /users/

2、 新建用戶archlinux,要求其家目錄爲/users/archlinux,而後su切換至archlinux用戶,複製/etc/pam.d目錄至自己的家目錄

[root@localhost ~]# useradd -b /users  archlinux
[root@localhost ~]# getent passwd |grep "archlinux"
archlinux:x:1001:1001::/users/archlinux:/bin/bash
[root@localhost ~]# su archlinux
[archlinux@localhost root]$ cp -r /etc/pam.d /users/archlinux
[archlinux@localhost root]$ exit
exit
[root@localhost ~]# cd /users/archlinux
[root@localhost archlinux]# ls
pam.d
[root@localhost archlinux]# cd ./pam.d/
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd

3、擴展testlv至7G,要求archlinux用戶的文件不能丟失

依據上題

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   1   0 wz--n- 19.97g 14.97g
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 5.00g 
[root@localhost ~]# lvextend -L +2G /dev/testvg/testlv
  Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
  Logical volume testlv successfully resized.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 7.00g  
[root@localhost ~]# df
文件系統                   容量  已用  可用 已用% 掛載點
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  4.8G   21M  4.6G    1% /users
[root@localhost ~]# resize2fs /dev/testvg/testlv 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.

[root@localhost ~]# df
文件系統                   容量  已用  可用 已用% 掛載點
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  6.8G   23M  6.4G    1% /users
驗證數據是否損壞
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su

[root@localhost pam.d]# cat atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth

4、收縮testlv至3G,要求archlinux用戶的文件不能丟失

[root@localhost ~]# umount /dev/testvg/testlv 
[root@localhost ~]# df
文件系統        容量  已用  可用 已用% 掛載點
/dev/sda2       100G  4.1G   96G    5% /
devtmpfs        899M     0  899M    0% /dev
tmpfs           913M   88K  913M    1% /dev/shm
tmpfs           913M   21M  893M    3% /run
tmpfs           913M     0  913M    0% /sys/fs/cgroup
/dev/sda5        20G   33M   20G    1% /testdir
/dev/sda1       197M  139M   59M   71% /boot
tmpfs           183M   12K  183M    1% /run/user/0
/dev/sr0        7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64

[root@localhost ~]# e2fsck -f /dev/testvg/testlv
e2fsck 1.42.9 (28-Dec-2013)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/testvg/testlv: 70/458752 files (0.0% non-contiguous), 67380/1835008 blocks
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 786432 blocks long.

[root@localhost ~]# lvreduce -L -4G /dev/testvg/testlv
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume testlv successfully resized.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 3.00g                                                    
[root@localhost ~]# mount /dev/testvg/testlv /users/
[root@localhost pam.d]# df
文件系統                   容量  已用  可用 已用% 掛載點
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  2.9G   16M  2.7G    1% /users
[root@localhost ~]# cd /users/archlinux/pam.d/
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su                 xserver
[root@localhost pam.d]# cat atd 
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth

5、對testlv創建快照,並嘗試基於快照備份數據,驗正快照的功能

依據之前

[root@localhost ~]# lvcreate -L 1G -s -n testlv-snap -p r /dev/testvg/testlv
  Logical volume "testlv-snap" created.
[root@localhost ~]# mkdir /mnt/snap
[root@localhost ~]# mount -o ro /dev/testvg/testlv-snap /mnt/snap/

[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su  
[root@localhost ~]# cat /mnt/snap/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth 
[root@localhost ~]# echo "1234567890" >>/users/archlinux/pam.d/atd
[root@localhost ~]# cat /mnt/snap/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth
[root@localhost ~]# cat /users/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth
1234567890
[root@localhost ~]# rm -rf /users/archlinux/pam.d
[root@localhost ~]# ll  /users/archlinux
總用量 0
[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su  
[root@localhost ~]# cp -a -r /mnt/snap/archlinux/pam.d /users/archlinux/
[root@localhost ~]# ls /users/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su                 xserver
[root@localhost ~]# cat /users/archlinux/pam.d/atd 
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth


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