号外——Liunx增加磁盘不重启服务器的2种方法

Linux IT敢客 3周前 (10-26) 385次浏览 未收录 0个评论 扫描二维码
文章目录[隐藏]

       在昨晚给线上服务器进行磁盘扩容的时候遇到了一个大坑,新增磁盘后发现服务器并没有识别/dev/sdb 出来,折腾了好一会!那么接下来我就结合之前写的文章内容在这里做一个磁盘扩容的总结。

       首先我们介绍一下磁盘扩容的两种方法:

1、在原有硬盘 1 的基础上直接增加空间。

如下图所示,原先的硬盘 1 空间只有 30G 大小,号外——Liunx 增加磁盘不重启服务器的 2 种方法号外——Liunx 增加磁盘不重启服务器的 2 种方法

接下来,我们直接在硬盘 1 上面增加空间,增加到 50G。如下图所示号外——Liunx 增加磁盘不重启服务器的 2 种方法

这时候我们在服务器上执行 fdisk /dev/sda 和 df -h 看,发现还是和之前一样,大小没有任何变化还是 30G。这里就不贴图片了,和上面一样。这时候往往之前的操作就是重启服务器 reboot 一下,然后 fdisk -l /dev/sda 看会有 50G 空间,但是这里我们往往因为业务需要不能停止服务,更不能停止服务器了。所以这里我们需要按照下面的方法进行操作,不需要重启服务器也不需要重启服务!

方法 1:echo 1 > /sys/class/$scsi_device/device/rescan

我们按照如下的方法操作一遍

[root@docker ~]# cd /sys/class/scsi_disk/
[root@docker scsi_disk]# ls
0:0:0:0
[root@docker scsi_disk]# cd 0\:0\:0\:0/
[root@docker 0:0:0:0]# cd device/
[root@docker device]# ls
block           eh_timeout                          generic        power                 scsi_disk     uevent
bsg             evt_capacity_change_reported        iocounterbits  queue_depth           scsi_generic  unpriv_sgio
delete          evt_inquiry_change_reported         iodone_cnt     queue_ramp_up_period  scsi_level    vendor
device_blocked  evt_lun_change_reported             ioerr_cnt      queue_type            state         vpd_pg80
device_busy     evt_media_change                    iorequest_cnt  rescan                subsystem     vpd_pg83
dh_state        evt_mode_parameter_change_reported  modalias       rev                   timeout
driver          evt_soft_threshold_reached          model          scsi_device           type
[root@docker device]# echo '1' > rescan
[root@docker device]# fdisk -l /dev/sda

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8551

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      821247      409600   83  Linux
/dev/sda2          821248    62914559    31046656   8e  Linux LVM

方法 2:重新扫描特定的 SCSI Device

echo 1 > /sys/block/$DEVICE/device/rescan 用 sda, sdb, sdc 等替换$DEVICE

[root@docker device]# echo 1 > /sys/block/sda/device/rescan

 

这时候我们发现,sda 已经增加到 50G 了。那么接下里需要重新增加一个分区 sda3 出来,将增加的 20G 空间分为 sda3 出来。

[root@docker device]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (62914560-104857599,默认为 62914560):
将使用默认值 62914560
Last 扇区, +扇区 or +size{K,M,G} (62914560-104857599,默认为 104857599):
将使用默认值 104857599
分区 3 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):p

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8551

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      821247      409600   83  Linux
/dev/sda2          821248    62914559    31046656   8e  Linux LVM
/dev/sda3        62914560   104857599    20971520   8e  Linux LVM

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
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)
正在同步磁盘。
[root@docker device]# 
 

 

经过上面的操作,我们将 sda3 分成 lvm 格式的分区了。但是这时候还没有挂载上 sda3,我们发现/dev/下面没有 sda3 出现。这时候如果我们 pvcreate 是不会成功的。

[root@docker device]# ls /dev/sda
sda   sda1  sda2  
[root@docker device]# ls /dev/sda
[root@docker device]# pvcreate /dev/sda3
  Device /dev/sda3 not found (or ignored by filtering).

这时候不要慌,我看看之前的提示信息

号外——Liunx 增加磁盘不重启服务器的 2 种方法

所以这时候要么 reboot 重启,要么运行 partprobe 要么运行 kpartx 命令。所以这里我在运行一下 partprobe 命令后,发现/dev/sda3 出来了。

[root@docker device]# partprobe
[root@docker device]# ll /dev/sda
sda   sda1  sda2  sda3  

那么接下来操作将 20G 扩到跟/目录下。也就是进行 lvm 的扩展操作了。

[root@docker device]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created
[root@docker device]# vgextend centos_docker /dev/sda3
  Volume group "centos_docker" successfully extended
[root@docker device]# lvextend -l +100%FREE /dev/mapper/centos_docker-root
  Size of logical volume centos_docker/root changed from 25.61 GiB (6555 extents) to 45.60 GiB (11674 extents).
  Logical volume root successfully resized.
[root@docker device]# xfs_growfs /dev/mapper/centos_docker-root 
meta-data=/dev/mapper/centos_docker-root isize=256    agcount=4, agsize=1678080 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=6712320, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=3277, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 6712320 to 11954176

##(如果是 ext4 文件系统,则使用命令 resize2fs /dev/mapper/centos_docker-root)##
[root@docker device]# df -h
文件系统                        容量  已用  可用 已用% 挂载点
/dev/mapper/centos_docker-root   46G  1.6G   45G    4% /
devtmpfs                        1.9G     0  1.9G    0% /dev
tmpfs                           1.9G     0  1.9G    0% /dev/shm
tmpfs                           1.9G  8.5M  1.9G    1% /run
tmpfs                           1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                       397M  120M  278M   31% /boot
tmpfs                           380M     0  380M    0% /run/user/0
[root@docker device]# 
 

