認識和使用LVM,過一遍!

来源:https://www.cnblogs.com/itsfei/archive/2023/02/01/17083077.html
-Advertisement-
Play Games

疑惑 最近在反覆搭建ceph集群過程中,總是遇到osd創建不成功的問題,疑似硬碟殘留信息,排查中引出了很多陌生的命令,比如vgremove等,於是打算重新瞭解這部分。 LVM是什麼? 邏輯捲管理器(LVM,Logical Volume Manager)是一種把硬碟空間分配成邏輯捲的方法。 看到定義可 ...


疑惑

最近在反覆搭建ceph集群過程中,總是遇到osd創建不成功的問題,疑似硬碟殘留信息,排查中引出了很多陌生的命令,比如vgremove等,於是打算重新瞭解這部分。

LVM是什麼?

邏輯捲管理器(LVM,Logical Volume Manager)是一種把硬碟空間分配成邏輯捲的方法。

看到定義可能還比較懵,不妨結合場景:

有一塊系統盤空間隨著時間推移容量需要擴容該怎麼做?

這時候使用LVM就比較方便了,它可以彈性的調整文件系統的容量,可以整合多個物理分區在一起,讓這些分區看起來像是一個磁碟一樣。通俗理解就是它可以將很多硬碟/分區全部拿過來作為一個資源池,然後自己再隨意劃分成邏輯層面的分區,那麼這個分區後期進行擴容縮容刪除就比較方便了!

LVM相關概念

1、Physical Volume,PV,物理捲

