Extent/Expand/Grow disk space đối với máy chủ ảo chạy linux

Máy chủ có 500GB ổ cứng, theo nhu cầu cần mở rộng lên 1TB
Máy chủ chạy centos 7 trên VMware
1, Lên VMWare, edit disk của máy chủ lên TB
2, Truy cập máy chủ centos:
– Scan lại disk

[root@mm-adap1 ~]# ls /sys/class/scsi_device/
0:0:0:0  3:0:0:0
[root@mm-adap1 ~]# echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan 
[root@mm-adap1 ~]# echo 1 > /sys/class/scsi_device/3\:0\:0\:0/device/rescan 
[root@mm-adap1 ~]# fdisk -l

Disk /dev/sda: 500 GB, 1099511627776 bytes, 2147483648 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: 0x000add72

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   629145599   313523200   8e  Linux LVM
/dev/sda3       629145600  1048575999   209715200   8e  Linux LVM

Disk /dev/mapper/centos_mm--adap1-root: 500 GB, 1098425303040 bytes, 2145361920 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

Đã thấy dung lượng tăng lên,  ổ đĩa tác động ở đây là /dev/sda, tiến hành fdisk

[root@mm-adap1 ~]# fdisk /dev/sda
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): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 4): 4
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): t
Selected partition 4
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

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

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

Khởi tạo physical volume

partprobe
[root@mm-adap1 ~]# pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created.

Lấy thông tin volume group hiện tại