这里成功将根/目录扩张到 50G 了。

2、增加一块新的硬盘

这里实验我就不继续做了,我复制之前的文章内容

————————–以下内容来源实战给 Linux 系统动态扩容,不停机处理!———————————–

上图中,我们原先只有 56G 的根目录空间,现在想增加 50G 进去!那么添加一块 50G 的硬盘进去。我们在不停机的情况下,点击虚拟机,点击编辑设置,选择添加,选择硬盘,创建新的虚拟磁盘磁盘,容量 50G,一直下一步知道完成。如下图所示,增加一块新的硬盘!号外——Liunx 增加磁盘不重启服务器的 2 种方法

        记录 lvm 的相关信息

我们使用 df -h 和 lvdisplay 命令记录下 LV 的相关信息,VG Name,LV Path 等信息

[root@do1 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   56G  1.5G   55G    3% /
devtmpfs                 911M     0  911M    0% /dev
tmpfs                    921M     0  921M    0% /dev/shm
tmpfs                    921M  8.5M  912M    1% /run
tmpfs                    921M     0  921M    0% /sys/fs/cgroup
/dev/sda1                397M  120M  278M   31% /boot
tmpfs                    185M     0  185M    0% /run/user/0
 
[root@do1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                k3TPNs-vUuJ-vmcy-SPzS-xxMA-jWhq-JFP95Z
  LV Write Access        read/write
  LV Creation host, time do1, 2018-10-19 18:59:22 +0800
  LV Status              available
  # open                 2
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                BqhdTf-yzgq-HaJi-fU6o-HbIn-WoAU-8tleaE
  LV Write Access        read/write
  LV Creation host, time do1, 2018-10-19 18:59:22 +0800
  LV Status              available
  # open                 1
  LV Size                55.61 GiB
  Current LE             14235
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

LV Path /dev/centos/root    #也就是根目录/挂载点
LV Name root
VG Name centos

上面三个信息记录下来,后面要用。

       格式化新挂载的磁盘

先用 fdisk -l 查看新的磁盘是否挂载

号外——Liunx 增加磁盘不重启服务器的 2 种方法

注意:这里如果没有发现新添加的磁盘,那么请 root 用户执行以下脚本。scsisum.sh 

#!/usr/bin/bash
scsisum=`ls /sys/class/scsi_host/ |wc -l`
for ((i=0;i<${scsisum};i++))
do
    echo "- - -" > /sys/class/scsi_host/host${i}/scan
done

接下来格式化分区操作‘fdisk /dev/sdb

号外——Liunx 增加磁盘不重启服务器的 2 种方法号外——Liunx 增加磁盘不重启服务器的 2 种方法

       新分区增加到 LV

将新加的分区 /dev/sdb1 创建为物理卷

[root@do1 ~]# pvcreate /dev/sdb1 
  Physical volume "/dev/sdb1" successfully created

给卷组‘centos’扩容,将物理卷 /dev/sdb1 扩展至‘centos’卷组

[root@do1 ~]# vgextend centos /dev/sdb1
  Volume group "centos" successfully extended

此时卷组‘centos’有50G空余空间即 /dev/sdb1,将其全部扩展至 /

[root@do1 ~]# lvextend -l +100%FREE /dev/mapper/centos-root 
  Size of logical volume centos/root changed from 55.61 GiB (14235 extents) to 105.60 GiB (27034 extents).
  Logical volume root successfully resized. 

此时50G磁盘虽已扩展至 /,但并没写入文件系统;进入 /etc/fstab 确认 / 文件系统—>xfs

号外——Liunx 增加磁盘不重启服务器的 2 种方法

写入文件系统,使扩容生效(如果是 ext4 文件系统,则使用命令 resize2fs /dev/mapper/centos-root)

[root@do1 ~]# xfs_growfs /dev/mapper/centos-root 
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=3644160 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=14576640, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=7117, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 14576640 to 27682816

查看/根目录大小是否变化,扩容前是 56G,扩容后是 106G,此时大功告成!

号外——Liunx 增加磁盘不重启服务器的 2 种方法

总结:以上是没有停机的情况下完成扩容磁盘,当然一切前提还是要做好安全备份!做好相应的备份快照,这样就实现了上述两点要求!

本次扩容指令汇总:

1.创建分区                                                 #fdisk /dev/sdb

2.创建物理卷                                             #pvcreate /dev/sdb1

3.查看卷组名称及使用情况                         #vgdisplay

4.将物理卷扩展到卷组                                #vgextend cl /dev/sdb1   (此处‘cl’是卷组名称)

5.将卷组中空闲空间扩展到 /home             #lvextend -l +100%FREE /dev/mapper/centos-root

6.刷新文件系统是扩容生效                         #resize2fs /dev/mapper/centos-root

使用 reiserfs 文件系统代替 ext2/ext3        #resize_reiserfs /dev/mapper/centos-root

Centos7 默认文件系统是 ‘xfs’,其他系统注意是否是‘ext4’等


验证新增加的磁盘能否填充内容,写了一个如下的脚本。不断的复制文件,当磁盘空间使用空间超过原先的总空间表示新增的磁盘空间有效。先在/root/test 目录下新建一个有一定大小的 123.txt 的文件,然后执行下面的脚本,脚本内容如下:

 #!/bin/bash
Path=/root/test
[ -d $Path ] || mkdir $Path
filename1=123.txt
int=1400
while(($int<=1500))
do
  filename="a"$int""
  cp $Path/$filename1 $Path/$filename
  let "int++"
done

IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:号外——Liunx 增加磁盘不重启服务器的 2 种方法
喜欢 (6)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址