[root@node3 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x172f2548.

Command (m for help): p                                        ###輸入 p 查看分區情況

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x172f2548

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n                                      ###輸入 n 創建新分區
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p                                        ### 預設是 p ,創建主分區,視情況而定
Partition number (1-4, default 1): 1                         ###這裡做第一塊主分區
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p                                      ###再次輸入 p 查看分區情況

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x172f2548

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   83  Linux

Command (m for help): w                                 ###最後輸入 w 保存從sdb分出來的sdb1    
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

fdisk -l查看是否分區成功

[root@node3 ~]# fdisk -l

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x172f2548

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   83  Linux

可以看到實際分區Id欄位為83,使用時需要通過 fdisk 命令將Id欄位調整為8e(LVM 的標識符),再經過 pvcreate 命令將它轉為 LVM 最底層的物理捲(PV),之後這些PV才能夠被利用

[root@node3 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t                                  ###輸入 t 修改分區類型
Selected partition 1
Hex code (type L to list all codes): L                   ###輸入 L 列出所有分區類型

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / 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 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 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 hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): 8e                ###輸入 8e 修改為指定分區類型
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p                                ######輸入 p 查看分區情況

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x172f2548

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   8e  Linux LVM

Command (m for help): w                                ###最後輸入 w 保存修改的分區類型
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

使用pvcreate創建pv

[root@node3 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

2、Volume Group,VG,捲組

VG可以理解為很多物理捲(PV)所組成的組

[root@node3 ~]# vgcreate storage /dev/sdb1
  Volume group "storage" successfully created

[root@node3 ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  System ID
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               fK1Wcs-B1BL-TY3G-IRiJ-7JnV-wd0T-CRFx95

使用vgextend添加 pv 到 vg

[root@node3 ~]# vgextend storage /dev/sdc
sdc   sdc1

[root@node3 ~]# vgextend storage /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.
  Volume group "storage" successfully extended
[root@node3 ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               fK1Wcs-B1BL-TY3G-IRiJ-7JnV-wd0T-CRFx95

可以看到兩個 pv 已經成功添加到 vg 中

3、Logical Volume,LV,邏輯捲

LV 是由 VG 切分而來的,此時 LV 就可以當成一個分區格式化來使用了,

lvcreate 參數
-L 是直接制定容量,基礎單位是MB,如果要切割出1G空間,則 -L 1G,MB以此類推。

-l 是以基本單元的個數為單位,每個基本單元的大小是4MB,-l 20,則是切割出4*20=80M空間。

-n 是指定生成邏輯捲的名稱。

在捲組中切割出一個:名稱為test1,大小為5G的空間:

[root@node3 ~]# lvcreate -n test1 -L 5G storage
  Logical volume "test1" created.

[root@node3 ~]# lvdisplay                        ###查看lv
  --- Logical volume ---
  LV Path                /dev/storage/test1
  LV Name                test1
  VG Name                storage
  LV UUID                WkSHKt-2GPL-sZX0-ZZeu-KGZB-9Gao-vufFmC
  LV Write Access        read/write
  LV Creation host, time node3, 2023-02-01 15:22:25 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

格式化、掛載使用

[root@node3 ~]# mkfs.ext4 /dev/storage/test1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=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: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@node3 ~]# mkdir /mnt/dir1

[root@node3 ~]# mount /dev/storage/test1 /mnt/dir1/

[root@node3 ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   1.9G     0  1.9G   0% /dev
tmpfs                      1.9G     0  1.9G   0% /dev/shm
tmpfs                      1.9G   20M  1.9G   2% /run
tmpfs                      1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda2                   19G  2.2G   17G  12% /
/dev/sda1                 1014M  142M  873M  14% /boot
tmpfs                      378M     0  378M   0% /run/user/0
/dev/mapper/storage-test1  4.8G   20M  4.6G   1% /mnt/dir1

4、Physical Extend,PE,物理擴展塊

PE 是整個 LVM 最小的存儲塊,LVM 的 VG 最多僅能含有 65534 個 PE,一個 PE 預設的大小時 4M。
所以可以通過調整 PE 來調整 VG最大容量。

# vgdisplay
  --- Volume group ---
  VG Name               ceph-77651246-631b-44d8-9ece-1cc0af8e0b68
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  17
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               9.00 GiB
  PE Size               1.00 GiB
  Total PE              9
  Alloc PE / Size       9 / 9.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               GdTfRy-au4B-DgAN-Ej2X-XgdK-hFNz-wDrLm1

LV 擴容、縮容

擴容

[root@node3 ~]# umount /mnt/dir1/                                  ###解除掛載

[root@node3 ~]# lvextend -L 15G /dev/storage/test1                 ###vg容量不夠
  Insufficient free space: 2560 extents needed, but only 2558 available

[root@node3 ~]# lvextend -L 10G /dev/storage/test1             ###擴展後的分區容量,必須大於原容量
  Size of logical volume storage/test1 changed from 5.00 GiB (1280 extents) to 10.00 GiB (2560 extents).
  Logical volume storage/test1 successfully resized.

[root@node3 ~]# e2fsck -f /dev/storage/test1                    ###檢查硬碟的完整性
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/test1: 11/327680 files (0.0% non-contiguous), 58462/1310720 blocks

[root@node3 ~]# resize2fs /dev/storage/test1                     ###重置硬碟容量
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/test1 to 2621440 (4k) blocks.
The filesystem on /dev/storage/test1 is now 2621440 blocks long.

[root@node3 ~]# mount /dev/storage/test1 /mnt/dir1/              ###重新掛載使用
[root@node3 ~]# df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   1.9G     0  1.9G   0% /dev
tmpfs                      1.9G     0  1.9G   0% /dev/shm
tmpfs                      1.9G   20M  1.9G   2% /run
tmpfs                      1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda2                   19G  2.2G   17G  12% /
/dev/sda1                 1014M  142M  873M  14% /boot
tmpfs                      378M     0  378M   0% /run/user/0
/dev/mapper/storage-test1  9.8G   23M  9.2G   1% /mnt/dir1

縮容

lvextend -L 3G /dev/storage/test1              ###操作參考擴容

LV刪除、卸載

[root@node3 ~]# umount /mnt/dir1/                            ###解除掛載

[root@node3 ~]# lvremove /dev/storage/test1                  ###刪除lv
Do you really want to remove active logical volume storage/test1? [y/n]: y
  Logical volume "test1" successfully removed

[root@node3 ~]# vgremove storage                             ###刪除vg
Do you really want to remove volume group "storage" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume storage/test2? [y/n]: y
  Logical volume "test2" successfully removed
  Volume group "storage" successfully removed

[root@node3 ~]# pvremove /dev/sdb1                           ###刪除pv
  Labels on physical volume "/dev/sdb1" successfully wiped.

over!!!


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

-Advertisement-
Play Games
更多相關文章
  • 本文記錄一次線上 GC 問題的排查過程與思路,希望對各位讀者有所幫助。過程中也走了一些彎路,現在有時間沉澱下來思考並總結出來分享給大家,希望對大家今後排查線上 GC 問題有幫助。 ...
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 CSDN: 碼農BookSea 人的一切痛苦,本質上都是對自己的無能的憤怒。——王小波 ZGC有人稱它為Zero GC,其實“Z”並非什麼專業名詞的縮寫,這款收集器的名字就叫作Z Garbage Collector ...
  • 摘要:AQS 的全稱為(AbstractQueuedSynchronizer),AQS 是一個用來構建鎖和同步器的框架,使用 AQS 能簡單且高效地構造出應用廣泛的大量的同步器。 本文分享自華為雲社區《【高併發】AQS中的CountDownLatch、Semaphore與CyclicBarrier核 ...
  • 題目背景(題目鏈接) 題目描述 給定一個N*M方格的迷宮,迷宮裡有T處障礙,障礙處不可通過。 在迷宮中移動有上下左右四種方式,每次只能移動一個方格。數據保證起點上沒有障礙。 給定起點坐標和終點坐標,每個方格最多經過一次,問有多少種從起點坐標到終點坐標的方案。 輸入格式 第一行為三個正整數 N,M,T ...
  • 當我們在製作PDF文件或者PPT演示文稿的時候,為了讓自己的文件更全面詳細,就會在文件中添加附件。並且將相關文檔附加到 PDF 可以方便文檔的集中管理和傳輸。那麼如何添加或刪除 PDF 中的附件呢?別擔心,我們可以通過編程方式輕鬆實現此操作。下麵是我整理的具體步驟,並附上Java代碼供大家參考。 文 ...
  • Java實現BP神經網路,內含BP神經網路類,採用MNIST數據集,包含伺服器和客戶端程式,可在伺服器訓練後使客戶端直接使用訓練結果,界面有畫板,可以手寫數字 ...
  • 一 引入 考慮實現一種三軸機器人控制項。 三軸機器人用來將某種工件從一個位置運送到另一個位置。 其X軸為手臂軸,可以正向和反向運動,它處於末端,直接接觸工件; 其T軸為旋轉軸,可以對手臂進行旋轉; 其Z軸為升降軸,可以對手臂和旋轉部分進行升降。 二 RobotControl 定義出機器人的軸動作枚舉, ...
  • 前言 相信大家看過不少講C# async await的文章,博客園就能搜到很多,但還是有很多C#程式員不明白。 如果搞不明白,其實也不影響使用。但有人就會疑惑,為什麼要用非同步?我感覺它更慢了,跟同步有啥區別? 有的人研究深入,比如去研究狀態機,可能會明白其中的原理。但深入研究的畢竟少數。有的人寫一些 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...