tft每日頭條

 > 生活

 > k8s自動化運維十一-LVM動态擴容磁盤空間

k8s自動化運維十一-LVM動态擴容磁盤空間

生活 更新时间:2025-03-15 17:01:52

什麼是LVM

LVM(Logical Volume Manager)邏輯卷管理,是一種将一個或多個硬盤的分區在邏輯上集合,相當于一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續将其它的硬盤的分區加入其中,可以認為是一種磁盤空間的動态管理。

LVM必要性

如果虛拟機裝的是20G的硬盤,如果不用LVM,你的磁盤是無法擴容的,不是說不能從20G變成40G,因為可以通過挂載多個硬盤的方式。

比如mysql挂載到這20G硬盤上,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)1

如果沒有用lvm,再想擴容20個G的話,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)2

等于又多出了一個硬盤,2個磁盤即所謂的2個硬盤,硬盤a裝的是sda,硬盤b裝的是sdb。

這2個20G是獨立的,并不能讓一個20G擴容到40G,獨立的就麻煩了:mysql往這個磁盤寫,怎麼讓它往另外一個磁盤上寫呢,寫不了,因為在配置mysql數據目錄的時候,就指定了往哪個目錄裡面寫,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)3

mysql的數據目錄是/var/mysql/data,往硬盤a上的這個目錄下寫入數據,但不能往硬盤b的這個目錄下寫入數據,因為2個磁盤不能共享一個位置,隻能往一個磁盤上寫,除非把數據庫的目錄挪到另外一個磁盤上。

mysql的數據目錄是/var/mysql/data,對于linux來說,叫目錄挂載,在相同的目錄下,不能起相同文件夾的名字,不像Windows的C、D、E盤。

在硬盤a上有了目錄/var/mysql/data了,在硬盤b上就不能再有這樣一個目錄了,除非把硬盤a的這個目錄删了。

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)4

2個磁盤怎麼寫數據?把磁盤2修改成40G,把磁盤1的數據複制過來?這也不科學,因為中間有個數據複制的過程,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)5

20G還可以複制,那2PB(2000T)呢?一個普通的機械硬盤,複制4TB的數據,需要72小時。

所以隻能通過LVM解決了,LVM有卷和組的概念,LV是邏輯卷,VG(volume group)是卷組,PV是物理卷,卷組裡面可以放磁盤,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)6

以mysql寫入數據為例,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)7

vg邏輯卷組裡面放了一塊20G的磁盤lv,這個lv就是邏輯卷,vg是邏輯卷組,卷組裡面可以放多個邏輯卷,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)8

mysql存儲數據用的是vg邏輯卷組,而不是lv邏輯卷,邏輯卷組雖然不能無限的挂載邏輯卷,但挂載幾個TB還是可以的,超過幾個TB的數據,不還有分庫分表嘛。

接下來看下使用lvm怎麼把20G擴容到60G?

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)9

虛拟機現在有一個20G的硬盤,再加一塊硬盤,就和買一塊硬盤插入上去是一個道理。加設備要關機,但在實際環境中,有個技術叫熱插拔,不關機也可以插拔硬盤,

  • 添加硬盤

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)10

  • 選擇磁盤

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)11

  • 指定磁盤容量

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)12

  • 指定磁盤文件

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)13

這樣就多了一塊40G的硬盤,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)14

怎麼把這兩塊硬盤變成一塊?

  • 查看當前磁盤大小df -h

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)15

有一個ubuntu-vg-ubuntu-lv,這個大小是19G,怎麼把19G變成60G?

  • 查看當前的邏輯卷lvdisplay

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)16

ubuntu-lv這個是邏輯卷的名字,屬于ubuntu-vg這個邏輯卷組,挂載到了/dev/ubuntu-vg/ubuntu-lv這個路徑下,大小是19G,

  • 查看vg的大小pvdisplay

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)17

這個邏輯組的大小也是19G,free為 0代表沒有空閑空間,/dev/sda3 這個是物理卷,實實在在存儲數據的硬盤。

買回新的硬盤,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,隻不過都用工具替代了這個命令,這是最原始的格式化工具。

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)18

sda是第一塊硬盤,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)19

sdb是第二塊硬盤,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)20

  • 檢索硬盤
  • fdisk -l |grep '/dev'

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)21

可以看到有一個/dev/sdb 40G的硬盤,如果再加一個硬盤,就會看到有一個/dev/sdc,...,一直到/dev/sdz,再新增硬盤,就是/dev/sda1,/dev/sdb1....

創建新的分區

/dev/sdb是新加入的磁盤,但還不能使用,還需要對這個硬盤創建分區,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)22

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)23

新建分區,分主分區和擴展分區,一塊硬盤最多可以分4個分區,要麼是主分區,要麼是擴展分區,一共隻能分4個分區。

這裡測試就分一個主分區,但從哪裡開始?

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)24

磁盤有個簇的概念,空間有個範圍,寫在2000到4000的位置,那0-2000空着行不?

硬盤是個方塊,裡面有個碟片,碟片是圓的,上面有個機關式的會轉,類似vcd、dvd一樣。

