現在的位置: 首頁 > 操作系統 > 正文

Linux 云服務器存儲擴容的幾種方法

2020年02月17日 操作系統 ⁄ 共 23795字 ⁄ 字號 評論關閉

  隨著業務的發展,業務數據不停的增長,原有的磁盤空間可能會出現磁盤空間不夠用的情況,因此,需要對磁盤空間進行擴容,以滿足業務數據增長的需求。本文總結了 Linux 環境下云服務器存儲擴容的三種方式及其操作步驟,與大家一同交流。

  環境說明:

  Linux 操作系統:CentOS Linux release 7.6.1810 (Core)。

  平臺環境:騰訊云 CVM,CBS。

  一、存儲擴容概述

  以下圖為例,假如起初購買了 100G 磁盤空間,隨著數據的不停增長,原有 100G 空間不夠用了,將空間擴容至 200G。

  CBS 是騰訊云提供用于云服務器的持久性數據塊級存儲服務,云盤具有彈性,按需擴容特性,云盤可以任意的按需擴容。

  不過云盤擴容時不是所有的場景下都可以任意擴容,云盤擴容具有兩個限制:

  系統盤不支持擴容,理論上系統盤也能夠支持擴容,系統盤存放操作系統數據,擴容可能會造成系統啟動異常;本地盤不支持擴容,

  本地盤使用宿主機的本地盤,本地盤彈性擴容能力沒有云盤靈活,無法支持彈性按需擴容。

  要深入掌握云盤的擴容,需要掌握云盤的使用方式,在 Linux 下通常有如下三種使用方式:

  裸設備創建文件系統,不需要創建任何分區,直接在裸盤上創建文件系統;

  磁盤上創建 MBR 格式的分區,適用于小于 2T 的多個磁盤分區的場景;

  磁盤上創建 GPT 格式的分區,適用于大于 2T 的多個磁盤分區的場景。

  二、 Linux 云服務器存儲擴容

  1. 裸設備磁盤使用

  Linux 系統中可以直接在裸設備磁盤上創建文件系統,即磁盤不需要創建任何磁盤分區,直接在磁盤上創文件文件系統并掛載使用,其具有如下特點:

  磁盤不需要多個分區;

  適用于大于 2T 磁盤;

  簡單易使用;

  后期支持在線擴容。

  上圖所示是在 Linux 系統中直接在裸設備創建文件系統的操作步驟,先在控制臺購買好云盤并將其掛載到 CVM 中,然后登陸到 Linux 系統中對磁盤格式化文件系統并掛載使用。

  控制臺購買和掛載請自行操作,如下演示在 Linux 系統中裸設備文件系統的使用步驟:

  (1) 登陸操作系統,通過 fdisk -l 獲取磁盤的名稱,系統有兩塊磁盤 vda 和 vdb,/dev/vdb 是我們操作的磁盤。

  [[email protected]_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors#vda 為系統盤

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:107.4GB,107374182400bytes,209715200sectors#vdb 為數據盤

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 直接在磁盤上創建文件系統 (注:并未在磁盤上創建任何分區),根據需要格式化為 ext4 或 xfs 格式。

  [[email protected]_0_89_centos ~]# mkfs.ext4 /dev/vdb #創建文件 ext4 文件系統

  mke2fs 1.42.9 (28-Dec-2013)

  Filesystem label=

  OS type: Linux

  Blocksize=4096 (log=2)

  Fragmentsize=4096 (log=2)

  Stride=0 blocks, Stripewidth=0 blocks

  6553600 inodes, 26214400 blocks

  1310720 blocks (5.00%) reservedforthe superuser

  First datablock=0

  Maximum filesystemblocks=2174746624

  800 block groups

  32768 blocks per group, 32768 fragments pergroup

  8192 inodes pergroup

  Superblock backups stored on blocks:

  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

  4096000, 7962624, 11239424, 20480000, 23887872

  Allocatinggrouptables: done

  Writing inode tables: done

  Creating journal (32768 blocks): done

  Writing superblocksandfilesystemaccountinginformation: done

  備注:如果要創建為 xfs 則使用 mkfs.xfs /dev/vdb

  (3) 創建好文件系統后即可掛載到系統中使用,使用方式有兩種:臨時 mount 或編寫 fstab 實現持久性掛載。

  線上環境推薦使用編寫 fstab 的方式,避免機器下次重啟后磁盤信息未加載, 掛載名稱推薦使用 UUID。

  blkid 獲取磁盤 UUID 信息

  [[email protected]_0_89_centos ~]# blkid /dev/vdb

  /dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436"TYPE="ext4"

  編寫/etc/fstab,其內容如下

  UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436"/dataext4 defaults 0 0

  (4) 掛載點目錄 /data 需要提前創建好,然后執行 mount -a 進行加載,mount -a 是系統啟動時之行的指令,如果 fstab 編寫有誤要及時修復,避免影響下次開機啟動。

  執行掛載操作

  [[email protected]_0_89_centos ~]# mount -a

  檢查掛載情況

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M444K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.8G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb99G61M94G1% /data #vdb 磁盤已順利掛載到系統中,大小為100G

  至此,基于 Linux 系統上使用裸盤構建文件系統并使用操作演示完畢,通過操作可知,裸盤上創建文件系統方式不需要對磁盤進行分區,操作便捷容易,且方便擴容,下面部分將演示基于裸設備文件的文件系統存儲空間擴容。

  2. 裸設備磁盤擴容

  上述步驟是裸設備磁盤的擴容方式,擴容過程中存在數據損壞的風險,為了避免擴容過程中誤操作, 強烈建議擴容前對磁盤做快照 ,以防數據損壞時做恢復!

  做完快照后在控制臺完成磁盤的擴容,擴容完畢后需要在操作系統中識別到擴容的空間。以磁盤擴容至 200G 為例,演示在 Linux 中裸設備擴容的操作過程:

  (1) 確認磁盤的使用方式,通過 fdisk -l 查看磁盤并未創建有任何磁盤分區。

  [[email protected]_0_89_centos ~]# fdisk -l /dev/vdb

  Disk /dev/vdb:214.7GB,214748364800bytes,419430400sectors#磁盤空間已擴容至 200G

  Units = sectorsof1*512=512bytes

  Sector size (logical/physical): 512 bytes /512bytes

  I/O size (minimum/optimal): 512 bytes /512bytes#當前磁盤上未創建任何分區

  #使用 blkid 查看 vdb 磁盤文件系統的情況,可得知,當前 /dev/vdb 未創建磁盤分區,切構建了 ext4 文件系統

  [[email protected]_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) 確認為云盤的擴容方式為裸盤后,根據文件系統的類型,在文件系統層面擴容以識別到云盤的擴容空間。

  [[email protected]_0_89_centos ~]# resize2fs /dev/vdb

  resize2fs1.42.9(28-Dec-2013)

  Filesystem at /dev/vdbismounted on /data; on-line resizing required

  old_desc_blocks =13, new_desc_blocks =25

  The filesystem on /dev/vdbisnow52428800blocks long. #提示已經擴容至52428800個 block

  備注:如果是 xfs,則使用 xfs_growfs /dev/vdb 擴容

  (3) 校驗磁盤空間擴容情況,使用 df -H 校驗,vdb 磁盤已在文件系統擴容至 200G。

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M444K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.8G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb197G60M188G1% /data #已擴容至200G

  通過上述的操作演示可知,裸盤上并未創建任何磁盤分區,因此擴容過程相當便捷,直接在文件系統上擴容即可,使用簡單,這也是云上推薦使用方式。

  3. MBR 磁盤分區

  如果磁盤需要創建多個分區并將分區掛載到不同的目錄中使用需要對磁盤進行分區,傳統的磁盤分區方式會使用 MBR 的格式進行分區,MBR 分區具有如下特性:

  適用于小于 2T 的磁盤,大于 2T 的空間將無法識別;

  單塊磁盤需要創建多個分區的場景;

  MBR 最多支持 7 個分區,即 3 個主分區 +4 個擴展分區。

  對磁盤制作 MBR 格式分區的操作步驟,在控制臺購買并掛載到 CVM 云主機后,登錄到操作系統中對磁盤進行分區和使用。

  如下以新購的一塊 100G 磁盤為例演示基于 cbs 云盤上創建 MBR 磁盤分區的過程:

  (1) 使用 fdisk -l 獲取到到磁盤的名稱,包含兩塊磁盤 vda 和 vdb,vdb 是我們需要操作的 cbs 云盤。

  [[email protected]_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:107.4GB,107374182400bytes,209715200sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 使用 fdisk 工具對磁盤進行分區,fdisk /dev/vdb 進入到 fdisk 交互式界面,通過交互式完成分區創建。

  [[email protected]_0_89_centos~]# fdisk /dev/vdb

  Welcometo fdisk (util-linux 2.23.2).

  Changeswill remain in memory only, until you decide to write them.

  Becareful before using the write command.

  Devicedoes not contain a recognized partition table

  Buildinga new DOS disklabel with disk identifier 0x5eeb4bc8.

  Command(m for help): m #輸入 m 可以獲取到操作指令的幫助

  Commandaction

  atoggle a bootable flag

  bedit bsd disklabel

  ctoggle the dos compatibility flag

  ddelete a partition #刪除分區

  gcreate a new empty GPT partition table

  Gcreate an IRIX (SGI) partition table

  llist known partition types

  mprint this menu #獲取幫助

  nadd a new partition #創建分區

  ocreate a new empty DOS partition table

  pprint the partition table #顯示分區情況

  qquit without saving changes #退出,不保存

  screate a new empty Sun disklabel

  tchange a partition's system id

  uchange display/entry units

  vverify the partition table

  wwrite table to disk and exit #保存分區設置

  xextra functionality (experts only)

  Command(m for help): n #新建分區,輸入 n 進入到新建分區交互界面

  Partitiontype:

  pprimary (0 primary, 0 extended, 4 free)

  eextended

  Select(default p): p #選擇分區類型,p 表示主分區,e 代表擴展分區

  Partitionnumber (1-4, default 1): #分區號碼

  Firstsector (2048-209715199, default 2048): #起始扇區范圍

  Usingdefault value 2048

  Lastsector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): #結束刪除范圍

  Usingdefault value 209715199

  Partition1 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

  Sectorsize (logical/physical): 512 bytes / 512 bytes

  I/Osize (minimum/optimal): 512 bytes / 512 bytes

  Disklabel type: dos

  Diskidentifier: 0x5eeb4bc8

  DeviceBoot Start End Blocks Id System

  /dev/vdb12048 209715199 104856576 83 Linux #磁盤分區的信息

  Command(m for help): w #報錯退出

  Thepartition table has been altered!

  Callingioctl() to re-read partition table.

  Syncingdisks.

  (3) 使用 partprobe 將分區的信息同步給內核,讓內核識別到該分區信息。

  [[email protected]_0_89_centos~]# partprobe /dev/vdb

  (4) 接下來可以對分區制作文件系統,制作成操作系統能夠識別的文件系統,以制作 xfs 文件系統為例。

  [[email protected]_0_89_centos ~]# mkfs.xfs /dev/vdb1

  meta-data=/dev/vdb1isize=512agcount=4,agsize=6553536 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=26214144,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=12799,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  [[email protected]_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 掛載到系統中,確保下次開機后配置生效。

  [[email protected]_0_89_centos ~]# vim/etc/fstab

  UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5"/data xfs defaults00

  (6) 執行 mount -a 加載掛載配置,并檢查掛載情況。

  [[email protected]_0_89_centos ~]# mount -a

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1100G33M100G1% /data #磁盤已經掛載到系統中

  4. MBR 磁盤擴容

  MBR 格式的磁盤擴容需要在 MBR 磁盤分區中擴展空間,并在文件系統中擴展文件系統空間以識別到擴容的空間,騰訊云為此提供了一個專門擴容的腳本 devresize.py,腳本要求條件如下:

  文件系統是 EXT2/EXT3/EXT4/XFS;

  當前文件系統不能有錯誤;

  擴容后的磁盤大小不超過 2TB;

  當前工具僅支持 Python 2 版本,不支持 Python 3 版本。

  MBR 格式磁盤的擴容步驟,現在控制臺中做好快照,并擴容,然后登錄到操作系統中完成分區和文件系統的擴容,如下以擴容至 200G 為例演示在 MBR 格式的磁盤分區擴容方法、

  (1) 檢查磁盤的擴容,確認擴容的方式,根據 System 類型為 Linux 判斷為 MBR 格式的分區。

  [[email protected]_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:214.7GB,214748364800bytes,419430400sectors#空間大小已擴容至 200G

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x5eeb4bc8

  DeviceBootStartEndBlocksIdSystem#System 類型為 Linux 表示使用 MBR 格式分區

  /dev/vdb1204820971519910485657683Linux

  (2) 獲取擴容的腳本,該腳本可以完成分區的擴容和文件系統的自動擴容,需要離線執行,因此先需要卸載磁盤。

  [[email protected]_0_89_centos ~]# wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py

  無法在線執行,需卸載磁盤

  [[email protected]_0_89_centos ~]# python /tmp/devresize.py /dev/vdb

  [ERROR] - Target partition /dev/vdb1 must be unmounted.

  [[email protected]_0_89_centos ~]# umount /dev/vdb1

  (3) 執行擴容步驟。

  [[email protected]_0_89_centos ~]# python /tmp/devresize.py /dev/vdb

  [INFO] - checking filesystem healthy

  Phase 1 -findandverify superblock...

  Phase 2 - using internal log

  - zero log...

  - scan filesystem freespaceandinode maps...

  - found root inode chunk

  Phase 3 -foreach AG...

  - scanandclear agi unlinked lists...

  - process known inodesandperform inode discovery...

  - agno = 0

  - agno = 1

  - agno = 2

  - agno = 3

  - process newly discovered inodes...

  Phase 4 - checkforduplicate blocks...

  - setting up duplicate extent list...

  - checkforinodes claiming duplicate blocks...

  - agno = 0

  - agno = 1

  - agno = 2

  - agno = 3

  Phase 5 - rebuild AG headersandtrees...

  - reset superblock...

  Phase 6 - check inode connectivity...

  - resetting contents of realtime bitmapandsummary inodes

  - traversing filesystem...

  - traversal finished...

  - moving disconnected inodestolost+found...

  Phase 7 - verifyandcorrect 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/vdb1tothe last sector of device.

  Toensure 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 takefromseveral minutestoseveral hours, continue? [Y/n] #備份并 resize,確認輸入 y

  y

  [INFO] - Backup MBRto/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/vdb1isize=512agcount=4,agsize=6553536 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0spinodes=0

  data =bsize=4096blocks=26214144,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internalbsize=4096blocks=12799,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  data blocks changedfrom26214144to52428544

  [INFO] - umount /dev/vdb1

  [INFO] - Finished

  (4) 重新掛載文件系統并確認擴容空間。

  [[email protected]_0_89_centos ~]# mount -a #重新掛載

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1200G33M200G1% /data #空間已擴容至200G

  注意事項:

  擴容前一定要先做好快照,避免數據損壞時可快速恢復;

  MBR 格式磁盤擴容需要卸載云盤,因此是離線擴容,如果云盤有在使用,請先停止業務后再擴容。

  5. MBR 新增磁盤分區

  如果需要分區的場景,可以將擴容的空間劃分成一個新的分區供操作系統使用,通過在磁盤上新創建分區的方式實現擴容,其具有如下特點:

  單盤需要多個分區的場景;

  擴容空間小于 2T;

  擴容后原分區無法擴容;

  CBS 云盤是按需彈性擴展,推薦使用單磁盤單分區掛載,云上推薦使用裸盤創建文件系統。

  如下以一塊 200G 的 CBS 盤擴容至 300G 為例演示在 MBR 格式磁盤上新增分區的方式實現磁盤擴容使用方式:

  (1) 準備工作,控制臺做好快照,并在控制臺完成磁盤空間擴容;

  (2) fdisk -l 檢查磁盤擴容的大小,通過 System 類型為 Linux 可得知其為 MBR 分區格式的磁盤。

  [[email protected]_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:322.1GB,322122547200bytes,629145600sectors#磁盤大小已擴容至 300G

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x5eeb4bc8

  DeviceBootStartEndBlocksIdSystem#磁盤分區類型為 MBR 格式

  /dev/vdb1204841943039920971417683Linux

  (3) 擴容磁盤上新創建一個磁盤分區 /dev/vdb2, 大小為 100G。

  [[email protected]_0_89_centos ~]# fdisk /dev/vdb

  Welcometofdisk (util-linux 2.23.2).

  Changes will remaininmemory only, until you decidetowrite them.

  Be careful before using the write command.

  Command (mforhelp): 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 IdSystem

  /dev/vdb1 2048 419430399 209714176 83 Linux #當前已有一個分區

  Command (mforhelp): n #新增一個分區

  Partition type:

  p primary (1 primary, 0 extended, 3 free)

  e extended

  Select (default p): p #分區類型為主分區

  Partition number (2-4,default2):

  First sector (419430400-629145599,default419430400): #開始扇區大小

  Usingdefaultvalue 419430400

  Last sector, +sectorsor+size{K,M,G} (419430400-629145599,default629145599): #結束扇區大小

  Usingdefaultvalue 629145599

  Partition 2 oftypeLinuxandof size 100 GiB isset

  Command (mforhelp): 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 IdSystem

  /dev/vdb1 2048 419430399 209714176 83 Linux

  /dev/vdb2 419430400 629145599 104857600 83 Linux #分區已創建成功

  Command (mforhelp): w

  The partition table has been altered!

  Calling ioctl()tore-read partition table.

  WARNING: Re-reading the partition table failed witherror16: Deviceorresourcebusy.

  The kernel still uses the old table. The new table will be used at

  the next rebootorafter yourunpartprobe(8)orkpartx(8)

  Syncing disks.

  (4) 刷新內核分區以識別到分區內容。

  [[email protected]_0_89_centos~]# partprobe /dev/vdb

  (5) 格式化磁盤分區,創建操作系統能識別的文件系統,以 xfs 為例。

  [[email protected]_0_89_centos ~]# mkfs.xfs /dev/vdb2

  meta-data=/dev/vdb2isize=512agcount=4,agsize=6553600 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=26214400,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=12800,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (6) 掛載至系統中,推薦使用 fstab 掛載。

  獲取分區 UUID 號

  [[email protected]_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

  創建掛載目錄并掛載

  [[email protected]_0_89_centos ~]# mkdir /data1

  [[email protected]_0_89_centos ~]# mount -a

  檢查掛載情況

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M452K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1200G33M200G1% /data

  /dev/vdb2100G33M100G1% /data1 #磁盤分區已經掛載至操作系統

  至此云盤上使用 MBR 格式新增分區的演示使用完畢,這種方式適用于單塊磁盤多分區的場景。

  由于云上的磁盤可以根據按需擴容,且采用分區擴容的方式原有分區 (第一個分區) 將無法擴容,云上推薦使用裸盤方式。

  6. GPT 磁盤分區

  前文介紹了對磁盤創建 MBR 格式磁盤分區的使用方式,對于大于 2T 的磁盤,需要使用 GPT 格式的方式進行分區,下文將介紹磁盤使用 GPT 格式進行分區的使用方式。

  先在控制臺購買云盤并掛載到云主機中,然后再操作系統中對磁盤進行 GPT 格式分區并創建文件系統。

  以創建一個 2T 磁盤為例,演示 Linux 中使用 parted 對磁盤創建 GPT 格式分區使用過程。

  (1) 登錄操作系統檢查磁盤的名稱和空間大小。

  [[email protected]_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:2147.5GB,2147483648000bytes,4194304000sectors#磁盤為 vdb,大小為 2T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 使用 parted 對磁盤打標簽和磁盤分區。

  磁盤打上 label 并查看確認

  [[email protected]_0_89_centos ~]# parted /dev/vdb mklabel gpt

  [[email protected]_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:

  NumberStartEndSizeFilesystemNameFlags

  對磁盤進行分區

  [[email protected]_0_89_centos ~]# parted /dev/vdb mkpart primary 2048s 100%

  Information: You may needtoupdate/etc/fstab.

  查看分區創建情況

  [[email protected]_0_89_centos ~]# parted /dev/vdb print

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:2147GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags

  11049kB2147GB2147GB primary#創建了一個磁盤分區,范圍是 2048s 到 2147GB

  (3) 磁盤上創建文件系統,以制作 xfs 文件系統為例。

  [[email protected]_0_89_centos ~]# mkfs.xfs /dev/vdb1

  meta-data=/dev/vdb1isize=512agcount=4,agsize=131071872 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=524287488,imaxpct=5

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=255999,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (4) 編寫 fstab 掛載到 /data 目錄中。

  獲取分區 UUID

  [[email protected]_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) 加載掛載配置信息并確認。

  [[email protected]_0_89_centos ~]# mount -a

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb12.0T33M2.0T1% /data #磁盤當前已經掛載至 /data 目錄

  7. GPT 磁盤分區擴容

  GPT 格式磁盤分區的擴容步驟,需要在控制臺中制作快照并完成擴容,然后在 GPT 分區中識別到擴容空間,文件文件系統識別到空間,如下以 2T 擴容至 3T 為例演示擴容過程:

  (1) 確認磁盤空間和擴容方式為 GPT。

  [[email protected]_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:3221.2GB,3221225472000bytes,6291456000sectors#磁盤空間大小已擴容至 3T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x00000000

  DeviceBootStartEndBlocksIdSystem#磁盤分區格式為 GPT

  /dev/vdb1141943039992097151999+eeGPT

  (2) 分區擴容需是離線操作,因此需要先卸載磁盤,卸載前請停止業務使用。

  [[email protected]_0_89_centos~]# umount /data

  (3) GPT 重新分區,需要先刪除原有分區,然后再重建分區,刪除前使用 unit s 獲取到磁盤柱面的大小, 切記,操作前應要做好快照備份,刪除分區重建分區有風險 。

  [[email protected]_0_89_centos ~]# parted /dev/vdb

  GNU Parted 3.1

  Using /dev/vdb

  WelcometoGNU Parted!Type'help'toview a list of commands.

  (parted)print

  Error: The backup GPT table isnotat the end of the disk, as it should be. This might mean that another operatingsystembelieves the disk is smaller. Fix, by moving the backuptothe end

  (andremoving the old backup)?

  Fix/Ignore/Cancel? Fix #磁盤空間有擴容,因此提示有 ERR,輸入 Fix 修復

  Warning:Notall of the space availableto/dev/vdb appearstobe used, you can fix the GPTtouse all of the space (an extra 2097152000 blocks)orcontinue 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 FilesystemName 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 FilesystemName 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 FilesystemName 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 FilesystemName Flags

  1 2048s 6291453951s 6291451904s xfs primary

  (4) GPT 分區擴容完畢后,需要在文件系統中擴容空間,切記,不要格式化文件系統,否則數據將會丟失。根據文件系統類型選擇擴容方式,以 xfs 為例:

  將磁盤掛載到系統中

  [[email protected]_0_89_centos ~]# mount -a

  [[email protected]_0_89_centos ~]# df -h

  文件系統 容量 已用 可用 已用 % 掛載點

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M488K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb12.0T33M2.0T1% /data

  擴容文件系統空間

  [[email protected]_0_89_centos ~]# xfs_growfs /dev/vdb1

  meta-data=/dev/vdb1 isize=512agcount=4, agsize=131071872blks

  = sectsz=512attr=2, projid32bit=1

  = crc=1finobt=0spinodes=0

  data = bsize=4096blocks=524287488, imaxpct=5

  = sunit=0swidth=0blks

  naming =version2bsize=4096ascii-ci=0ftype=1

  log =internal bsize=4096blocks=255999, version=2

  = sectsz=512sunit=0blks, lazy-count=1

  realtime =none extsz=4096blocks=0, rtextents=0

  data blocks changedfrom524287488to786431488#已完成空間擴容

  校驗文件系統空間

  [[email protected]_0_89_centos ~]# df -h

  文件系統 容量 已用 可用 已用 % 掛載點

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M488K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb13.0T33M3.0T1% /data #已擴容至3T

  備注:如果是 ext3、ext4 則使用 resize2fs /dev/vdb1 實現文件系統的擴容。

  至此,基于 GPT 的磁盤格式磁盤分區擴容完畢,整個擴容過程中磁盤需要卸載操作,因此業務需要離線進行,擴容過程中需要刪除分區,操作較危險,操作前務必做好快照避免誤操作導致磁盤分區信息丟失。

  8. GPT 新增磁盤分區

  對于需要多個磁盤分區的場景,可以在 GPT 磁盤上新建另外一個分區的方式實現,實現方式和新創建一個分區的過程相類似,如下為基于 GPT 格式磁盤新增分區的操作過程:

  以磁盤擴容至 3.5T 為例,通過 GPT 格式新創建另外一個 /dev/vdb2 的分區,并掛載到系統中使用,如下演示操作過程:

  (1) 登錄操作系統,確認磁盤空間擴容大小和磁盤格式為 GPT。

  [[email protected]_0_89_centos~]#fdisk-l/dev/vdb

  WARNING:fdiskGPTsupportiscurrentlynew,andthereforeinanexperimentalphase.Useatyourowndiscretion.

  Disk /dev/vdb:3758.1GB,3758096384000bytes,7340032000sectors#磁盤空間大小為 3.5T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:gpt#磁盤分區格式類型為 gpt

  Disk identifier:15BF58A1-BBE0-466A-B2C5-A243AD6A3108

  # Start End Size Type Name

  1204862914539513TMicrosoftbasicprimary

  (2) 獲取磁盤上一個分區的 End 范圍,print 得知結束范圍 3221GB ,下一個步驟需要使用到。

  [[email protected]_0_89_centos ~]# parted /dev/vdb print

  Error: ThebackupGPTtableisnotattheendofthe disk,asit should be. This might mean that another operatingsystembelieves the diskissmaller. Fix,bymoving thebackuptotheend

  (andremoving theoldbackup)?

  Fix/Ignore/Cancel? Fix

  Warning:Notallofthespaceavailableto/dev/vdb appearstobe used, you can fix the GPTtouseallofthespace(an extra1048576000blocks)orcontinuewiththecurrentsetting?

  Fix/Ignore? Fix

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:3758GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags

  11049kB3221GB3221GB xfs primary

  (3) 磁盤上新建一個分區 /dev/vdb2,開始范圍為上一個步驟中獲取的磁盤大小。

  [[email protected]_0_89_centos ~]# parted /dev/vdb mkpart primary 3221GB 100% #開始范圍為步驟 2 獲取的大小

  Information: You may need toupdate/etc/fstab.

  [[email protected]_0_89_centos ~]# parted /dev/vdb print

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:3758GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags#包含有兩個分區

  11049kB3221GB3221GB xfs primary

  23221GB3758GB537GB primary

  (4) 磁盤格式化創建文件系統,以制作 xfs 文件系統為例。

  [[email protected]_0_89_centos ~]# mkfs.xfs /dev/vdb2

  meta-data=/dev/vdb2isize=512agcount=4,agsize=32768000 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=131072000,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=64000,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (5) 掛載磁盤分區到系統中,以手動 mount 為例演示,實際使用時應使用 fstab 實現持久掛載。

  [[email protected]_0_89_centos ~]# mount /dev/vdb2 /data1/

  [[email protected]_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M484K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb13.0T33M3.0T1% /data

  /dev/vdb2500G33M500G1% /data1 #已掛載完畢

  三、總結

  前文總結了在 Linux 環境中 CBS 三種使用方式:

  裸設備創建文件系統;

  使用 MBR 格式分區;

  使用 GPT 格式分區。

  以及這三種使用方式對應的擴容方式和操作步驟。相比于裸設創建文件系統,使用 MBR 和 GPT 格式擴容時需要卸載磁盤。

  因此無法做到在線擴容。因此在云環境下推薦使用直接在裸設備上創建文件系統的方式,其更加便捷,易于實現,且擴容過程中可以在線擴容。

抱歉!評論已關閉.

奔驰宝马破解版下载 内部选一肖一码 上海11选5专家预测推荐 贵州快三开奖结果走势 平码用加七算法 股票大盘行情指数 甘肃快3走走势图 澳大利亚快乐8 模拟炒股游戏 河北十一选五真准 天一图库印刷区最早最齐全的 股票投资网 甘肃十一选五任五遗漏号码 牛人配资 东方6+1开奖规则 ps手机版哪个好 平码三中三公式十规律