linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
導語 | 隨著業務的發展,業務數據不停的增長,原有的磁盤空間可能會出現磁盤空間不夠用的情況,因此,需要對磁盤空間進行擴容,以滿足業務數據增長的需求。本文總結了Linux環境下云服務器存儲擴容的三種方式及其操作步驟,與大家一同交流。
環境說明:Linux操作系統:CentOS Linux release 7.6.1810 (Core)
平臺環境:騰訊云CVM,CBS
1. 存儲擴容概述
以下圖為例,假如起初購買了100G磁盤空間,隨著數據的不停增長,原有100G空間不夠用了,將空間擴容至200G。
CBS是騰訊云提供用于云服務器的持久性數據塊級存儲服務,云盤具有彈性,按需擴容特性,云盤可以任意的按需擴容。
不過云盤擴容時不是所有的場景下都可以任意擴容,云盤擴容具有兩個限制:
系統盤不支持擴容,理論上系統盤也能夠支持擴容,系統盤存放操作系統數據,擴容可能會造成系統啟動異常
本地盤不支持擴容,本地盤使用宿主機的本地盤,本地盤彈性擴容能力沒有云盤靈活,無法支持彈性按需擴容
要深入掌握云盤的擴容,需要掌握云盤的使用方式,在Linux下通常有如下三種使用方式:
裸設備創建文件系統,不需要創建任何分區,直接在裸盤上創建文件系統
磁盤上創建MBR格式的分區,適用于小于2T的多個磁盤分區的場景
磁盤上創建GPT格式的分區,適用于大于2T的多個磁盤分區的場景
2. Linux云服務器存儲擴容
2.1. 裸設備磁盤使用
Linux系統中可以直接在裸設備磁盤上創建文件系統,即磁盤不需要創建任何磁盤分區,直接在磁盤上創文件文件系統并掛載使用,其具有如下特點:
磁盤不需要多個分區
適用于大于2T磁盤
簡單易使用
后期支持在線擴容
上圖所示是在Linux系統中直接在裸設備創建文件系統的操作步驟,先在控制臺購買好云盤并將其掛載到CVM中,然后登陸到Linux系統中對磁盤格式化文件系統并掛載使用,控制臺購買和掛載請自行操作,如下演示在Linux系統中裸設備文件系統的使用步驟:
1、 登陸操作系統,通過fdisk -l獲取磁盤的名稱,系統有兩塊磁盤vda和vdb,/dev/vdb是我們操作的磁盤
[root@VM_0_89_centos ~]# fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors #vda為系統盤
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為數據盤
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、直接在磁盤上創建文件系統(注:并未在磁盤上創建任何分區),根據需要格式化為ext4或xfs格式
[root@VM_0_89_centos ~]# mkfs.ext4 /dev/vdb #創建文件ext4文件系統
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
備注:如果要創建為xfs則使用mkfs.xfs /dev/vdb
3、創建好文件系統后即可掛載到系統中使用,使用方式有兩種:臨時mount和編寫fstab實現持久性掛載,線上環境推薦使用編寫fstab的方式,避免機器下次重啟后磁盤信息未加載,掛載名稱推薦使用UUID
blkid獲取磁盤UUID信息
[root@VM_0_89_centos ~]# blkid /dev/vdb
/dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436" TYPE="ext4"
編寫/etc/fstab,其內容如下
UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436" /data ext4 defaults 0 0
4、掛載點目錄/data需要提前創建好,然后執行mount -a進行加載,mount -a是系統啟動時之行的指令,如果fstab編寫有誤要及時修復,避免影響下次開機啟動
執行掛載操作
[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磁盤已順利掛載到系統中,大小為100G
至此,基于Linux系統上使用裸盤構建文件系統并使用操作演示完畢,通過操作可知,裸盤上創建文件系統方式不需要對磁盤進行分區,操作便捷容易,且方便擴容,下章節中演示基于裸設備文件文件系統存儲空間擴容。
2.2 裸設備磁盤擴容
上述步驟是裸設備磁盤的擴容方式,擴容過程中存在數據損壞的風險,為了避免擴容過程中誤操作,_強烈建議_擴容前對磁盤做快照,避免數據損壞時可以做恢復,_謹記_!做完快照后在控制臺完成磁盤的擴容,擴容完畢后需要在操作系統中識別到擴容的空間,以磁盤擴容至200G為例,演示在Linux中裸設備擴容的操作過程:
1、 確認磁盤的使用方式,通過fdisk -l查看磁盤并未創建有任何磁盤分區
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors #磁盤空間已擴容至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 #當前磁盤上未創建任何分區
#使用blkid查看vdb磁盤文件系統的情況,可得知,當前/dev/vdb未創建磁盤分區,切構建了ext4文件系統
[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" #直接在裸盤上創建ext4文件系統
2、確認為云盤的擴容方式為裸盤后,根據文件系統的類型,在文件系統層面擴容以識別到云盤的擴容空間
[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. #提示已經擴容至52428800個block
備注:如果是xfs,則使用xfs_growfs /dev/vdb擴容
3、校驗磁盤空間擴容情況,使用df -H校驗,vdb磁盤已在文件系統擴容至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 #已擴容至200G
通過上述的操作演示可知,裸盤上并未創建任何磁盤分區,因此擴容過程相當便捷,直接在文件系統上擴容即可,使用簡單,這也是云上推薦使用方式。
2.3 MBR磁盤分區
如果磁盤需要創建多個分區并將分區掛載到不同的目錄中使用需要對磁盤進行分區,傳統的磁盤分區方式會使用MBR的格式進行分區,MBR分區具有如下特性:
適用于小于2T的磁盤,大于2T的空間將無法識別
單塊磁盤需要創建多個分區的場景
MBR最多支持7個分區,即3個主分區+4個擴展分區
如上圖是對磁盤制作MBR格式分區的操作步驟,在控制臺購買并掛載到CVM云主機后,登錄到操作系統中對磁盤進行分區和使用,如下以新購的一塊100G磁盤為例演示基于cbs云盤上創建MBR磁盤分區的過程
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工具對磁盤進行分區,fdisk /dev/vdb進入到fdisk交互式界面,通過交互式完成分區創建
[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 #刪除分區
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): n #新建分區,輸入n進入到新建分區交互界面
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #選擇分區類型,p表示主分區,e代表擴展分區
Partition number (1-4, default 1): #分區號碼
First sector (2048-209715199, default 2048): #起始扇區范圍
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): #結束刪除范圍
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set
Command (m for help): p #顯示分區情況,可以看到已創建一個vdb1的分區
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 #磁盤分區的信息
Command (m for help): w #報錯退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3、使用partprobe將分區的信息同步給內核,讓內核識別到該分區信息
[root@VM_0_89_centos ~]# partprobe /dev/vdb
4、接下來可以對分區制作文件系統,制作成操作系統能夠識別的文件系統,以制作xfs文件系統為例
[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" #文件系統制作為xfs
備注:如果是制作為ext4則使用mkfs.ext4 /dev/vdb1
5、編寫fstab掛載到系統中,確保下次開機后配置生效
[root@VM_0_89_centos ~]# vim/etc/fstab
UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5" /data xfs defaults 0 0
6、執行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 #磁盤已經掛載到系統中
2.4 MBR磁盤擴容
MBR格式的磁盤擴容需要在MBR磁盤分區中擴展空間,并在文件系統中擴展文件系統空間以識別到擴容的空間,騰訊云為此提供了一個專門擴容的腳本devresize.py,腳本要求條件如下:
文件系統是 EXT2/EXT3/EXT4/XFS
當前文件系統不能有錯誤
擴容后的磁盤大小不超過2TB
當前工具僅支持 Python 2 版本,不支持 Python 3 版本
如上圖為MBR格式磁盤的擴容步驟,現在控制臺中做好快照,并擴容,然后登錄到操作系統中完成分區和文件系統的擴容,如下以擴容至200G為例演示在MBR格式的磁盤分區擴容方法
1、 檢查磁盤的擴容,確認擴容的方式,根據System類型為Linux判斷為MBR格式的分區
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors #空間大小已擴容至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類型為Linux表示使用MBR格式分區
/dev/vdb1 2048 209715199 104856576 83 Linux
2、獲取擴容的腳本,該腳本可以完成分區的擴容和文件系統的自動擴容,需要離線執行,因此先需要卸載磁盤
[root@VM_0_89_centos ~]# wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py
無法在線執行,需卸載磁盤
[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、執行擴容步驟
[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 #提示是否創建快照,確保做好快照后輸入y繼續
It will resize (/dev/vdb1).
This operation may take from several minutes to several hours, continue? [Y/n] #備份并resize,確認輸入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、重新掛載文件系統并確認擴容空間
[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 #空間已擴容至200G
注意事項:
擴容前一定要先做好快照,避免數據損壞時可快速恢復。
MBR格式磁盤擴容需要卸載云盤,因此是離線擴容,如果云盤有在使用,請先停止業務后再擴容。
2.5 MBR新增磁盤分區
如果需要分區的場景,可以將擴容的空間劃分成一個新的分區供操作系統使用,通過在磁盤上新創建分區的方式實現擴容,其具有如下特點:
單盤需要多個分區的場景
擴容空間小于2T
擴容后原分區無法擴容
CBS云盤是按需彈性擴展,推薦使用單磁盤單分區掛載,云上推薦使用裸盤創建文件系統
如下以一塊200G的CBS盤擴容至300G為例演示在MBR格式磁盤上新增分區的方式實現磁盤擴容使用方式
1、準備工作,控制臺做好快照,并在控制臺完成磁盤空間擴容
2、fdisk -l檢查磁盤擴容的大小,通過System類型為Linux可得知其為MBR分區格式的磁盤
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 sectors #磁盤大小已擴容至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 #磁盤分區類型為MBR格式
/dev/vdb1 2048 419430399 209714176 83 Linux
3、擴容磁盤上新創建一個磁盤分區 /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 #當前已有一個分區
Command (m for help): n #新增一個分區
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p #分區類型為主分區
Partition number (2-4, default 2):
First sector (419430400-629145599, default 419430400): #開始扇區大小
Using default value 419430400
Last sector, +sectors or +size{K,M,G} (419430400-629145599, default 629145599): #結束扇區大小
Using default value 629145599
Partition 2 of type Linux and of size 100 GiB is set
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
/dev/vdb2 419430400 629145599 104857600 83 Linux #分區已創建成功
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、刷新內核分區以識別到分區內容
[root@VM_0_89_centos ~]# partprobe /dev/vdb
5、格式化磁盤分區,創建操作系統能識別的文件系統,以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、掛載至系統中,推薦使用fstab掛載
獲取分區UUID號
[root@VM_0_89_centos ~]# blkid /dev/vdb2
/dev/vdb2: UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2" TYPE="xfs"
編寫fstab文件
echo 'UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2" /data1 xfs defaults 0 0' >>/etc/fstab
創建掛載目錄并掛載
[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 #磁盤分區已經掛載至操作系統
至此云盤上使用MBR格式新增分區的演示使用完畢,這種方式適用于單塊磁盤多分區的場景,由于云上的磁盤可以根據按需擴容,且采用分區擴容的方式原有分區(第一個分區)將無法擴容,云上推薦使用裸盤方式。
2.6 GPT磁盤分區
前面章節介紹了對磁盤創建MBR格式磁盤分區的使用方式,對于大于2T的磁盤,需要使用GPT格式的方式進行分區,本章節介紹磁盤使用GPT格式進行分區的使用方式。
先在控制臺購買云盤并掛載到云主機中,然后再操作系統中對磁盤進行GPT格式分區并創建文件系統,以創建一個2T磁盤為例演示Linux中使用parted對磁盤創建GPT格式分區使用過程。
1、登錄操作系統檢查磁盤的名稱和空間大小
[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對磁盤打標簽和磁盤分區
磁盤打上label并查看確認
[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 #分區表類型為gpt
Disk Flags:
Number Start End Size File system Name Flags
對磁盤進行分區
[root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 2048s 100%
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: 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 #創建了一個磁盤分區,范圍是2048s到2147GB
3、磁盤上創建文件系統,以制作xfs文件系統為例
[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、編寫fstab掛載到/data目錄中
獲取分區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"
編寫fstab將磁盤掛載到/data目錄中
UUID="aa6fc333-e702-4daa-ad0b-10efde57a7f0" /data xfs defaults 0 0
5、加載掛載配置信息并確認
[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 #磁盤當前已經掛載至/data目錄
2.7 GPT磁盤分區擴容
上圖是GPT格式磁盤分區的擴容步驟,需要在控制臺中制作快照并完成擴容,然后在GPT分區中識別到擴容空間,文件文件系統識別到空間,如下以2T擴容至3T為例演示擴容過程
1、確認磁盤空間和擴容方式為GPT
[root@VM_0_89_centos ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 3221.2 GB, 3221225472000 bytes, 6291456000 sectors #磁盤空間大小已擴容至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 #磁盤分區格式為GPT
/dev/vdb1 1 4194303999 2097151999+ ee GPT
2、分區擴容需是離線操作,因此需要先卸載磁盤,卸載前請停止業務使用
[root@VM_0_89_centos ~]# umount /data
3、GPT重新分區,需要先刪除原有分區,然后再重建分區,刪除前使用unit s獲取到磁盤柱面的大小,切記,操作前應要做好快照備份,刪除分區重建分區有風險
[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 #磁盤空間有擴容,因此提示有ERR,輸入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 2097152000 blocks) or continue with the current setting?
Fix/Ignore? Fix #空間并未完全使用提示有Waring,輸入Fix修復
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 #當前分區的情況
(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,后面重建分區需要使用到
(parted) rm 1 #刪除分區信息
(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 #確認分區信息已被刪除
(parted) mkpart primary 2048s 100% #重新創建磁盤分區,起始范圍需要和原分區保持一致
(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分區擴容完畢后,需要在文件系統中擴容空間,切記,不要格式化文件系統,否則數據將會丟失,根據文件系統類型選擇擴容方式,以xfs為例
將磁盤掛載到系統中
[root@VM_0_89_centos ~]# mount -a
[root@VM_0_89_centos ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
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
擴容文件系統空間
[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 #已完成空間擴容
校驗文件系統空間
[root@VM_0_89_centos ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
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 #已擴容至3T
備注:如果是ext3、ext4則使用resize2fs /dev/vdb1實現文件系統的擴容。
至此,基于GPT的磁盤格式磁盤分區擴容完畢,整個擴容過程中磁盤需要卸載操作,因此業務需要離線進行,擴容過程中需要刪除分區,操作較危險,操作前務必做好快照避免誤操作導致磁盤分區信息丟失。
2.8 GPT新增磁盤分區
對于需要多個磁盤分區的場景,可以在GPT磁盤上新建另外一個分區的方式實現,實現方式和新創建一個分區的過程相類似,如下為基于GPT格式磁盤新增分區的操作過程:
以磁盤擴容至3.5T為例,通過GPT格式新創建另外一個/dev/vdb2的分區,并掛載到系統中使用,如下演示操作過程
1、 登錄操作系統,確認磁盤空間擴容大小和磁盤格式為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 #磁盤分區格式類型為gpt
Disk identifier: 15BF58A1-BBE0-466A-B2C5-A243AD6A3108
# Start End Size Type Name
1 2048 6291453951 3T Microsoft basic primary
2、獲取磁盤上一個分區的End范圍,print得知結束范圍3221GB ,下一個步驟需要使用到
[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、 磁盤上新建一個分區/dev/vdb2,開始范圍為上一個步驟中獲取的磁盤大小
[root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 3221GB 100% #開始范圍為步驟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 #包含有兩個分區
1 1049kB 3221GB 3221GB xfs primary
2 3221GB 3758GB 537GB primary
4、 磁盤格式化創建文件系統,以制作xfs文件系統為例
[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、 掛載磁盤分區到系統中,以手動mount為例演示,實際使用時應使用fstab實現持久掛載
[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. 總結
前文總結了在Linux環境中CBS三種使用方式:
裸設備創建文件系統;
使用MBR格式分區;
使用GPT格式分區。
以及這三種使用方式對應的擴容方式和操作步驟。相比于裸設創建文件系統,使用MBR和GPT格式擴容時需要卸載磁盤,因此無法做到在線擴容。因此在云環境下推薦使用直接在裸設備上創建文件系統的方式,其更加便捷,易于實現,且擴容過程中可以在線擴容。。
4. 作者簡介
HappyLau,高級云計算顧問,目前在騰訊云從事公有云相關工作。曾就職于酷狗、EasyStack,擁有多年公有云+私有云云計算架構設計、運維、交付相關經驗。參與過酷狗、南方電網、國泰君安等大型私有云平臺建設,精通Linux、Kubernetes、OpenStack、Ceph等開源技術,具有豐富RHCA/OpenStack/Linux授課經驗。
參考文獻
總結
以上是生活随笔為你收集整理的linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea安装Jrebel步骤
- 下一篇: sql同比环比计算