[root@mm-adap1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               centos_mm-adap1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               498.99 GiB
  PE Size               4.00 MiB
  Total PE              127742
  Alloc PE / Size       127742 / 498.99 GiB
  Free  PE / Size       0 / 0   
  VG UUID               eyBefC-npQ3-Kl7Q-lHeC-j08s-OLCG-zl33QK

Ta được name VG Name = centos_mm-adap1, tiến hành nhét sda4 vừa tạo vào volume group

[root@mm-adap1 ~]# vgextend centos_mm-adap1 /dev/sda4
  Volume group "centos_mm-adap1" successfully extended

Làm tương tự, mở rộng tiếp logical volume

[root@mm-adap1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos_mm-adap1/root
  LV Name                root
  VG Name                centos_mm-adap1
  LV UUID                dzkVGt-aTiT-bWyI-kYDm-cUES-7WEm-tAtFva
  LV Write Access        read/write
  LV Creation host, time mm-adap1, 2020-10-18 16:46:50 +0700
  LV Status              available
  # open                 1
  LV Size                498.99 GiB
  Current LE             127742
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@mm-adap1 ~]# lvextend /dev/centos_mm-adap1/root /dev/sda4
  Size of logical volume centos_mm-adap1/root changed from 498.99 GiB (127742 extents) to <1022.99 GiB (261885 extents).
  Logical volume centos_mm-adap1/root successfully resized.

Kiểm tra mount

[root@mm-adap1 ~]# mount | grep -i mapper
/dev/mapper/centos_mm--adap1-root on / type ext4 (rw,relatime,data=ordered)

Thấy LVM /dev/mapper/centos_mm–adap1-root
tiến hành resize, ở đây phân vùng xài ext4 nên sử dụng resize2fs

[root@mm-adap1 ~]# resize2fs /dev/mapper/centos_mm--adap1-root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/centos_mm--adap1-root is mounted on /; on-line resizing required
old_desc_blocks = 63, new_desc_blocks = 128
The filesystem on /dev/mapper/centos_mm--adap1-root is now 268170240 blocks long.

Kiểm tra lại thấy / đã có 1TB

[root@mm-adap1 ~]# df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/centos_mm--adap1-root 1007G  107G  857G  12% /
devtmpfs                            16G     0   16G   0% /dev
tmpfs                               16G     0   16G   0% /dev/shm
tmpfs                               16G  169M   16G   2% /run
tmpfs                               16G     0   16G   0% /sys/fs/cgroup
/dev/sda1                          976M  100M  810M  11% /boot
tmpfs                              3.2G     0  3.2G   0% /run/user/0

 

 

Thêm disk cho LVM

Ngày mua máy chủ, sếp bảo: cty ta nghèo đói rách nát, đợt này mua máy chủ, k đủ tiền mua con ổ to, anh em chịu khó, mai mốt có lãi ta mua thêm ổ nữa cắm vào. Lúc ấy thằng éo nào cũng gật gù, đành chịu chứ làm sao, sếp k có tiền chả lẽ cả lũ thích sếp trừ lương lấy tiền mua ổ cứng.
Dùng được một thời gian, cuối cùng ngày đó cũng tới. Sếp cho thêm con ổ nữa , nhưng khốn nạn là con máy chủ đang chạy, có cách nào nới rộng ra mà không ảnh hưởng gì không?
May thay, hồi xưa cài máy, anh em khôn nên cài lvm, mà mặc định cài centos 7 nó đã có lvm rồi, giờ chỉ add disk vào resize là được. Dưới đây, chúng ta sẽ làm điều đó:

Môi trường gốc:

OS: Centos 7
mount point / dung lượng 5GB
Add thêm ổ mới 10GB
-> mục tiêu có / = 15GB

Layout đĩa ban đầu

[root@localhost ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/volumegroup1-root  4.5G  1.6G  3.0G  34% /
devtmpfs                       980M     0  980M   0% /dev
tmpfs                          992M     0  992M   0% /dev/shm
tmpfs                          992M  9.6M  982M   1% /run
tmpfs                          992M     0  992M   0% /sys/fs/cgroup
/dev/sda1                      477M  100M  348M  23% /boot
tmpfs                          199M     0  199M   0% /run/user/0
/dev/sdb1                      4.8G   20M  4.6G   1% /data
[root@localhost ~]# lsblk
NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                     8:0    0    5G  0 disk
├─sda1                  8:1    0  500M  0 part /boot
└─sda2                  8:2    0  4.5G  0 part
  └─volumegroup1-root 253:0    0  4.5G  0 lvm  /
sdb                     8:16   0    5G  0 disk
└─sdb1                  8:17   0    5G  0 part /data
sr0                    11:0    1 1024M  0 rom

Thấy thằng / có type lvm.
Những thằng type là part thì chỉ có nước tắt máy, resize bằng các tool như Gparted, ở đây, chúng tôi không làm thế.
Tiến hành cắm thêm đĩa mới vào máy, nếu là máy ảo thì add thêm disk, nếu là máy vật lý thì cắm disk vào rồi tạo raid, cách làm thì mỗi case mỗi khác, nằm ngoài khuôn khổ bài viết này. Chúng ta skip, nhảy tới bước đã cắm ổ vào OK. Tiến hành refresh lại để centos nhận ra ổ đĩa mới:

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

sau đó check lại ổ đĩa

[root@localhost ~]# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes, 10485760 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: 0x00013f52

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    10485759     4729856   8e  Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 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: 0x6ed73018

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10485759     5241856   8e  Linux LVM

Disk /dev/mapper/volumegroup1-root: 4840 MB, 4840226816 bytes, 9453568 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 /dev/sdc: 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

Thấy ổ sdc mới xuất hiện. Nếu không xuất hiện thì các bạn check trong /sys/class/scsi_host/ xem còn host nào thì lặp lại bước echo ở trên.
Tiến hành tạo partition mới với type 8e, linux LVM

[root@localhost ~]# fdisk /dev/sdc
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 0x03cec27c.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help):

Chọn n để add partition mới, sau đó chọn p để tạo primary partition, tiếp theo nhập 1,

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): 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): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

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

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#

Fdisk -l lần nữa sẽ thấy sdc mới đã được partition, với phân vùng sdc1

[root@localhost ~]# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes, 10485760 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: 0x00013f52

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    10485759     4729856   8e  Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 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: 0x6ed73018

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10485759     5241856   8e  Linux LVM

Disk /dev/mapper/volumegroup1-root: 4840 MB, 4840226816 bytes, 9453568 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 /dev/sdc: 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: 0x03cec27c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20971519    10484736   8e  Linux LVM
[root@localhost ~]#

Tạo physical volume mới cho sdc1

[root@localhost ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]#

