linux邏輯卷管理

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

摘要:?Linux用戶安裝Linux操作系統時遇到的一個最常見的難以決定的問題就是如何正確地給評估各分區大小,以分配合適的硬盤空間。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具(比如Patition Magic等),但這都只是暫時解決辦法,沒有根本解決問題。隨著Linux的邏輯盤卷管理功能的出現,這些問題都迎刃而解,本文就深入討論LVM技術,使得用戶在無需停機的情況下方便地調整各個分區大小。

一、 前言

每個Linux使用者在安裝Linux時 都會遇到這樣的困境:在為系統分區時,如何精確評估和分配各個硬盤分區的容量,因為系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以后可 能需要的容量的最大值。因為如果估計不準確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然后恢復數據到新分區。

雖然現在有很多動態調整磁盤的工具可以使用,例如Partation Magic等等,但是它并不能完全解決問題,因為某個分區可能會再次被耗盡;另外一個方面這需要重新引導系統才能實現,對于很多關鍵的服務器,停機是不可接受的,而且對于添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解決問題。

因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,Logical Volume Manager)機制就是一個完美的解決方案。

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理員可以輕松管理磁盤分區,如:將若干個磁盤分區連接為一個整塊的卷組(volume group),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logical volumes),并進一步在邏輯卷組上創建文件系統。管理員通過LVM可以方便的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:“development”和“sales”,而不是使用物理磁盤名“sda”和“sdb”。而且當系統添加了新的磁盤,通過LVM管理員就不必將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。

二、 LVM基本術語

前面談到,LVM是在磁盤分區和文件系統之間添加的一個邏輯層,來為文件系統屏蔽下層磁盤分區布局,提供一個抽象的盤卷,在盤卷上建立文件系統。首先我們討論以下幾個LVM術語:

物理存儲介質(The physical media)
這里指系統的存儲設備:硬盤,如:/dev/hda、/dev/sda等等,是存儲系統最低層的存儲單元。?
物理卷(physical volume)
物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。?
卷組(Volume Group)
LVM卷組類似于非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。?
邏輯卷(logical volume)
LVM的邏輯卷類似于非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。?
PE(physical extent)
每一個物理卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。?
LE(logical extent)
邏輯卷也被劃分為被稱為LE(Logical Extents) 的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,并且一一對應。

首先可以看到,物理卷(PV)被由大小等同的基本單元PE組成。

一個卷組由一個或多個物理卷組成,

從上圖可以看到,PE和LE有著一一對應的關系。邏輯卷建立在卷組上。邏輯卷就相當于非LVM系統的磁盤分區,可以在其上創建文件系統。

下圖是磁盤分區、卷組、邏輯卷和文件系統之間的邏輯關系的示意圖:

和非LVM系統將包含分區信息的元數據保存在位于分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位于物理卷起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。

系統啟動LVM時激活VG,并將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。

三、 安裝LVM
首先確定系統中是否安裝了lvm工具:

[root@www root]# rpm –qa|grep lvm
lvm-1.0.3-4

如果命令結果輸入類似于上例,那么說明系統已經安裝了LVM管理工具;如果命令沒有輸出則說明沒有安裝LVM管理工具,則需要從網絡下載或者從光盤裝LVM rpm工具包。

安裝了LVM的RPM軟件包以后,要使用LVM還需要配置內核支持LVM。RedHat默認內核是支持LVM的,如果需要重新編譯內核,則需要在配置內核時,進入Multi-device Support (RAID and LVM)子菜單,選中以下兩個選項:
?

  • Multiple devices driver support (RAID and LVM)?
    <*> Logical volume manager (LVM) Support

    然后重新編譯內核,即可將LVM的支持添加到新內核中。

    為了使用LVM,要確保在系統啟動時激活LVM,幸運的是在RedHat7.0以后的版本,系統啟動腳本已經具有對激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下內容:

    # LVM initialization
    if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
    action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
    fi

    其中關鍵是兩個命令,vgscan命令實現掃描所有磁盤得到卷組信息,并創建文件卷組數據文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange -a y命令激活系統所有卷組。

    四、 創建和管理LVM
    要創建一個LVM系統,一般需要經過以下步驟:

    1、 創建分區
    使用分區工具(如:fdisk等)創建LVM分區,方法和創建其他一般分區的方式是一樣的,區別僅僅是LVM的分區類型為8e。

    2、 創建物理卷
    創建物理卷的命令為pvcreate,利用該命令將希望添加到卷組的所有分區或者磁盤創建為物理卷。將整個磁盤創建為物理卷的命令為:

    # pvcreate /dev/hdb

    將單個分區創建為物理卷的命令為:

    # pvcreate /dev/hda5

    3、 創建卷組
    創建卷組的命令為vgcreate,將使用pvcreate建立的物理卷創建為一個完整的卷組:

    # vgcreate web_document /dev/hda5 /dev/hdb

    vgcreate命令第一個參數是指定該卷組的邏輯名:web_document。后面參數是指定希望添加到該卷組的所有分區和磁盤。vgcreate在創建卷組 web_document 以外,還設置使用大小為4 MB的PE(默認為4MB),這表示卷組上創建的所有邏輯卷都以 4 MB 為增量單位來進行擴充或縮減。由于內核原因,PE大小決定了邏輯卷的最大大小,4 MB 的PE決定了單個邏輯卷最大容量為 256 GB,若希望使用大于256G的邏輯卷則創建卷組時指定更大的PE。PE大小范圍為8 KB 到 512 MB,并且必須總是 2 的倍數(使用-s指定,具體請參考man vgcreate)。

    4、 激活卷組
    為了立即使用卷組而不是重新啟動系統,可以使用vgchange來激活卷組:

    # vgchange -a y web_document

    5、 添加新的物理卷到卷組中
    當系統安裝了新的磁盤并創建了新的物理卷,而要將其添加到已有卷組時,就需要使用vgextend命令:

    # vgextend web_document /dev/hdc1

    這里/dev/hdc1是新的物理卷。

    6、 從卷組中刪除一個物理卷
    要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷信息:

    如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據備份到其他地方,然后再刪除。刪除物理卷的命令為vgreduce:

    # vgreduce web_document /dev/hda1

    7、 創建邏輯卷
    創建邏輯卷的命令為lvcreate:

    # lvcreate -L1500 –nwww1 web_document

    該命令就在卷組web_document上創建名字為www1,大小為1500M的邏輯卷,并且設備入口為/dev/web_document/www1(web_document為卷組名,www1為邏輯卷名)。如果希望創建一個使用全部卷組的邏輯卷,則需要首先察看該卷組的PE數,然后在創建邏輯卷時指定:

    # vgdisplay web_document| grep "Total PE"
    Total PE 45230
    # lvcreate -l 45230 web_document -n www1

    8、 創建文件系統
    筆者推薦使用reiserfs文件系統,來替代ext2和ext3:

    創建了文件系統以后,就可以加載并使用它:

    # mkdir /data/wwwroot
    # mount /dev/web_document/www1 /data/wwwroot

    如果希望系統啟動時自動加載文件系統,則還需要在/etc/fstab中添加內容:

    /dev/web_document/www1 /data/wwwroot reiserfs defaults 1 2

    9、 刪除一個邏輯卷
    刪除邏輯卷以前首先需要將其卸載,然后刪除:

    # umount /dev/web_document/www1
    # lvremove /dev/web_document/www1
    lvremove -- do you really want to remove "/dev/web_document/www1"? [y/n]: y
    lvremove -- doing automatic backup of volume group "web_document"
    lvremove -- logical volume "/dev/web_document/www1" successfully removed

    10、 擴展邏輯卷大小
    用慣了傳統調整硬盤工具的人可能會認為文件系統和硬盤的分區之間是統一的,實際上他們之間并不是完整的整體(這也就是為什么BSD可以在一個硬盤分區里面制作多個文件系統分區)。想像一下帶有移動式書架的書櫥。你可以通過移動式書架調整書櫥里面書籍的位置。把書當成文件系統,你可以在書櫥里面放滿書籍,也可以通過移動式書架調整書櫥的空間。當然也可以通過書架調整書櫥里面書籍存放的位置。如下圖所示:

    |<-- hda1--- ->|<-- hda2------>|
    +++
    |xxxxxxxxxxx|xxxxxx| |
    |xxxxxxxxxxx|xxxxxx| |
    +++

    硬盤分區/dev/hda1中的文件系統占滿了整個分區,而/dev/hda2中的文件系統只占用了2/3左右的分區。

    所以在調整邏輯卷容量大小的同時也要調整在該卷上的文件系統的大小,當要增大容量時,先調整容量,后調整文件系統,若要縮小容量則反之。

    LVM提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是lvextend:

    # lvextend -L12G /dev/web_document/www1
    lvextend -- extending logical volume "/dev/web_document/www1" to 12 GB
    lvextend -- doing automatic backup of volume group "web_document "
    lvextend -- logical volume "/dev/web_document/www1" successfully extended

    上面的命令就實現將邏輯卷www1的大小擴招為12G。

    # lvextend -L+1G /dev/web_document/www1
    lvextend -- extending logical volume "/dev/web_document/www1" to 13 GB
    lvextend -- doing automatic backup of?volume group?"web_document "
    lvextend -- logical volume "/dev/web_document/www1" successfully extended

    上面的命令就實現將邏輯卷www1的大小增加1G。

    增加了邏輯卷的容量以后,就需要修改文件系統大小以實現利用擴充的空間。筆者推薦使用reiserfs文件系統來替代ext2或者ext3。因此這里僅僅討論reiserfs的情況。Reiserfs文件工具提供了文件系統大小調整工具:resize_reiserfs。對于希望調整被加載的文件系統大小:

    # resize_reiserfs -f /dev/web_document/www1

    一般建議最好將文件系統卸載,調整大小,然后再加載:

    # umount /dev/web_document/www1
    # resize_reiserfs /dev/web_document/www1
    # mount -treiserfs /dev/web_document/www1 /data/wwwroot

    對于使用ext2或ext3文件系統的用戶可以考慮使用工具

    ext2resize。

    11、 減少邏輯卷大小

    使用lvreduce即可實現對邏輯卷的容量,同樣需要首先將文件系統卸載:

    # umount /data/wwwroot
    # resize_reiserfs -s-2G /dev/web_document/www1
    # lvreduce -L-2G /dev/web_document/www1
    # mount -treiserfs /dev/web_document/www1 /data/wwwroot

    五、 總結
    根據上面的討論可以看到,LVM具有很好的可伸縮性,使用起來非常方便。可以方便地對卷組、邏輯卷的大小進行調整,更進一步調整文件系統的大小。如果希望了解更多信息,請參考LVM-HOWTO。

image.php?url=0KNRgF70uX

轉載于:https://my.oschina.net/u/3635497/blog/2254749

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[LeedCode]921. 使括號有效的最少添加

題目描述&#xff1a; 給定一個由 ( 和 ) 括號組成的字符串 S&#xff0c;我們需要添加最少的括號&#xff08; ( 或是 )&#xff0c;可以在任何位置&#xff09;&#xff0c;以使得到的括號字符串有效。從形式上講&#xff0c;只有滿足下面幾點之一&#xff0c;括號字符串才是…

abstract的一些用法

&#xfeff;&#xfeff;abstract&#xff08;抽象&#xff09;修飾符&#xff0c;可以修飾類和方法 1&#xff0c;abstract修飾類&#xff0c;會使這個類成為一個抽象類&#xff0c;這個類將不能生成對象實例&#xff0c;但可以做為對象變量聲明的類型&#xff0c;也就是編譯…

github 如何設置項目的語言顯示

github 會根據一個項目文件最多的那個種類的文件顯示為對應的語言項目 如果想讓整個項目顯示為 HTML 項目, 需要進行以下步驟的設置 1.在根目錄下創建一個文件 .gitattributescreate .gitattributes2.在 .gitattributes 內編輯以下內容&#xff1a; *.js linguist-languageHTML…

C++提高進階,你知道多少?

C從零開始 ——何謂編程 引言 曾經有些人問我問題&#xff0c;問得都是一些很基礎的問題&#xff0c;但這些人卻已經能使用VC編一個對話框界面來進行必要的操作或者是文檔/視界面來實時接收端口數據并動態顯示曲線&#xff08;還使用了多線程技術&#xff09;&#xff0c;卻連…

POJ 3352 Road Construction ; POJ 3177 Redundant Paths (雙聯通)

這兩題好像是一樣的&#xff0c;就是3177要去掉重邊。 但是為什么要去重邊呢&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;我認為如果有重邊的話&#xff0c;應該也要考慮在內才是。 這兩題我用了求割邊&#xff0c;在去掉割邊&#xff0c;用DFS縮…

postman界面變成了左右結構怎么辦

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在左上角 file -- settongs中設置一下&#xff1a;

面向對象階段個人總結