壞道是怎麼來的?盒子裡面是個圓圈,有激光在上面讀,正常在裡面高速旋轉,磁頭就會到那個上面來,像vcd一樣轉轉轉,如果沒有斷電會收回去,放回到原來的位置,一斷電就收不回去了,卡在這個位置上,就停下來了,卡在磁盤的盤片上,一來電,就滋滋滋,再放回去,直接拉回去,就會産生一道杠,這就是磁盤壞道的由來,所以電腦運行的好好的,就不可以突然斷電,不然就會卡在那個上面 ,回不去,一開機,再拉回來,搞幾次, 磁盤就壞了。

為了解決這個問題,熱插拔怎麼搞定這個問題的,這個後續的文章再說。

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)25

分一個主分區之後,再寫入進去。磁盤叫sdb分了一個區,分的第一區叫sdb1,第2個區就是sdb2。

接下來就要格式化了,一開始裝的時候,就是ext4文件系統,磁盤格式化的時候也是這個格式,

  • 磁盤格式化mkfs -t ext4 /dev/sdb1

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)26

  • 創建物理卷(實實在在往裡面寫入數據的磁盤)pvcreate /dev/sdb1
  • 把sdb1這個分區變成了物理卷,就可以往裡面寫了。
  • 物理卷交給lvm管理,即邏輯卷lv

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)27

  • 查看卷組pvscan

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)28

sda這個物理卷,其實有3個分區,sda1、sda2、sda3,數據真正寫在sda3上,沒有空閑空間,因為在裝的時候,所有的空間為19個G都給到了sda3這個分區。

/dev/sda3這個物理卷對應的邏輯卷lv屬于ubuntu-vg這個卷組,/dev/sdb1這個物理卷,還沒有分配卷組。

這兩個磁盤總共60G的大小,有40個G還沒有加入卷組,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)29

此時這個卷組隻有一個邏輯卷19G,沒有空閑空間,所以需要把sdb1弄到這個卷組裡面,達到擴容的效果。

  • 把物理卷/dev/sdb1擴展到卷組裡面去
  • vgextend ubuntu-vg /dev/sdb1

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)30

  • 添加成功之後,查看卷組

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)31

可以看到/dev/sdb1已經添加到卷組中了

  • 查看卷組的情況

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)32

這個卷組多了一塊物理卷,空閑空間有40G,說明有40G的空間等待分配,把40G的空閑空間添加到原始空間裡去,目前原始空間大小是19G,添加之後,就變成了60G,達到擴容的效果。

  • 查看邏輯卷

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)33

物理卷寫東西是通過往pv裡寫數據實現的,實際上通過/dev/ubuntu-vg/ubuntu-lv這個路徑往pv裡寫,這就是邏輯卷的概念。

這個路徑是19G,要把它增加到60G,為這個邏輯卷lv擴容,有2種方式:

  • 按照大小擴容(增加10個G)lvextend -L 10G /dev/ubuntu-vg/ubuntu-lv

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)34

增加10個G之後,這個lv邏輯卷的大小為29G了,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)35

還需要再刷新一下,

resize2fs /dev/ubuntu-vg/ubuntu-lv

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)36

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)37

查看卷組

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)38

空閑空間還有30G,一次性想把這30個G弄上去,就使用百分比的方式。

  • 按照百分比擴容lvextend -l 100%FREE /dev/ubuntu-vg/ubuntu-lv

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)39

查看lv大小是60G了,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)40

再刷新下,才可以使用

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)41

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)42

這樣就擴容到了60G了。

小結

lvm是一種技術,它能将不同的硬盤變成一塊硬盤用,有一個分組的概念,然後在組裡面挂載所有的邏輯卷,邏輯卷是指向磁盤本身的,也就是說你不用lvm,就沒有邏輯卷的概念。直接往硬盤裡寫東西,硬盤肯定是分開的 ,隻有中間加入了一個概念叫邏輯卷,由邏輯卷幫你托管物理卷。真的磁盤叫物理卷,邏輯磁盤是不是真正的磁盤,和物理删除和邏輯删除是一個道理。由邏輯卷幫你操作物理卷,它來負責分發和寫入,從磁盤上實現了所謂的負載均衡。

那寫入的時候怎麼寫入呢?

mysql往裡面寫入數據,

k8s自動化運維十一-LVM動态擴容磁盤空間(k8s自動化運維十一-LVM動态擴容磁盤空間)43

創建一個user表,也許寫在第一個邏輯卷裡,創建一個商品表,寫在第二個邏輯卷裡,寫到哪個磁盤,對我們來說是無感知的,因為mysql直接和卷組打交道,卷組vg幫我們做分散寫。

如果下掉一塊硬盤會怎樣?有可能數據就讀不出來了,因為是散列的往裡寫,沒有真正的寫入一塊硬盤裡,而是把一組數據分散寫在不同的磁盤裡,具體的怎麼寫法不知道,但就知道被分散寫進去了。

一旦下掉一塊硬盤,數據就可能無法讀取了,一旦lvm擴容,就不可以再把硬盤卸載掉了。

不卸載可以再引申一個新的問題:磁盤壞道,因為磁盤不可能不壞吧,從而引入新的概念,熱備份,後續再更新,敬請期待。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved