記一次阿里雲LVM擴容與 LVM 相關知識學習


一、lvm 擴容

image

問題: 我們阿里雲服務器有一個磁盤容量為 1T ,但是最近由於業務的擴增,磁盤容量已經不夠了,需要增大磁盤的容量。磁盤掛載在 /home,使用的是 LVM。我們現在需要對磁盤進行擴容。

  1. 通過增加新的磁盤,然后將磁盤添加到卷組(VG),然后再將邏輯卷(LV)擴容。
  2. 擴容原有的磁盤。然后再將邏輯卷(LV)擴容。

1.1、方式一(增加新的磁盤)

增加新的磁盤和 原有硬盤做了分區基本一致。

實際操作

# 我們增加了一塊硬盤,/dev/vdc
# 創建分區
[root@djx ~]# fdisk /dev/vdc
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 0xd9ed71fb.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-1824522239, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1824522239, default 1824522239): 
Using default value 1824522239
Partition 1 of type Linux and of size 870 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
# 將磁盤加入到 VG卷組。
[root@djx ~]# vgextend sdr_vg  /dev/vdc1
  Physical volume "/dev/vdc1" successfully created.
  Volume group "sdr_vg" successfully extended
# 擴容邏輯卷  /dev/sdr_vg/lv_data,-l 指定的是PE數量 -L +800GB
[root@djx ~]# lvextend  -l +222719 /dev/sdr_vg/lv_data
  Size of logical volume sdr_vg/lv_data changed from <1024.00 GiB (262143 extents) to <1.85 TiB (484862 extents).
  Logical volume sdr_vg/lv_data successfully resized.