&#xfeff;&#xfeff;面向對象階段的個人總結 我個人對面相對向的總結。我想到了我認為比較好的方法&#xff0c;就是對照每次學習一個大模塊的前的章節目錄進行回顧總結&#xff0c;比如我們這階段學習是面向對象的課程&#xff0c;下面我就來按照章節 目錄進行一個系統…

1.springboot:入門程序

一、Spring Boot 簡介 官網英文&#xff1a; Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get st…

2018.12.18運算符,分支結構(循環),異常處理,函數

1復習 <!DOCTYPE html><html><head> <meta charset"UTF-8"> <title>復習預習</title> <style> .b { /* 作用域: {}產生的, {作用域開始的標識, }作用域結束的標識 */ /*出現在作用域中的所有內…

javax.ws.rs.NotSupportedException: Cannot consume content type

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a;javax.ws.rs.NotSupportedException: Cannot consume content type 解決&#xff1a;使用postman發送 post 請求訪…

java異常預習

java中的異常捕獲結構有try&#xff0c;catch&#xff0c;finally三部分組成。其中&#xff0c;try語句塊存放的是可能發生異常的java語句&#xff1b;catch程序塊在try語句塊之后&#xff0c;用來激發被捕獲的異常&#xff1b;finally語句塊是異常處理結構的最后執行部分&…

【親測有效】Kali Linux無法安裝網易云音樂的解決方案

問題描述 由于 Kali Linux 的內核是基于 Debian 的&#xff0c;我們在安裝網易云音樂的時候更偏向于選擇安裝網易云音樂 v1.1.0 deepin15&#xff08;64位&#xff09; 的包&#xff0c;可是我發現在安裝過程中&#xff0c;無法定位 libqcef1 軟件包&#xff0c;對于很多鐘愛網…

C/C++函數名修飾約定

函數名字修飾&#xff08;Decorated Name&#xff09;方式 函數的名字修飾&#xff08;Decorated Name&#xff09;就是編譯器在編譯期間創建的一個字符串&#xff0c;用來指明函數的定義或原型。 正在裝載數據…… LINK程序或其他工具有時需要指定函數的名字修飾來定位函數的…

設計模式中類之間的關系

設計模式 個人感覺設計模式是程序員的核心技能 &#xff0c;然后看了一些設計模式的書&#xff0c;都是講設計模式的一些理論&#xff0c;放在實現上都有點模糊&#xff0c;后來圖書館看到一本《設計模式的藝術》&#xff0c;感覺很不錯&#xff0c;有一些比較具體且容易理解的…

如何查看jar包的版本號?

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 jar包根目錄里的META-INF目錄下的MANIFEST.MF文件里一般有會記錄版本信息&#xff0c;可以到這個文件里查看 打開Java的JAR文件我們經…

JAVA中的toString()方法的用法

toString是Object類的方法&#xff0c;所有類都從Object類繼承。如果你定義的類沒有覆蓋toString方法&#xff0c;則對象在調用toString方法時用的是Object類toString方法&#xff0c;返回的是“類名hashcode". System.out.println(obj)在參數是一個對象時&#xff0c;會首…

kotlin使用spring data jpa(一)

2019獨角獸企業重金招聘Python工程師標準>>> 簡單查詢 spring data jpa是spring全家桶成員之一&#xff0c;用于操作各種數據庫&#xff0c;下面寫一個查詢訂單的簡單示例 引入sqlserver驅動包及jpa所需包implementation(org.springframework.boot:spring-boot-star…

VC的函數修飾名

VC 中的修飾名(Decoration name) “C”或者“C”函數在內部&#xff08;編譯和鏈接&#xff09;通過修飾名識別。修飾名是編譯器在編譯函數定義或者原型時生成的字 符串。有些情況下使用函數的修飾名是必要的&#xff0c;如在模塊定義文件里頭指定輸出“C”重載函數、構造函數、…

You can‘t specify target table ‘XXX‘ for update in FROM clause

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff0c;意思大致是&#xff1a;在一條 sql 語句中不能先查出來部分內容&#xff0c;再同時又對當前表作修改。 解決方法&…

牛客網——最簡真分數

題目描述 給出n個正整數&#xff0c;任取兩個數分別作為分子和分母組成最簡真分數&#xff0c;編程求共有幾個這樣的組合。輸入描述: 每組包含n&#xff08;n<600&#xff09;和n個不同的整數&#xff0c;整數大于1且小于等于1000。 輸出描述: 每行輸出最簡真分數組合的個數…