linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
導(dǎo)語(yǔ) | 隨著業(yè)務(wù)的發(fā)展,業(yè)務(wù)數(shù)據(jù)不停的增長(zhǎng),原有的磁盤空間可能會(huì)出現(xiàn)磁盤空間不夠用的情況,因此,需要對(duì)磁盤空間進(jìn)行擴(kuò)容,以滿足業(yè)務(wù)數(shù)據(jù)增長(zhǎng)的需求。本文總結(jié)了Linux環(huán)境下云服務(wù)器存儲(chǔ)擴(kuò)容的三種方式及其操作步驟,與大家一同交流。
環(huán)境說(shuō)明:Linux操作系統(tǒng):CentOS Linux release 7.6.1810 (Core)
平臺(tái)環(huán)境:騰訊云CVM,CBS
1. 存儲(chǔ)擴(kuò)容概述
以下圖為例,假如起初購(gòu)買了100G磁盤空間,隨著數(shù)據(jù)的不停增長(zhǎng),原有100G空間不夠用了,將空間擴(kuò)容至200G。
CBS是騰訊云提供用于云服務(wù)器的持久性數(shù)據(jù)塊級(jí)存儲(chǔ)服務(wù),云盤具有彈性,按需擴(kuò)容特性,云盤可以任意的按需擴(kuò)容。
不過(guò)云盤擴(kuò)容時(shí)不是所有的場(chǎng)景下都可以任意擴(kuò)容,云盤擴(kuò)容具有兩個(gè)限制:
系統(tǒng)盤不支持?jǐn)U容,理論上系統(tǒng)盤也能夠支持?jǐn)U容,系統(tǒng)盤存放操作系統(tǒng)數(shù)據(jù),擴(kuò)容可能會(huì)造成系統(tǒng)啟動(dòng)異常
本地盤不支持?jǐn)U容,本地盤使用宿主機(jī)的本地盤,本地盤彈性擴(kuò)容能力沒(méi)有云盤靈活,無(wú)法支持彈性按需擴(kuò)容
要深入掌握云盤的擴(kuò)容,需要掌握云盤的使用方式,在Linux下通常有如下三種使用方式:
裸設(shè)備創(chuàng)建文件系統(tǒng),不需要?jiǎng)?chuàng)建任何分區(qū),直接在裸盤上創(chuàng)建文件系統(tǒng)
磁盤上創(chuàng)建MBR格式的分區(qū),適用于小于2T的多個(gè)磁盤分區(qū)的場(chǎng)景
磁盤上創(chuàng)建GPT格式的分區(qū),適用于大于2T的多個(gè)磁盤分區(qū)的場(chǎng)景
2. Linux云服務(wù)器存儲(chǔ)擴(kuò)容
2.1. 裸設(shè)備磁盤使用
Linux系統(tǒng)中可以直接在裸設(shè)備磁盤上創(chuàng)建文件系統(tǒng),即磁盤不需要?jiǎng)?chuàng)建任何磁盤分區(qū),直接在磁盤上創(chuàng)文件文件系統(tǒng)并掛載使用,其具有如下特點(diǎn):
磁盤不需要多個(gè)分區(qū)
適用于大于2T磁盤
簡(jiǎn)單易使用
后期支持在線擴(kuò)容
上圖所示是在Linux系統(tǒng)中直接在裸設(shè)備創(chuàng)建文件系統(tǒng)的操作步驟,先在控制臺(tái)購(gòu)買好云盤并將其掛載到CVM中,然后登陸到Linux系統(tǒng)中對(duì)磁盤格式化文件系統(tǒng)并掛載使用,控制臺(tái)購(gòu)買和掛載請(qǐng)自行操作,如下演示在Linux系統(tǒng)中裸設(shè)備文件系統(tǒng)的使用步驟:
1、 登陸操作系統(tǒng),通過(guò)fdisk -l獲取磁盤的名稱,系統(tǒng)有兩塊磁盤vda和vdb,/dev/vdb是我們操作的磁盤
[root@VM_0_89_centos ~]# fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors #vda為系統(tǒng)盤
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: 0x0009ac89
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 104857566 52427759+ 83 Linux
Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors #vdb為數(shù)據(jù)盤
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
2、直接在磁盤上創(chuàng)建文件系統(tǒng)(注:并未在磁盤上創(chuàng)建任何分區(qū)),根據(jù)需要格式化為ext4或xfs格式
[root@VM_0_89_centos ~]# mkfs.ext4 /dev/vdb #創(chuàng)建文件ext4文件系統(tǒng)
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2174746624
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
備注:如果要?jiǎng)?chuàng)建為xfs則使用mkfs.xfs /dev/vdb
3、創(chuàng)建好文件系統(tǒng)后即可掛載到系統(tǒng)中使用,使用方式有兩種:臨時(shí)mount和編寫(xiě)fstab實(shí)現(xiàn)持久性掛載,線上環(huán)境推薦使用編寫(xiě)fstab的方式,避免機(jī)器下次重啟后磁盤信息未加載,掛載名稱推薦使用UUID
blkid獲取磁盤UUID信息
[root@VM_0_89_centos ~]# blkid /dev/vdb
/dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436" TYPE="ext4"
編寫(xiě)/etc/fstab,其內(nèi)容如下
UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436" /data ext4 defaults 0 0
4、掛載點(diǎn)目錄/data需要提前創(chuàng)建好,然后執(zhí)行mount -a進(jìn)行加載,mount -a是系統(tǒng)啟動(dòng)時(shí)之行的指令,如果fstab編寫(xiě)有誤要及時(shí)修復(fù),避免影響下次開(kāi)機(jī)啟動(dòng)
執(zhí)行掛載操作
[root@VM_0_89_centos ~]# mount -a
檢查掛載情況
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 444K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.8G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb 99G 61M 94G 1% /data #vdb磁盤已順利掛載到系統(tǒng)中,大小為100G
至此,基于Linux系統(tǒng)上使用裸盤構(gòu)建文件系統(tǒng)并使用操作演示完畢,通過(guò)操作可知,裸盤上創(chuàng)建文件系統(tǒng)方式不需要對(duì)磁盤進(jìn)行分區(qū),操作便捷容易,且方便擴(kuò)容,下章節(jié)中演示基于裸設(shè)備文件文件系統(tǒng)存儲(chǔ)空間擴(kuò)容。
2.2 裸設(shè)備磁盤擴(kuò)容
上述步驟是裸設(shè)備磁盤的擴(kuò)容方式,擴(kuò)容過(guò)程中存在數(shù)據(jù)損壞的風(fēng)險(xiǎn),為了避免擴(kuò)容過(guò)程中誤操作,_強(qiáng)烈建議_擴(kuò)容前對(duì)磁盤做快照,避免數(shù)據(jù)損壞時(shí)可以做恢復(fù),_謹(jǐn)記_!做完快照后在控制臺(tái)完成磁盤的擴(kuò)容,擴(kuò)容完畢后需要在操作系統(tǒng)中識(shí)別到擴(kuò)容的空間,以磁盤擴(kuò)容至200G為例,演示在Linux中裸設(shè)備擴(kuò)容的操作過(guò)程:
1、 確認(rèn)磁盤的使用方式,通過(guò)fdisk -l查看磁盤并未創(chuàng)建有任何磁盤分區(qū)
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors #磁盤空間已擴(kuò)容至200G
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes #當(dāng)前磁盤上未創(chuàng)建任何分區(qū)
#使用blkid查看vdb磁盤文件系統(tǒng)的情況,可得知,當(dāng)前/dev/vdb未創(chuàng)建磁盤分區(qū),切構(gòu)建了ext4文件系統(tǒng)
[root@VM_0_89_centos ~]# blkid
/dev/sr0: UUID="2020-01-13-22-30-05-00" LABEL="config-2" TYPE="iso9660"
/dev/vda1: UUID="4b499d76-769a-40a0-93dc-4a31a59add28" TYPE="ext4"
/dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436" TYPE="ext4" #直接在裸盤上創(chuàng)建ext4文件系統(tǒng)
2、確認(rèn)為云盤的擴(kuò)容方式為裸盤后,根據(jù)文件系統(tǒng)的類型,在文件系統(tǒng)層面擴(kuò)容以識(shí)別到云盤的擴(kuò)容空間
[root@VM_0_89_centos ~]# resize2fs /dev/vdb
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vdb is mounted on /data; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 25
The filesystem on /dev/vdb is now 52428800 blocks long. #提示已經(jīng)擴(kuò)容至52428800個(gè)block
備注:如果是xfs,則使用xfs_growfs /dev/vdb擴(kuò)容
3、校驗(yàn)磁盤空間擴(kuò)容情況,使用df -H校驗(yàn),vdb磁盤已在文件系統(tǒng)擴(kuò)容至200G
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 444K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.8G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb 197G 60M 188G 1% /data #已擴(kuò)容至200G
通過(guò)上述的操作演示可知,裸盤上并未創(chuàng)建任何磁盤分區(qū),因此擴(kuò)容過(guò)程相當(dāng)便捷,直接在文件系統(tǒng)上擴(kuò)容即可,使用簡(jiǎn)單,這也是云上推薦使用方式。
2.3 MBR磁盤分區(qū)
如果磁盤需要?jiǎng)?chuàng)建多個(gè)分區(qū)并將分區(qū)掛載到不同的目錄中使用需要對(duì)磁盤進(jìn)行分區(qū),傳統(tǒng)的磁盤分區(qū)方式會(huì)使用MBR的格式進(jìn)行分區(qū),MBR分區(qū)具有如下特性:
適用于小于2T的磁盤,大于2T的空間將無(wú)法識(shí)別
單塊磁盤需要?jiǎng)?chuàng)建多個(gè)分區(qū)的場(chǎng)景
MBR最多支持7個(gè)分區(qū),即3個(gè)主分區(qū)+4個(gè)擴(kuò)展分區(qū)
如上圖是對(duì)磁盤制作MBR格式分區(qū)的操作步驟,在控制臺(tái)購(gòu)買并掛載到CVM云主機(jī)后,登錄到操作系統(tǒng)中對(duì)磁盤進(jìn)行分區(qū)和使用,如下以新購(gòu)的一塊100G磁盤為例演示基于cbs云盤上創(chuàng)建MBR磁盤分區(qū)的過(guò)程
1、使用fdisk -l獲取到到磁盤的名稱,包含兩塊磁盤vda和vdb,vdb是我們需要操作的cbs云盤
[root@VM_0_89_centos ~]# fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 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: 0x0009ac89
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 104857566 52427759+ 83 Linux
Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 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
2、使用fdisk工具對(duì)磁盤進(jìn)行分區(qū),fdisk /dev/vdb進(jìn)入到fdisk交互式界面,通過(guò)交互式完成分區(qū)創(chuàng)建
[root@VM_0_89_centos ~]# fdisk /dev/vdb
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 0x5eeb4bc8.
Command (m for help): m #輸入m可以獲取到操作指令的幫助
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition #刪除分區(qū)
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 #創(chuàng)建分區(qū)
o create a new empty DOS partition table
p print the partition table #顯示分區(qū)情況
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 #保存分區(qū)設(shè)置
x extra functionality (experts only)
Command (m for help): n #新建分區(qū),輸入n進(jìn)入到新建分區(qū)交互界面
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #選擇分區(qū)類型,p表示主分區(qū),e代表擴(kuò)展分區(qū)
Partition number (1-4, default 1): #分區(qū)號(hào)碼
First sector (2048-209715199, default 2048): #起始扇區(qū)范圍
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): #結(jié)束刪除范圍
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set
Command (m for help): p #顯示分區(qū)情況,可以看到已創(chuàng)建一個(gè)vdb1的分區(qū)
Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 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: 0x5eeb4bc8
Device Boot Start End Blocks Id System
/dev/vdb1 2048 209715199 104856576 83 Linux #磁盤分區(qū)的信息
Command (m for help): w #報(bào)錯(cuò)退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3、使用partprobe將分區(qū)的信息同步給內(nèi)核,讓內(nèi)核識(shí)別到該分區(qū)信息
[root@VM_0_89_centos ~]# partprobe /dev/vdb
4、接下來(lái)可以對(duì)分區(qū)制作文件系統(tǒng),制作成操作系統(tǒng)能夠識(shí)別的文件系統(tǒng),以制作xfs文件系統(tǒng)為例
[root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=6553536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=26214144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12799, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@VM_0_89_centos ~]# blkid
/dev/sr0: UUID="2020-01-13-22-30-05-00" LABEL="config-2" TYPE="iso9660"
/dev/vda1: UUID="4b499d76-769a-40a0-93dc-4a31a59add28" TYPE="ext4"
/dev/vdb1: UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5" TYPE="xfs" #文件系統(tǒng)制作為xfs
備注:如果是制作為ext4則使用mkfs.ext4 /dev/vdb1
5、編寫(xiě)fstab掛載到系統(tǒng)中,確保下次開(kāi)機(jī)后配置生效
[root@VM_0_89_centos ~]# vim/etc/fstab
UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5" /data xfs defaults 0 0
6、執(zhí)行mount -a加載掛載配置,并檢查掛載情況
[root@VM_0_89_centos ~]# mount -a
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 448K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 100G 33M 100G 1% /data #磁盤已經(jīng)掛載到系統(tǒng)中
2.4 MBR磁盤擴(kuò)容
MBR格式的磁盤擴(kuò)容需要在MBR磁盤分區(qū)中擴(kuò)展空間,并在文件系統(tǒng)中擴(kuò)展文件系統(tǒng)空間以識(shí)別到擴(kuò)容的空間,騰訊云為此提供了一個(gè)專門擴(kuò)容的腳本devresize.py,腳本要求條件如下:
文件系統(tǒng)是 EXT2/EXT3/EXT4/XFS
當(dāng)前文件系統(tǒng)不能有錯(cuò)誤
擴(kuò)容后的磁盤大小不超過(guò)2TB
當(dāng)前工具僅支持 Python 2 版本,不支持 Python 3 版本
如上圖為MBR格式磁盤的擴(kuò)容步驟,現(xiàn)在控制臺(tái)中做好快照,并擴(kuò)容,然后登錄到操作系統(tǒng)中完成分區(qū)和文件系統(tǒng)的擴(kuò)容,如下以擴(kuò)容至200G為例演示在MBR格式的磁盤分區(qū)擴(kuò)容方法
1、 檢查磁盤的擴(kuò)容,確認(rèn)擴(kuò)容的方式,根據(jù)System類型為L(zhǎng)inux判斷為MBR格式的分區(qū)
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors #空間大小已擴(kuò)容至200G
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: 0x5eeb4bc8
Device Boot Start End Blocks Id System #System類型為L(zhǎng)inux表示使用MBR格式分區(qū)
/dev/vdb1 2048 209715199 104856576 83 Linux
2、獲取擴(kuò)容的腳本,該腳本可以完成分區(qū)的擴(kuò)容和文件系統(tǒng)的自動(dòng)擴(kuò)容,需要離線執(zhí)行,因此先需要卸載磁盤
[root@VM_0_89_centos ~]# wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py
無(wú)法在線執(zhí)行,需卸載磁盤
[root@VM_0_89_centos ~]# python /tmp/devresize.py /dev/vdb
[ERROR] - Target partition /dev/vdb1 must be unmounted.
[root@VM_0_89_centos ~]# umount /dev/vdb1
3、執(zhí)行擴(kuò)容步驟
[root@VM_0_89_centos ~]# python /tmp/devresize.py /dev/vdb
[INFO] - checking filesystem healthy
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
[INFO] - mount /dev/vdb1 /tmp/mount_point_vdb_2020-01-14_16:04:30
[INFO] - umount /dev/vdb1
This operation will extend /dev/vdb1 to the last sector of device.
To ensure the security of your valuable data,
please create a snapshot of this volume before resize its file system, continue? [Y/n]
y #提示是否創(chuàng)建快照,確保做好快照后輸入y繼續(xù)
It will resize (/dev/vdb1).
This operation may take from several minutes to several hours, continue? [Y/n] #備份并resize,確認(rèn)輸入y
y
[INFO] - Backup MBR to /tmp/MBR_vdb1_2020-01-14_16:04:40_bak
[INFO] - mount /dev/vdb1 /tmp/mount_point_vdb_2020-01-14_16:04:30
[INFO] - resize filesystem
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=6553536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=26214144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=12799, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 26214144 to 52428544
[INFO] - umount /dev/vdb1
[INFO] - Finished
4、重新掛載文件系統(tǒng)并確認(rèn)擴(kuò)容空間
[root@VM_0_89_centos ~]# mount -a #重新掛載
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 448K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 200G 33M 200G 1% /data #空間已擴(kuò)容至200G
注意事項(xiàng):
擴(kuò)容前一定要先做好快照,避免數(shù)據(jù)損壞時(shí)可快速恢復(fù)。
MBR格式磁盤擴(kuò)容需要卸載云盤,因此是離線擴(kuò)容,如果云盤有在使用,請(qǐng)先停止業(yè)務(wù)后再擴(kuò)容。
2.5 MBR新增磁盤分區(qū)
如果需要分區(qū)的場(chǎng)景,可以將擴(kuò)容的空間劃分成一個(gè)新的分區(qū)供操作系統(tǒng)使用,通過(guò)在磁盤上新創(chuàng)建分區(qū)的方式實(shí)現(xiàn)擴(kuò)容,其具有如下特點(diǎn):
單盤需要多個(gè)分區(qū)的場(chǎng)景
擴(kuò)容空間小于2T
擴(kuò)容后原分區(qū)無(wú)法擴(kuò)容
CBS云盤是按需彈性擴(kuò)展,推薦使用單磁盤單分區(qū)掛載,云上推薦使用裸盤創(chuàng)建文件系統(tǒng)
如下以一塊200G的CBS盤擴(kuò)容至300G為例演示在MBR格式磁盤上新增分區(qū)的方式實(shí)現(xiàn)磁盤擴(kuò)容使用方式
1、準(zhǔn)備工作,控制臺(tái)做好快照,并在控制臺(tái)完成磁盤空間擴(kuò)容
2、fdisk -l檢查磁盤擴(kuò)容的大小,通過(guò)System類型為L(zhǎng)inux可得知其為MBR分區(qū)格式的磁盤
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 sectors #磁盤大小已擴(kuò)容至300G
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: 0x5eeb4bc8
Device Boot Start End Blocks Id System #磁盤分區(qū)類型為MBR格式
/dev/vdb1 2048 419430399 209714176 83 Linux
3、擴(kuò)容磁盤上新創(chuàng)建一個(gè)磁盤分區(qū) /dev/vdb2,大小為100G
[root@VM_0_89_centos ~]# fdisk /dev/vdb
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): p
Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 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: 0x5eeb4bc8
Device Boot Start End Blocks Id System
/dev/vdb1 2048 419430399 209714176 83 Linux #當(dāng)前已有一個(gè)分區(qū)
Command (m for help): n #新增一個(gè)分區(qū)
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p #分區(qū)類型為主分區(qū)
Partition number (2-4, default 2):
First sector (419430400-629145599, default 419430400): #開(kāi)始扇區(qū)大小
Using default value 419430400
Last sector, +sectors or +size{K,M,G} (419430400-629145599, default 629145599): #結(jié)束扇區(qū)大小
Using default value 629145599
Partition 2 of type Linux and of size 100 GiB is set
Command (m for help): p #查看分區(qū)創(chuàng)建的情況
Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 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: 0x5eeb4bc8
Device Boot Start End Blocks Id System
/dev/vdb1 2048 419430399 209714176 83 Linux
/dev/vdb2 419430400 629145599 104857600 83 Linux #分區(qū)已創(chuàng)建成功
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
4、刷新內(nèi)核分區(qū)以識(shí)別到分區(qū)內(nèi)容
[root@VM_0_89_centos ~]# partprobe /dev/vdb
5、格式化磁盤分區(qū),創(chuàng)建操作系統(tǒng)能識(shí)別的文件系統(tǒng),以xfs為例
[root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb2
meta-data=/dev/vdb2 isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
6、掛載至系統(tǒng)中,推薦使用fstab掛載
獲取分區(qū)UUID號(hào)
[root@VM_0_89_centos ~]# blkid /dev/vdb2
/dev/vdb2: UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2" TYPE="xfs"
編寫(xiě)fstab文件
echo 'UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2" /data1 xfs defaults 0 0' >>/etc/fstab
創(chuàng)建掛載目錄并掛載
[root@VM_0_89_centos ~]# mkdir /data1
[root@VM_0_89_centos ~]# mount -a
檢查掛載情況
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 452K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 200G 33M 200G 1% /data
/dev/vdb2 100G 33M 100G 1% /data1 #磁盤分區(qū)已經(jīng)掛載至操作系統(tǒng)
至此云盤上使用MBR格式新增分區(qū)的演示使用完畢,這種方式適用于單塊磁盤多分區(qū)的場(chǎng)景,由于云上的磁盤可以根據(jù)按需擴(kuò)容,且采用分區(qū)擴(kuò)容的方式原有分區(qū)(第一個(gè)分區(qū))將無(wú)法擴(kuò)容,云上推薦使用裸盤方式。
2.6 GPT磁盤分區(qū)
前面章節(jié)介紹了對(duì)磁盤創(chuàng)建MBR格式磁盤分區(qū)的使用方式,對(duì)于大于2T的磁盤,需要使用GPT格式的方式進(jìn)行分區(qū),本章節(jié)介紹磁盤使用GPT格式進(jìn)行分區(qū)的使用方式。
先在控制臺(tái)購(gòu)買云盤并掛載到云主機(jī)中,然后再操作系統(tǒng)中對(duì)磁盤進(jìn)行GPT格式分區(qū)并創(chuàng)建文件系統(tǒng),以創(chuàng)建一個(gè)2T磁盤為例演示Linux中使用parted對(duì)磁盤創(chuàng)建GPT格式分區(qū)使用過(guò)程。
1、登錄操作系統(tǒng)檢查磁盤的名稱和空間大小
[root@VM_0_89_centos ~]# fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 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: 0x0009ac89
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 104857566 52427759+ 83 Linux
Disk /dev/vdb: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors #磁盤為vdb,大小為2T
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
2、使用parted對(duì)磁盤打標(biāo)簽和磁盤分區(qū)
磁盤打上label并查看確認(rèn)
[root@VM_0_89_centos ~]# parted /dev/vdb mklabel gpt
[root@VM_0_89_centos ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt #分區(qū)表類型為gpt
Disk Flags:
Number Start End Size File system Name Flags
對(duì)磁盤進(jìn)行分區(qū)
[root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 2048s 100%
Information: You may need to update /etc/fstab.
查看分區(qū)創(chuàng)建情況
[root@VM_0_89_centos ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2147GB 2147GB primary #創(chuàng)建了一個(gè)磁盤分區(qū),范圍是2048s到2147GB
3、磁盤上創(chuàng)建文件系統(tǒng),以制作xfs文件系統(tǒng)為例
[root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=131071872 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524287488, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=255999, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4、編寫(xiě)fstab掛載到/data目錄中
獲取分區(qū)UUID
[root@VM_0_89_centos ~]# blkid /dev/vdb1
/dev/vdb1: UUID="aa6fc333-e702-4daa-ad0b-10efde57a7f0" TYPE="xfs" PARTLABEL="primary" PARTUUID="7dace14b-3093-495b-9d0c-fc63f3b87fd7"
編寫(xiě)fstab將磁盤掛載到/data目錄中
UUID="aa6fc333-e702-4daa-ad0b-10efde57a7f0" /data xfs defaults 0 0
5、加載掛載配置信息并確認(rèn)
[root@VM_0_89_centos ~]# mount -a
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 448K 496M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 2.0T 33M 2.0T 1% /data #磁盤當(dāng)前已經(jīng)掛載至/data目錄
2.7 GPT磁盤分區(qū)擴(kuò)容
上圖是GPT格式磁盤分區(qū)的擴(kuò)容步驟,需要在控制臺(tái)中制作快照并完成擴(kuò)容,然后在GPT分區(qū)中識(shí)別到擴(kuò)容空間,文件文件系統(tǒng)識(shí)別到空間,如下以2T擴(kuò)容至3T為例演示擴(kuò)容過(guò)程
1、確認(rèn)磁盤空間和擴(kuò)容方式為GPT
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 3221.2 GB, 3221225472000 bytes, 6291456000 sectors #磁盤空間大小已擴(kuò)容至3T
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: 0x00000000
Device Boot Start End Blocks Id System #磁盤分區(qū)格式為GPT
/dev/vdb1 1 4194303999 2097151999+ ee GPT
2、分區(qū)擴(kuò)容需是離線操作,因此需要先卸載磁盤,卸載前請(qǐng)停止業(yè)務(wù)使用
[root@VM_0_89_centos ~]# umount /data
3、GPT重新分區(qū),需要先刪除原有分區(qū),然后再重建分區(qū),刪除前使用unit s獲取到磁盤柱面的大小,切記,操作前應(yīng)要做好快照備份,刪除分區(qū)重建分區(qū)有風(fēng)險(xiǎn)
[root@VM_0_89_centos ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end
(and removing the old backup)?
Fix/Ignore/Cancel? Fix #磁盤空間有擴(kuò)容,因此提示有ERR,輸入Fix修復(fù)
Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 2097152000 blocks) or continue with the current setting?
Fix/Ignore? Fix #空間并未完全使用提示有Waring,輸入Fix修復(fù)
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2147GB 2147GB xfs primary #當(dāng)前分區(qū)的情況
(parted) unit s #使用單元的方式顯示大小范圍
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 4194301951s 4194299904s xfs primary #Start起始范圍為2048s,后面重建分區(qū)需要使用到
(parted) rm 1 #刪除分區(qū)信息
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags #確認(rèn)分區(qū)信息已被刪除
(parted) mkpart primary 2048s 100% #重新創(chuàng)建磁盤分區(qū),起始范圍需要和原分區(qū)保持一致
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 6291453951s 6291451904s xfs primary
4、GPT分區(qū)擴(kuò)容完畢后,需要在文件系統(tǒng)中擴(kuò)容空間,切記,不要格式化文件系統(tǒng),否則數(shù)據(jù)將會(huì)丟失,根據(jù)文件系統(tǒng)類型選擇擴(kuò)容方式,以xfs為例
將磁盤掛載到系統(tǒng)中
[root@VM_0_89_centos ~]# mount -a
[root@VM_0_89_centos ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn)
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 488K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 2.0T 33M 2.0T 1% /data
擴(kuò)容文件系統(tǒng)空間
[root@VM_0_89_centos ~]# xfs_growfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=131071872 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524287488, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=255999, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524287488 to 786431488 #已完成空間擴(kuò)容
校驗(yàn)文件系統(tǒng)空間
[root@VM_0_89_centos ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn)
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 488K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 3.0T 33M 3.0T 1% /data #已擴(kuò)容至3T
備注:如果是ext3、ext4則使用resize2fs /dev/vdb1實(shí)現(xiàn)文件系統(tǒng)的擴(kuò)容。
至此,基于GPT的磁盤格式磁盤分區(qū)擴(kuò)容完畢,整個(gè)擴(kuò)容過(guò)程中磁盤需要卸載操作,因此業(yè)務(wù)需要離線進(jìn)行,擴(kuò)容過(guò)程中需要?jiǎng)h除分區(qū),操作較危險(xiǎn),操作前務(wù)必做好快照避免誤操作導(dǎo)致磁盤分區(qū)信息丟失。
2.8 GPT新增磁盤分區(qū)
對(duì)于需要多個(gè)磁盤分區(qū)的場(chǎng)景,可以在GPT磁盤上新建另外一個(gè)分區(qū)的方式實(shí)現(xiàn),實(shí)現(xiàn)方式和新創(chuàng)建一個(gè)分區(qū)的過(guò)程相類似,如下為基于GPT格式磁盤新增分區(qū)的操作過(guò)程:
以磁盤擴(kuò)容至3.5T為例,通過(guò)GPT格式新創(chuàng)建另外一個(gè)/dev/vdb2的分區(qū),并掛載到系統(tǒng)中使用,如下演示操作過(guò)程
1、 登錄操作系統(tǒng),確認(rèn)磁盤空間擴(kuò)容大小和磁盤格式為GPT
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/vdb: 3758.1 GB, 3758096384000 bytes, 7340032000 sectors #磁盤空間大小為3.5T
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: gpt #磁盤分區(qū)格式類型為gpt
Disk identifier: 15BF58A1-BBE0-466A-B2C5-A243AD6A3108
# Start End Size Type Name
1 2048 6291453951 3T Microsoft basic primary
2、獲取磁盤上一個(gè)分區(qū)的End范圍,print得知結(jié)束范圍3221GB ,下一個(gè)步驟需要使用到
[root@VM_0_89_centos ~]# parted /dev/vdb print
Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end
(and removing the old backup)?
Fix/Ignore/Cancel? Fix
Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 1048576000 blocks) or continue with the current setting?
Fix/Ignore? Fix
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 3758GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 3221GB 3221GB xfs primary
3、 磁盤上新建一個(gè)分區(qū)/dev/vdb2,開(kāi)始范圍為上一個(gè)步驟中獲取的磁盤大小
[root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 3221GB 100% #開(kāi)始范圍為步驟2獲取的大小
Information: You may need to update /etc/fstab.
[root@VM_0_89_centos ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 3758GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags #包含有兩個(gè)分區(qū)
1 1049kB 3221GB 3221GB xfs primary
2 3221GB 3758GB 537GB primary
4、 磁盤格式化創(chuàng)建文件系統(tǒng),以制作xfs文件系統(tǒng)為例
[root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb2
meta-data=/dev/vdb2 isize=512 agcount=4, agsize=32768000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=131072000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=64000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
5、 掛載磁盤分區(qū)到系統(tǒng)中,以手動(dòng)mount為例演示,實(shí)際使用時(shí)應(yīng)使用fstab實(shí)現(xiàn)持久掛載
[root@VM_0_89_centos ~]# mount /dev/vdb2 /data1/
[root@VM_0_89_centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 24K 496M 1% /dev/shm
tmpfs 496M 484K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 50G 1.9G 46G 4% /
tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 3.0T 33M 3.0T 1% /data
/dev/vdb2 500G 33M 500G 1% /data1 #已掛載完畢
3. 總結(jié)
前文總結(jié)了在Linux環(huán)境中CBS三種使用方式:
裸設(shè)備創(chuàng)建文件系統(tǒng);
使用MBR格式分區(qū);
使用GPT格式分區(qū)。
以及這三種使用方式對(duì)應(yīng)的擴(kuò)容方式和操作步驟。相比于裸設(shè)創(chuàng)建文件系統(tǒng),使用MBR和GPT格式擴(kuò)容時(shí)需要卸載磁盤,因此無(wú)法做到在線擴(kuò)容。因此在云環(huán)境下推薦使用直接在裸設(shè)備上創(chuàng)建文件系統(tǒng)的方式,其更加便捷,易于實(shí)現(xiàn),且擴(kuò)容過(guò)程中可以在線擴(kuò)容。。
4. 作者簡(jiǎn)介
HappyLau,高級(jí)云計(jì)算顧問(wèn),目前在騰訊云從事公有云相關(guān)工作。曾就職于酷狗、EasyStack,擁有多年公有云+私有云云計(jì)算架構(gòu)設(shè)計(jì)、運(yùn)維、交付相關(guān)經(jīng)驗(yàn)。參與過(guò)酷狗、南方電網(wǎng)、國(guó)泰君安等大型私有云平臺(tái)建設(shè),精通Linux、Kubernetes、OpenStack、Ceph等開(kāi)源技術(shù),具有豐富RHCA/OpenStack/Linux授課經(jīng)驗(yàn)。
參考文獻(xiàn)
總結(jié)
以上是生活随笔為你收集整理的linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: idea安装Jrebel步骤
- 下一篇: sql同比环比计算