# 修改文件系統的大小,xfs 文件系統使用xfs_growfs。 
[root@djx ~]# xfs_growfs  /dev/sdr_vg/lv_data
meta-data=/dev/mapper/sdr_vg-lv_data isize=512    agcount=4, agsize=67108608 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=268434432, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=131071, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 268434432 to 496498688
# 查看磁盤是否擴容了。
[root@djx ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/vda1                    40G  5.6G   32G  15% /
devtmpfs                     16G     0   16G   0% /dev
tmpfs                        16G   12K   16G   1% /dev/shm
tmpfs                        16G  540K   16G   1% /run
tmpfs                        16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/sdr_vg-lv_data  1.9T  965G  929G  51% /home
tmpfs                       3.2G     0  3.2G   0% /run/user/1007

1.2、方式二(擴容原有的磁盤)

原有硬盤做了分區

假設原有的磁盤為 /dev/xdc ,已有分區 /dev/xdc1,我們對磁盤 /dev/xdc 擴容了。

fdisk  /dev/xdc   # 依次輸入 n  --》 p --> 默認 --》 默認 --》 w   這樣就將新加的磁盤空間到一個新的分區/dev/xdc2,
# 我們將該分區加入到卷組。

vgextend  卷組的名稱  /dev/xdc2

vgdisplay  # 查看卷組的空閑空間。

# 將擴容的空間添加到邏輯卷
lvextend -l +2558 /dev/vg_test/lv_test  # -l 指定的是PE數,我們可以使用 -L 來指定實際容量。 lvextend -L +9.99G /dev/vg_test/lv_test

# 修改文件系統的大小
## ext* 使用的命令

resize2fs  /dev/vg_test/lv_test
## xfs 使用的命令
xfs_growfs /dev/vg_test/lv_test

原有硬盤未做分區

我們在阿里雲選擇磁盤擴容,並選擇在線擴容(限制條件見阿里雲官網文檔)。擴容好了,我們可以在服務端進行使用 fidisk -l 查看,我們可以發現磁盤已經變大了。但是我們的物理卷沒有變化。

# pv 物理卷擴容后重新識別大小。
pvresize  /dev/xdb
pvdisplay # 在 Free PE 就可以查看到我們的新增加的空間大小

# 將擴容的空間添加到邏輯卷

lvextend -l +2558 /dev/vg_test/lv_test  # -l 指定的是PE數,我們可以使用 -L 來指定實際容量。 lvextend -L +9.99G /dev/vg_test/lv_test

# 修改文件系統的大小
## ext* 使用的命令

resize2fs  /dev/vg_test/lv_test
## xfs 使用的命令
xfs_growfs /dev/vg_test/lv_test

二、擴展

LVM 的常用命令

待補充

LVM 的擴展限制

  • 磁盤LV大小限制
  • PE 數量限制

本部分內容來自 lvm 擴展限制 :https://www.cnblogs.com/kerrycode/p/8662780.html

創建VG時, LVM卷組(VG)的物理擴展單元(Physical Extends 縮寫PE)大小是固定的, 在Linux命令行中,vgcreate 命令的選項-s表示顯式設置卷組(VG)上物理卷(PV)上PE的大小。

如果你沒有明確設置PE的大小的話,PE大小默認為4MB,但是,一旦這個值設定了,如果不重建VG的話, PE大小是無法修改的。這將涉及邏輯卷上的數據備份和數據恢復。

就目前的LVM2而言 - LVM版本號 2.02.06(2006-05-12),庫版本為1.02.07(2006-05-11),驅動程序版本4.5.0 - 沒有LVM命令或工具,甚至在HPUX中使用vgmodify,也無法動態或在線模式下調整或更改現有VG的LVM PE大小!

因此,建議在創建LVM卷組之前正確計划,例如,如果邏輯卷存儲的數據很有可能在不久的將來超過300G大小的話, 那么你在創建VG的時候,就不能設定PE大小為4MB。

為了限制Linux內核內存使用量,每個邏輯卷(LV)有65,536個物理盤區(PE)的限制。因此,LVM中PE大小將直接決定邏輯卷(LV)的最大大小!例如,4MB PE大小(默認PE大小)將單個邏輯卷(LV)限制為256GB,16MB PE大小將限制單個LV增長超過1TB,等等。

除PE大小因素外,單個LV的最大尺寸也受CPU架構和Linux內核版本的限制:

Linux內核版本2.4.x將最大LV大小限制為2TB。

在2.4.x之前的一些較早的Linux內核中,最大LV大小限制為1TB(由塊層中的整數簽名問題引起 caused by the integer signedness problems in the block layer)。

32位CPU和Linux內核版本2.6.x的組合,邏輯卷大小的限制在16TB時最大化。

對於在64位CPU上運行的Linux內核2.6.x,最大LV大小為8EB(此時非常恐怖的大容量存儲!)

翻譯完成,下面是我Google搜索到關於內核版本和CPU架構對邏輯卷的大小限制的描述資料。僅供參考。

 

 

·         For 2.4 based kernels, the maximum LV size is 2TB. For some older kernels, however, the limit was 1TB due to signedness problems in the block layer. Red Hat Enterprise Linux 3 Update 5 has fixes to allow the full 2TB LVs. Consult your distribution for more information in this regard.

·          

·         For 32-bit CPUs on 2.6 kernels, the maximum LV size is 16TB.

·          

·         For 64-bit CPUs on 2.6 kernels, the maximum LV size is 8EB. (Yes, that is a very large number.)

有一次創建了一個LV超過265G,但是PE Size為4M,這個讓我非常困惑,后面查了一下資料發現,以前有每個邏輯卷(LV)有65,536個物理盤區(PE)的限制,但是從LVM 2開始,沒有限制PE的數量。

Those limits (65536 LE per LV) does not apply to LVM 2 and 2.6 kernel.
Your LV can have much more LE (I dont know if there is even reachable
limit  for  this).  One  and only feedback (if you can notice this) is
that  userspace  programs for managing LVM works _little_ slower, when
there is enormous number od LE to administrate.
I tested it with 4GB LV on 16MB LE (but I didnt see difference)

我在上面進行擴容的時候,一直擔心有限制,但是在實際操作的時候是沒有發現限制的,因為我的內核版本也是比較新的,lvm 版本也是大的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM