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.