什麼是LVM
LVM(Logical Volume Manager)邏輯卷管理,是一種将一個或多個硬盤的分區在邏輯上集合,相當于一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續将其它的硬盤的分區加入其中,可以認為是一種磁盤空間的動态管理。
LVM必要性
如果虛拟機裝的是20G的硬盤,如果不用LVM,你的磁盤是無法擴容的,不是說不能從20G變成40G,因為可以通過挂載多個硬盤的方式。
比如mysql挂載到這20G硬盤上,
如果沒有用lvm,再想擴容20個G的話,
等于又多出了一個硬盤,2個磁盤即所謂的2個硬盤,硬盤a裝的是sda,硬盤b裝的是sdb。
這2個20G是獨立的,并不能讓一個20G擴容到40G,獨立的就麻煩了:mysql往這個磁盤寫,怎麼讓它往另外一個磁盤上寫呢,寫不了,因為在配置mysql數據目錄的時候,就指定了往哪個目錄裡面寫,
mysql的數據目錄是/var/mysql/data,往硬盤a上的這個目錄下寫入數據,但不能往硬盤b的這個目錄下寫入數據,因為2個磁盤不能共享一個位置,隻能往一個磁盤上寫,除非把數據庫的目錄挪到另外一個磁盤上。
mysql的數據目錄是/var/mysql/data,對于linux來說,叫目錄挂載,在相同的目錄下,不能起相同文件夾的名字,不像Windows的C、D、E盤。
在硬盤a上有了目錄/var/mysql/data了,在硬盤b上就不能再有這樣一個目錄了,除非把硬盤a的這個目錄删了。
2個磁盤怎麼寫數據?把磁盤2修改成40G,把磁盤1的數據複制過來?這也不科學,因為中間有個數據複制的過程,
20G還可以複制,那2PB(2000T)呢?一個普通的機械硬盤,複制4TB的數據,需要72小時。
所以隻能通過LVM解決了,LVM有卷和組的概念,LV是邏輯卷,VG(volume group)是卷組,PV是物理卷,卷組裡面可以放磁盤,
以mysql寫入數據為例,
vg邏輯卷組裡面放了一塊20G的磁盤lv,這個lv就是邏輯卷,vg是邏輯卷組,卷組裡面可以放多個邏輯卷,
mysql存儲數據用的是vg邏輯卷組,而不是lv邏輯卷,邏輯卷組雖然不能無限的挂載邏輯卷,但挂載幾個TB還是可以的,超過幾個TB的數據,不還有分庫分表嘛。
接下來看下使用lvm怎麼把20G擴容到60G?
虛拟機現在有一個20G的硬盤,再加一塊硬盤,就和買一塊硬盤插入上去是一個道理。加設備要關機,但在實際環境中,有個技術叫熱插拔,不關機也可以插拔硬盤,
這樣就多了一塊40G的硬盤,
怎麼把這兩塊硬盤變成一塊?
有一個ubuntu-vg-ubuntu-lv,這個大小是19G,怎麼把19G變成60G?
ubuntu-lv這個是邏輯卷的名字,屬于ubuntu-vg這個邏輯卷組,挂載到了/dev/ubuntu-vg/ubuntu-lv這個路徑下,大小是19G,
這個邏輯組的大小也是19G,free為 0代表沒有空閑空間,/dev/sda3 這個是物理卷,實實在在存儲數據的硬盤。
買回新的硬盤,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,隻不過都用工具替代了這個命令,這是最原始的格式化工具。
sda是第一塊硬盤,
sdb是第二塊硬盤,
可以看到有一個/dev/sdb 40G的硬盤,如果再加一個硬盤,就會看到有一個/dev/sdc,...,一直到/dev/sdz,再新增硬盤,就是/dev/sda1,/dev/sdb1....
創建新的分區
/dev/sdb是新加入的磁盤,但還不能使用,還需要對這個硬盤創建分區,
新建分區,分主分區和擴展分區,一塊硬盤最多可以分4個分區,要麼是主分區,要麼是擴展分區,一共隻能分4個分區。
這裡測試就分一個主分區,但從哪裡開始?
磁盤有個簇的概念,空間有個範圍,寫在2000到4000的位置,那0-2000空着行不?
硬盤是個方塊,裡面有個碟片,碟片是圓的,上面有個機關式的會轉,類似vcd、dvd一樣。
壞道是怎麼來的?盒子裡面是個圓圈,有激光在上面讀,正常在裡面高速旋轉,磁頭就會到那個上面來,像vcd一樣轉轉轉,如果沒有斷電會收回去,放回到原來的位置,一斷電就收不回去了,卡在這個位置上,就停下來了,卡在磁盤的盤片上,一來電,就滋滋滋,再放回去,直接拉回去,就會産生一道杠,這就是磁盤壞道的由來,所以電腦運行的好好的,就不可以突然斷電,不然就會卡在那個上面 ,回不去,一開機,再拉回來,搞幾次, 磁盤就壞了。
為了解決這個問題,熱插拔怎麼搞定這個問題的,這個後續的文章再說。
分一個主分區之後,再寫入進去。磁盤叫sdb分了一個區,分的第一區叫sdb1,第2個區就是sdb2。
接下來就要格式化了,一開始裝的時候,就是ext4文件系統,磁盤格式化的時候也是這個格式,
sda這個物理卷,其實有3個分區,sda1、sda2、sda3,數據真正寫在sda3上,沒有空閑空間,因為在裝的時候,所有的空間為19個G都給到了sda3這個分區。
/dev/sda3這個物理卷對應的邏輯卷lv屬于ubuntu-vg這個卷組,/dev/sdb1這個物理卷,還沒有分配卷組。
這兩個磁盤總共60G的大小,有40個G還沒有加入卷組,
此時這個卷組隻有一個邏輯卷19G,沒有空閑空間,所以需要把sdb1弄到這個卷組裡面,達到擴容的效果。
可以看到/dev/sdb1已經添加到卷組中了
這個卷組多了一塊物理卷,空閑空間有40G,說明有40G的空間等待分配,把40G的空閑空間添加到原始空間裡去,目前原始空間大小是19G,添加之後,就變成了60G,達到擴容的效果。
物理卷寫東西是通過往pv裡寫數據實現的,實際上通過/dev/ubuntu-vg/ubuntu-lv這個路徑往pv裡寫,這就是邏輯卷的概念。
這個路徑是19G,要把它增加到60G,為這個邏輯卷lv擴容,有2種方式:
增加10個G之後,這個lv邏輯卷的大小為29G了,
還需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
查看卷組
空閑空間還有30G,一次性想把這30個G弄上去,就使用百分比的方式。
查看lv大小是60G了,
再刷新下,才可以使用
這樣就擴容到了60G了。
小結
lvm是一種技術,它能将不同的硬盤變成一塊硬盤用,有一個分組的概念,然後在組裡面挂載所有的邏輯卷,邏輯卷是指向磁盤本身的,也就是說你不用lvm,就沒有邏輯卷的概念。直接往硬盤裡寫東西,硬盤肯定是分開的 ,隻有中間加入了一個概念叫邏輯卷,由邏輯卷幫你托管物理卷。真的磁盤叫物理卷,邏輯磁盤是不是真正的磁盤,和物理删除和邏輯删除是一個道理。由邏輯卷幫你操作物理卷,它來負責分發和寫入,從磁盤上實現了所謂的負載均衡。
那寫入的時候怎麼寫入呢?
mysql往裡面寫入數據,
創建一個user表,也許寫在第一個邏輯卷裡,創建一個商品表,寫在第二個邏輯卷裡,寫到哪個磁盤,對我們來說是無感知的,因為mysql直接和卷組打交道,卷組vg幫我們做分散寫。
如果下掉一塊硬盤會怎樣?有可能數據就讀不出來了,因為是散列的往裡寫,沒有真正的寫入一塊硬盤裡,而是把一組數據分散寫在不同的磁盤裡,具體的怎麼寫法不知道,但就知道被分散寫進去了。
一旦下掉一塊硬盤,數據就可能無法讀取了,一旦lvm擴容,就不可以再把硬盤卸載掉了。
不卸載可以再引申一個新的問題:磁盤壞道,因為磁盤不可能不壞吧,從而引入新的概念,熱備份,後續再更新,敬請期待。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!