Linux LVM詳解

来源:https://www.cnblogs.com/liugp/archive/2022/06/30/16421512.html
-Advertisement-
Play Games

一、簡介 LVM(Logical Volume Manager)邏輯捲管理,是在硬碟分區和文件系統之間添加的一個邏輯層,為文件系統屏蔽下層硬碟分區佈局,並提供一個抽象的盤捲,在盤捲上建立文件系統。管理員利用LVM可以在硬碟不用重新分區的情況下動態調整文件系統的大小,並且利用LVM管理的文件系統可以跨 ...


目錄

一、簡介

LVM(Logical Volume Manager)邏輯捲管理,是在硬碟分區和文件系統之間添加的一個邏輯層,為文件系統屏蔽下層硬碟分區佈局,並提供一個抽象的盤捲,在盤捲上建立文件系統。管理員利用LVM可以在硬碟不用重新分區的情況下動態調整文件系統的大小,並且利用LVM管理的文件系統可以跨越物理硬碟。當伺服器添加了新的硬碟後,管理員不必將原有的文件移動到新的硬碟上,而是通過LVM直接擴展文件系統來跨越物理硬碟。

LVM就是通過將底層的物理硬碟封裝,然後以邏輯捲的方式呈現給上層應用。當我們對底層的物理硬碟進行操作時,不再是針對分區進行操作,而是通過邏輯捲對底層硬碟進行管理操作。

基礎術語

物理存儲介質(The physical media):LVM存儲介質,可以是硬碟分區、整個硬碟、raid陣列或SAN硬碟。設備必須初始化為LVM物理捲,才能與LVM結合使用。

物理捲PV(physical volume):物理捲就是LVM的基本存儲邏輯塊,但和基本的物理存儲介質比較卻包含與LVM相關的管理參數,創建物理捲可以用硬碟分區,也可以用硬碟本身。

捲組VG(Volume Group):LVM捲組類似於非LVM系統中的物理硬碟,一個捲組VG由一個或多個物理捲PV組成。可以在捲組VG上建立邏輯捲LV。

邏輯捲LV(logical volume):類似於非LVM系統中的硬碟分區,邏輯捲LV建立在捲組VG之上。在邏輯捲LV之上建立文件系統。

物理塊PE(physical Extent):物理捲PV中可以分配的最小存儲單元,PE的大小可以指定,預設為4MB

邏輯塊LE(Logical Extent):邏輯捲LV中可以分配的最小存儲單元,在同一捲組VG中LE的大小和PE是相同的,並且一一相對。

創建LV邏輯捲流程圖

LVM的優點

捲組VG可以使多個硬碟空間看起來像是一個大硬碟。

邏輯捲LV可以創建跨多個硬碟空間的分區。

在使用邏輯捲LV時,可以在空間不足時動態調整大小,不需要考慮邏輯捲LV在硬碟上的位置,不用擔心沒有可用的連續的空間。

可以線上對捲組VG、邏輯捲LV進行創建、刪除、調整大小等操作。但LVM上的文件系統也需要重新調整大小。

LVM允許創建快照,用來保存文件系統的備份。

二、實驗

1)分區(非必須,也可以不分區),這裡我拿一塊盤分區,一塊盤不分區

不知道怎麼分區的可以參考我之前的文章:Linux磁碟分區、格式化、掛載

2)使用pvcreate創建物理捲PV

$ pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc
# 檢查
$ pvs

/dev/sdb1之前用ext4格式化過,這裡就會提示是否擦除它,選擇[y]擦除就行
檢查

文件類型已經是LVM2_member類型了

查看詳情

$ pvdisplay /dev/sdb1

3)創建捲組VG

使用vgcreate創建捲組VG,並且此處可以-s選項指定PE(LE)的大小,(預設PE大小4M)

$ vgcreate vg /dev/sdb1 /dev/sdb2 /dev/sdc

創建完成後查看一下

$ vgs
$ vgdisplay vg

[root@centos8-nat-168-182-152 ~]# vgdisplay vg
  --- Volume group ---
  VG Name               vg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <9.99 GiB
  PE Size               4.00 MiB //可以看到vg的PE大小為4M,預設大小
  Total PE              2557
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2557 / <9.99 GiB
  VG UUID               EWYDq2-cg88-ps4t-ZT8P-Fm7m-qkJq-8CKe0j

註意:PE大,讀取速度快,但浪費空間。反之,讀取速度慢,但節省空間。類似於socket

4)創建邏輯捲LV

使用lvcreate創建LV。lvcreate -n lvname -L lvsize(M,G) vgname

#創建三個LV
$ lvcreate -n lv1 -L 64M vg
$ lvcreate -n lv2 -L 128M vg
$ lvcreate -n lv3 -L 256M vg
#查看
$ lvs

