centos 6 如何动态识别新插入物理磁盘(一)

在运维工作中,我们经常会遇到生产环境服务器磁盘容量不够,我们自然会想到扩容,扩服务器,或其他的方式,但今天讨论的是在单台服务器实现热插拨磁盘,并且无需要重启服务器实现对新插入的磁盘进行格式化。

在接下来的描述中会从三维度考虑实现,一是直接对新插入磁盘作为独立硬盘独立分区使用、二是对新插入磁盘作为LVM扩展使用、三是对新插入磁盘加入现有的raid陈列中,并且扩展阵列组容量。

环境:
os:centos6.5 x86_64
磁盘要求:scsi 类型
编码要求:熟悉shell

一、直接对新插入磁盘作为独立硬盘独立分区使用

在描述方法之前,我想列出关于SCSI硬盘的一点小知识,SCSI最典型的特性就是支持热插拨,一般在总线上挂载8块或16块硬盘。

在操作系统中,与scsi 文件相关的目录和文件如下(注意:并非全部)
# /sys/block  directory
# /sys/class/scsi_host/ direcotry
# /proc/scsi/scsi file
补充:如果想了解/sys目录 请查看《深入理解linux内核》第四版 sysfs 文件系统章节,也可以看 https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/

在centos6 操作系统中,管理设备的udev进程,关于udev,我仅建议大家看看/etc/udev/目录组成,了解含义。

写了这么多,如何操作呢?流程如下:

1. 插入SCSI磁盘到服务器
2.执行更新scsi_host执行
   echo "- - -" > /sys/class/scsi_host/host0/scan
   如果有多个hostx ,可以使用for循环执行即可。
3.使用磁盘工具查看是否新磁盘已经检测到
   1)如果硬盘小于2T ,可以使用fdisk
   2)如果硬盘大于等于2T 建议直接使用parted
4. 分区格式化
5. 按需要扩展容量
   1)使用LVM 扩展
   2)加入现在有磁盘阵列
为了大家方便,我附上一个简单脚本,如果有不明白之处,咱们共同探讨,明日描述LVM扩展和加入磁盘阵列。

#!/bin/bash
# author: afa
# description: scan new physical disk and tell linux kernel to know it.
# date: 2016.12.23 12:00
# 
#
# for scsi disk and network devices.
# related file 
# /sys/block  directory
# /sys/class/scsi_host/ direcotry
# /proc/scsi/scsi file 

. /etc/profile

scan_file="scan"
host_scan_dir="/sys/class/scsi_host/"

function ScanNewPhysicalDisk()
    hosts_devices=$(ls -l $host_scan_dir)
    for host_device in $hosts_devices
    do
        echo "- - -" > $host_scan_dir/$host_device/$scan_file
    done
    echo "scan success."
    echo "please use fdisk or parted which effect from you disk size, more 2T disk, I suggest you to use parted tool"
    
function ScanNetworkDevice()
    start_udev
    echo "find out and check it"
    
function AddSingleDevice()
    local scsi_device_id=$1
    local channel_id=$2
    local id=$3
    local lun=${a:-0}
    echo "scsi add-single-device $scsi_device_id $channel_id $id $lun" > /proc/scsi/scsi
    
function RemoveSingleDevice()
    local scsi_device_id=$1
    local channel_id=$2
    local id=$3
    local lun=${a:-0}
    echo "scsi remove-single-device $scsi_device_id $channel_id $id $lun" > /proc/scsi/scsi
    
function main()
    if [[ "$1" == "scan" ]]:then
        ScanNewPhysicalDisk


为了交流方便,附件上传,请大家交流使用,原创文章,转载请注明出处。

你可能感兴趣的:(硬盘设备管理)