Check lại thông tin LVM của máy

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               volumegroup1
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  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               <4.51 GiB
  PE Size               4.00 MiB
  Total PE              1154
  Alloc PE / Size       1154 / <4.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               oRu742-MhoW-MJMV-uS8e-FHXV-yNor-Gb7N85

Quan tâm tới VG Name, ở đây là volumegroup1
Add thêm sdc1 ở trên vào volumegroup1

[root@localhost ~]# vgextend volumegroup1 /dev/sdc1
  Volume group "volumegroup1" successfully extended
[root@localhost ~]#

Chạy pvscan để confirm lại, ta thấy cả 2 ổ cũ và mới

[root@localhost ~]# pvscan
  PV /dev/sda2   VG volumegroup1    lvm2 [<4.51 GiB / 0    free]
  PV /dev/sdc1   VG volumegroup1    lvm2 [<10.00 GiB / <10.00 GiB free]
  Total: 2 [14.50 GiB] / in use: 2 [14.50 GiB] / in no VG: 0 [0   ]
[root@localhost ~]#

Tiếp theo chúng ta check lại thông tin của logical volume

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/volumegroup1/root
  LV Name                root
  VG Name                volumegroup1
  LV UUID                ES1sxH-Fqpj-eVFl-bsNm-6SRg-P7pl-9dOq9P
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-04-08 15:55:13 +0700
  LV Status              available
  # open                 1
  LV Size                <4.51 GiB
  Current LE             1154
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@localhost ~]#

Quan tâm tới LV Path và LV Name

Exten logical volume, add sdc1 ở trên vào LV Path.

[root@localhost ~]# lvextend /dev/volumegroup1/root /dev/sdc1
  Size of logical volume volumegroup1/root changed from <4.51 GiB (1154 extents) to 14.50 GiB (3713 extents).
  Logical volume volumegroup1/root successfully resized.
[root@localhost ~]#

Tuy nhiên, nếu df -h, chúng ta sẽ thấy y nguyên, chưa có sự thay đổi nào cả:

[root@localhost ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/volumegroup1-root  4.5G  1.6G  3.0G  34% /
devtmpfs                       980M     0  980M   0% /dev
tmpfs                          992M     0  992M   0% /dev/shm
tmpfs                          992M  9.6M  982M   1% /run
tmpfs                          992M     0  992M   0% /sys/fs/cgroup
/dev/sda1                      477M  100M  348M  23% /boot
tmpfs                          199M     0  199M   0% /run/user/0
/dev/sdb1                      4.8G   20M  4.6G   1% /data

Việc tiếp theo để có thể sử dụng được phần dung lượng mới thêm vào đó là resize lại file system.
nãy giờ resize cho / nên kiểm tra lại xem thằng này đang được mount dưới định dạng nào. gõ lệnh mount

[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1002592k,nr_inodes=250648,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/volumegroup1-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=31,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14970)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=203020k,mode=700)
/dev/sdb1 on /data type ext4 (rw,relatime,seclabel,data=ordered)

Để ý thấy dòng
/dev/mapper/volumegroup1-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
Định dạng là xfs, chúng ta chạy lệnh sau:

[root@localhost ~]# xfs_growfs /dev/volumegroup1/root
meta-data=/dev/mapper/volumegroup1-root isize=512    agcount=4, agsize=295424 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1181696, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1181696 to 3802112

Với /dev/volumegroup1/root chính là LV Path đã extent ở trên.
Nếu / được mount với định dang ext2,3,4 gì đó thì chúng ta chạy lệnh:

resize2fs /dev/volumegroup1/root

Check lại df -h

[root@localhost ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/volumegroup1-root   15G  1.6G   13G  11% /
devtmpfs                       980M     0  980M   0% /dev
tmpfs                          992M     0  992M   0% /dev/shm
tmpfs                          992M  9.6M  982M   1% /run
tmpfs                          992M     0  992M   0% /sys/fs/cgroup
/dev/sda1                      477M  100M  348M  23% /boot
tmpfs                          199M     0  199M   0% /run/user/0
/dev/sdb1                      4.8G   20M  4.6G   1% /data

Đã thấy thêm được chục GB, ứng dụng vẫn chạy như chưa hề có cuộc chia ly.