此時我們再看下pv和vg的使用情況

$ pvdisplay /dev/sdb1
$ vgdisplay vg

5)格式化與掛載

註意:在格式化之前需要知道xfs文件系統只支持增大,不支持減小。ext2、ext3、ext4增大減小都支持。
所以這裡我們先使用ext4的文件系統格式化

#將lv1格式化成ext4
$ mkfs.ext4 /dev/vg/lv1
#創建掛載目錄
$ mkdir /opt/lv1
$ mount /dev/vg/lv1 /opt/lv1

這裡的/dev/vg/lv1實際是一個軟鏈接,實際地址如下

6)邏輯捲LV擴容(動態擴容)

首先需要確認是否有可用的擴容空間,邏輯捲LV是從捲組VG中創建的,所有在邏輯捲LV擴容前需要查看捲組VG的空間使用情況。

$ vgs
$ vgdisplay vg

在確認有多餘空間的情況下,使用lvextend命令的-L選項擴展邏輯捲LV的大小

#+100M是增加100M
$ lvextend -L +100M /dev/vg/lv1
#直接使用1024M是增加到1024M
$ lvextend -L 1024M /dev/vg/lv1
$ lvs

但是在我們使用df命令查看時,會發現我們文件系統並沒有擴展

$ df -h /opt/lv1

但是通過lsblk看是已經擴容了

$ lsblk

這是因為文件系統也需要擴容。ext4文件系統擴容使用"resize2fs [邏輯捲名稱]",xfs文件系統擴容使用"xfs_growfs 掛載點"

#ext4文件系統擴容
$ resize2fs /dev/vg/lv1

當然來到CentOS7後,我們還可以使用lvextend命令的-r選項來使文件系統自動擴容,實例如下:

$ lvextend -L +1024M -r /dev/vg/lv1
$ df -h

7)捲組VG擴容

捲組的擴容相當簡單,一般是LVM空間不夠時,添加一塊新硬碟時使用。

增加一塊磁碟/dev/sdd

擴容

$ vgextend vg /dev/sdd
$ vgs
$ pvs

8)邏輯捲LV縮小

邏輯捲LV縮小命令lvreduce與擴容命令類似,縮減邏輯捲LV請謹慎操作,實例如下:

1、lvreduce命令使用-L選項減少空間,-r選項減少文件系統空間,實現動態調整(這是ext4文件系統)

#縮容到100M
$ lvreduce -L 100M -r /dev/vg/lv1
$ df -h /opt/lv1

知識擴展

#擴展lv使用vg剩餘的所有空間 將/data1使用vg1剩餘的所有空間
$ lvextend -l +100%FREE /dev/vg/lv1   #註意這裡是小寫的l
#將vg剩餘的所有空間創建為一個lv
$ lvcreate -l 100%FREE -n lv2 vg      #註意這裡是小寫的l

2、如果不使用-r選項,那麼需要卸載掛載點再使用resize2fs調整

#卸載掛載
$ umount /opt/lv1
#運行e2fsck 檢測文件系統
$ e2fsck -f /dev/vg/lv1 
$ resize2fs /dev/vg/lv1 100M
$ lvreduce -L 100M /dev/vg/lv1
$ mount /dev/vg/lv1 /opt/lv1

註意:應該先縮小文件系統後再縮小邏輯捲,否則在進行lv邏輯捲縮小時產生文件系統大小與物理分區不匹配的錯誤
【問題】

-ext4 lvreduce報錯Either the superblock or the partition table is likely to be corrupt!

【解決】

# 卸載
$ umount /opt/lv1 
# 擴容至原來lv大小
$ lvresize -L 100M /dev/vg/lv1
# 檢查ext4文件系統,並校正
$ e2fsck -f /dev/vg/lv1
# lvreduce縮容
$ lvreduce -L 50M /dev/vg/lv1
$ mount /dev/vg/lv1 /opt/lv1

9)xfs文件系統的實驗

1、格式化、掛載

$ mkfs.xfs /dev/vg/lv2
$ mkdir /opt/lv2
$ mount /dev/vg/lv2 /opt/lv2
$ df -h /opt/lv2

2、使用lvextend的-L選項和-r選項動態擴容

# 使用-r動態擴容
$ lvextend -L +20M -r /dev/vg/lv2
# 下麵兩句就是動態擴容
$ lvextend -L 200M /dev/vg1/lv2
$ xfs_growfs /opt/lv2

3、縮容
使用lvreduce的-r選項嘗試減小空間,縮容失敗

$ lvreduce -L -20M -r /dev/vg/lv2

再試試lvreduce和xfs_growfs組合能不能動態減少空間。這裡為什麼說動態呢?因為xfs_groefs必須是掛載情況下才能使用,後面跟的是掛載點。

