Linux上磁盘热插拔是什么意思?

发布时间 - 2017-06-23 00:00:00    点击率:

首先获取scsi设备的信息。

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

有些操作系统没有lsscsi命令,则可以使用下面的方法获取scsi设备信息。

[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/total 0lrwxrwxrwx 1 root root    0 Jun 22 17:29 2:0:0:0 -> ../../../../devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0--w------- 1 root root 4096 Jun 22 17:29 bind--w------- 1 root root 4096 Jun 22  2017 uevent--w------- 1 root root 4096 Jun 22 17:29 unbind
[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/2\:0\:0\:0/block/total 0drwxr-xr-x 10 root root 0 Jun 22  2017 sda

然后查看/proc/scsi/scsi文件,获取对应scsi设备的详细信息。

[root@server2 ~]# cat /proc/scsi/scsi

Attached devices:Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware SATA CD01 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05Host: scsi2 Channel: 00 Id: 01 Lun: 00
  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02

在此处,有两块直连(direct-access)的scsi磁盘,一块通过光驱cd-rom连接的光盘。我们只考虑scsi磁盘,所以这两块磁盘在scsi中的定位符为2:0:0:0和2:0:1:0。如果继续插入一块盘,那么新盘在scsi中的定位符为2:0:2:0,这个数值串非常重要。

1.1 热插

在向计算机中插入一块磁盘后,内核因为识别不了它所以不会产生任何事件通知,因此在/sys目录中不会产生任何文件,任何工具也就读取不了它。重启系统肯定是可以解决的,但是Linux支持热插。

热插新盘的方式是向/proc/scsi/scsi中写入新scsi设备的信息。方式如下:

echo "scsi add-single-device a b c d" >/proc/scsi/scsi

其中:

      a == hostadapter id (first one being 0)

      b == SCSI channel on hostadapter (first one being 0)

      c == ID

      d == LUN (first one being 0)

例如上面的例子,应该添加如下信息:

[root@server2 ~]# echo "scsi add-single-device 2:0:2:0" >/proc/scsi/scsi

当然,重新扫描scsi总线也可以实现热插的功能。因为上面的例子中,scsi host id为2(即host2),所以扫描的是host2,这样host2这个scsi上的所有设备都会被重新扫描。

[root@server2 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan

如果不知道要扫描哪个host,直接使用循环全部扫描。

[root@xuexi ~]# for i in `ls /sys/class/scsi_host/`;do echo "- - -" >/sys/class/scsi_host/$i/scan;done

热插之后,fdisk -l等命令就可以识别到该磁盘了。

1.2 热拔

热拔磁盘的方式是在/proc/scsi/scsi中移除对应scsi设备的信息。方式如下:

echo "scsi remove-single-device a b c d" >/proc/scsi/scsi

例如删除2:0:2:0这块磁盘。

[root@server2 ~]# echo "scsi remove-single-device 2 0 2 0" >/proc/scsi/scsi

因为要删除的设备已经存在,/sys中已经有它完整的信息,所以也从其自身设备上进行删除。

首先查看scsi设备信息。

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda
[2:0:1:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sdb
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

 例如要删除/dev/sdb,即2:0:1:0。先看看它的文件信息。

[root@server2 ~]# ls /sys/bus/scsi/drivers/sd/2\:0\:1\:0/block/                              evt_lun_change_reported             model                               scsi_level
bsg/                                evt_media_change                    power/                              statedelete                              evt_mode_parameter_change_reported  queue_depth                         subsystem/device_blocked                      evt_soft_threshold_reached          queue_ramp_up_period                timeout
device_busy                         generic/                            queue_type                          type
dh_state                            iocounterbits                       rescan                              uevent
driver/                             iodone_cnt                          rev                                 unpriv_sgio
eh_timeout                          ioerr_cnt                           scsi_device/                        vendor
evt_capacity_change_reported        iorequest_cnt                       scsi_disk/                          vpd_pg80
evt_inquiry_change_reported         modalias                            scsi_generic/                       vpd_pg83

在其中有3个文件:delete、rescan和state。其中state记录了该设备是否正在运行中。而delete和rescan文件则用于删除和重新扫描该设备。

例如,删除该设备,即热拔。

[root@server2 ~]# echo 1 > /sys/bus/scsi/drivers/sd/2\:0\:1\:0/delete

 


# linux  # 新盘  # 的是  # 是在  # 也就  # 可以实现  # 非常重要  # 这块  # 则可  # 重启  # 两块 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云域名上完成建站全流程?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  韩国服务器如何优化跨境访问实现高效连接?  高端企业智能建站程序:SEO优化与响应式模板定制开发  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  轻松掌握MySQL函数中的last_insert_id()  北京专业网站制作设计师招聘,北京白云观官方网站?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  浅析上传头像示例及其注意事项  如何自定义建站之星模板颜色并下载新样式?  如何在景安服务器上快速搭建个人网站?  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何记录自定义日志?(Log频道配置)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Python正则表达式进阶教程_复杂匹配与分组替换解析  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel storage目录权限问题_Laravel文件写入权限设置  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在万网ECS上快速搭建专属网站?  如何在阿里云服务器自主搭建网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  焦点电影公司作品,电影焦点结局是什么?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  EditPlus中的正则表达式实战(6)  QQ浏览器网页版登录入口 个人中心在线进入  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  在Oracle关闭情况下如何修改spfile的参数  JavaScript如何实现音频处理_Web Audio API如何工作?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何用花生壳三步快速搭建专属网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Python高阶函数应用_函数作为参数说明【指导】  如何在万网开始建站?分步指南解析  浅谈redis在项目中的应用  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  使用豆包 AI 辅助进行简单网页 HTML 结构设计  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  香港服务器部署网站为何提示未备案?