当网站的业务量越来越多的时候,会发现数据盘已经容不下了,于是打算对数据盘进行扩容,由于以前照着阿里云的教程操作,导致网站一百多G的数据全部丢失,当时没有做备份和快照,导致后来手工操作7天7夜不休不眠的发布数据,流量下降了,数据也丢了,人也受累了,于是在今夜奋发学习,终于学得无损磁盘扩容的教程,以下图片来自于阿里云创建的抢占式实例。注:1,本教程只针对数据盘(文中绿色字体代表要输入的命令,紫色代表重点)
       2,数据提前做好备份和快照
       3,阿里云磁盘,宝塔面板,Centos 7的系统
       4,我的服务器现有系统盘 /dev/vda1,数据盘/dev/vdb1,在远程连接中输入:df -h 回车
 
步骤:
一,阿里云后台在数据盘更多处点击磁盘扩容,选中在线扩容,我的原来是78G,扩充后154G,提交订单。发现在阿里云后台显示是154G,宝塔面板还是77G,文件系统约占1G。
二,停止相关的服务
1,停止宝塔的所有任务,在宝塔面板中计划任务中新建shell脚本任务,名称随便写,点击保存并点击执行。脚本内容如下:
  1. <font size="4" color="#2e8b57">#!/bin/bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4.  
  5. stop_service(){
  6.  
  7.         /etc/init.d/bt stop
  8.  
  9.         if [ -f "/etc/init.d/nginx" ]; then
  10.                 /etc/init.d/nginx stop > /dev/null 2>&1
  11.         fi
  12.  
  13.         if [ -f "/etc/init.d/httpd" ]; then
  14.                 /etc/init.d/httpd stop > /dev/null 2>&1
  15.         fi
  16.  
  17.         if [ -f "/etc/init.d/mysqld" ]; then
  18.                 /etc/init.d/mysqld stop > /dev/null 2>&1
  19.         fi
  20.  
  21.         if [ -f "/etc/init.d/pure-ftpd" ]; then
  22.                 /etc/init.d/pure-ftpd stop > /dev/null 2>&1
  23.         fi
  24.  
  25.         if [ -f "/etc/init.d/tomcat" ]; then
  26.                 /etc/init.d/tomcat stop > /dev/null 2>&1
  27.         fi
  28.  
  29.         if [ -f "/etc/init.d/redis" ]; then
  30.                 /etc/init.d/redis stop > /dev/null 2>&1
  31.         fi
  32.  
  33.         if [ -f "/etc/init.d/memcached" ]; then
  34.                 /etc/init.d/memcached stop > /dev/null 2>&1
  35.         fi
  36.  
  37.         if [ -f "/www/server/panel/data/502Task.pl" ]; then
  38.                 rm -f /www/server/panel/data/502Task.pl
  39.                 if [ -f "/etc/init.d/php-fpm-52" ]; then
  40.                         /etc/init.d/php-fpm-52 stop > /dev/null 2>&1
  41.                 fi
  42.  
  43.                 if [ -f "/etc/init.d/php-fpm-53" ]; then
  44.                         /etc/init.d/php-fpm-53 stop > /dev/null 2>&1
  45.                 fi
  46.  
  47.                 if [ -f "/etc/init.d/php-fpm-54" ]; then
  48.                         /etc/init.d/php-fpm-54 stop > /dev/null 2>&1
  49.                 fi
  50.  
  51.                 if [ -f "/etc/init.d/php-fpm-55" ]; then
  52.                         /etc/init.d/php-fpm-55 stop > /dev/null 2>&1
  53.                 fi
  54.  
  55.                 if [ -f "/etc/init.d/php-fpm-56" ]; then
  56.                         /etc/init.d/php-fpm-56 stop > /dev/null 2>&1
  57.                 fi
  58.  
  59.                 if [ -f "/etc/init.d/php-fpm-70" ]; then
  60.                         /etc/init.d/php-fpm-70 stop > /dev/null 2>&1
  61.                 fi
  62.  
  63.                 if [ -f "/etc/init.d/php-fpm-71" ]; then
  64.                         /etc/init.d/php-fpm-71 stop > /dev/null 2>&1
  65.                 fi
  66.         fi
  67.         swapoff /www/swap
  68. }
  69. stop_service</font>
复制代码
2,登陆SSH到服务器
(1)关闭swap分区:
swapoff -a
(2)卸载主机监控(部分主机商有):
/usr/local/cloudmonitor/wrapper/bin/cloudmonitor.sh remove && rm -rf /usr/local/cloudmonitor
(3)解除占用(把占用 /dev/vdb1 的进程杀死):
fuser -m -k /dev/vdb1
(4)卸载主分区:
umount /dev/vdb1
  使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。
提示:如果还看得到/dev/vdb1 则重复依次操作停止宝塔任务,关闭swap分区,卸载主机监控,解除占用,卸载主分区。
三,重点来了,操作磁盘
1,运行fdisk -l  命令,
上图中disk /dev/vda:64.4GB,说明系统盘是65G左右,disk /dev/vdb:165.4GB与阿里云后台的容量对应。
另外看/dev/vdb1 后面的相关信息,在中间一行End信息中为163577855,我的个人理解是163G的意思,系统也占几G。
2,运行fdisk /dev/vdb命令进入磁盘操作,为什么是/dev/vdb而不是图中的/dev/vdb1,这vdb代表一个磁盘的名称,与阿里云后台磁盘
名称是对应的,而vdb1则代表vdb磁盘的第1个分区(个人理解)
3,输入 并按回车键,删除原来的分区(删除分区不会造成数据盘内数据的丢失)
  输入 n 并按回车键,开始创建新的分区
  输入 并按回车键,选择创建主分区
       输入 代表后default默认是1,应该也可以直接回车
  然后就发现First sector (2048-322961407,deffault 2048),其中322961407大于上图中End中的163577855,则代表分区大于原来的分区。
当看到“… size 154GiB is set” 说明已经成功建立新的主分区
  输入 wq 并按回车键,开始保存之前对分区的操作
四:更新文件系统信
1,查文系统,命令为:e2fsck -f /dev/vdb1
2,变更文件系统大小,命令为:resize2fs /dev/vdb13,将扩容完成的文件系统挂载到原来的挂载点(如本示例中的用宝塔官方挂载的第一块磁盘位置 /www),
命令为:mount /dev/vdb1 /www4,输入命令 df -h 查看信息
看图中的信息,Size 是152G,应该是可用的空间,Avail 是145G。
五,收尾
执行完后扩容好磁盘后重新挂载上去后执行以下两条命令
swapon /www/swap
echo "True" > /www/server/panel/data/502Task.pl
最后别忘了启动宝塔服务
/etc/init.d/bt start
登陆宝塔后台,刷新一下看看空间是不是变成了可用的空间152G呢?