$ df -h /opt/lv2
$ lvreduce -L 100M /dev/vg/lv2
$ xfs_growfs /opt/lv2

一樣失敗了

結論:xfs文件系統真的只能增大,不能減小。

10)捲組VG縮小

捲組VG的縮小,要查看物理捲PV是否被使用,因為無法縮減一個正在使用的物理捲PV。如下:

#拷貝一些數據
$ cp /etc/passwd /opt/lv1/
$ pvs
$ vgreduce vg /dev/sdd

場景多用於更換舊硬碟。

11)刪除LVM

刪除LVM步驟:umount卸載-->lvremove移除邏輯捲LV-->vgremove移除捲組VG-->pvremove移除物理捲PV

#卸載,一定要卸載,要不然移除不了
umount /opt/lv1
umount /opt/lv2
umount /opt/mail-lv
#移除lv
lvremove /dev/vg/lv1
lvremove /dev/vg/lv2
lvremove /dev/vg/lv3
lvremove /dev/mail/mail-lv
#移除vg
$ vgremove vg
$ vgremove mail
#移除pv
$ pvremove /dev/sdb1
$ pvremove /dev/sdb2
$ pvremove /dev/sdc
$ pvremove /dev/sdd
$ pvs

12)擴展

SSM工具:檢查關於可用硬碟和LVM捲的信息。顯示關於現有磁碟存儲設備、存儲池、LVM捲和存儲快照的信息。

1、SSM的安裝

$ yum -y install system-storage-manager

2、SSM工具常用命令
1)列出設備信息

$ ssm list dev

2)列出存儲池信息

$ ssm list pool

3)列出捲信息

$ ssm list vol

4)SSM創建LVM

ssm create -s [lv大小] -n [lv名稱] --fstype [lv文件系統類型] -p [捲組名] [設備] [掛載點]
自動把設備變成pv,創建pv、lv,格式化文件系統,掛載目錄自動創建,自動掛載

$ ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sd[c-d] /opt/mail-lv


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java集合 學習資源:b站 人人都是程式員 《看動畫學java集合》 b站 韓順平 《java集合》 感謝二位的開源視頻,本博客為個人筆記,如有錯誤還請包涵 學習方法:推薦觀看視頻,自己用idea敲一遍然後debug一步步看,最後自己寫筆記和畫流程圖。 前 言 目的:為了方便和高效地存儲大批量的數 ...
  • Hi,大家好,我是Mic。 一個工作5年的粉絲,在簡歷上寫精通Kafka。 結果在面試的時候直接打臉。 面試官問他:“什麼是ISR,為什麼需要設計ISR” 然後他一臉懵逼的看著面試官. 下麵看看普通人和高手的回答。 普通人: ISR好像是Kafka裡面的一個機制吧。 為什麼要引入,應該是跟數據同步有 ...
  • runAsync 和 supplyAsync runAsync接受一個Runable的實現,無返回值 CompletableFuture.runAsync(()->System.out.println("無返回結果的運行")); supplyAsync接受一個Supplier的實現,有返回值 Com ...
  • 前言 🗯 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 水印這個詞相信大家已經不陌生了,畢竟現今天, 視頻有水印,圖片有水印,甚至一些電商平臺的展示圖也有水印 🍬 於是今天我就來分享一個python添加水印的方法~學會後你就不用自己去添加水印了, 只需要點一下運行~ python它自己自己給你弄好啦! ...
  • Sorted Set (ZSet) 數據結構 Sorted Set (ZSet), 即有序集合, 底層使用 壓縮列表(ziplist) 或者 跳躍表(skiplist) 使用 壓縮列表(ziplist) 當同時滿足下麵兩個條件時,使用 ziplist 存儲數據 元素個數少於128個 (zset-ma ...
  • 在程式開發過程中,我們一般會用到配置文件來設定一些參數。常見的配置文件格式為 **ini**, **xml**, **config**等。 ...
  • 在各種群里經常討論的一個事情是.NET 如何調用 Java 的實現,最常見的場景之一就是在加解密方面Java提供的密鑰,C#無法解密, C#中byte範圍是[0,255],而Java中的byte範圍是[-128,127],由於密碼生成器是java所獨有的,其它語言都不支持(IOS,ANDROID,C ...
  • MediaWPF 基於 .NET 6 實現視頻硬解碼渲染Demo(無空域問題) 代碼實現僅供學習參考 本項目視頻渲染通過顯卡進行視頻解碼,CPU幾乎不參與工作,並且不存在令人煩躁的空域問題。 在播放攝像頭多路視頻或高解析度、高幀率視頻時可以極大發揮顯卡性能(我認為該項目做到了這一點)。 支持各類網路 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...