Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

25.9. 删除存储设备

在删除对存储设备本身的访问前,建议先备份设备上的数据。之后,刷新 I/O ,并删除对该设备的所有操作系统引用(如下所述)。如果该设备使用多路径,则对多路径"伪设备"(第 25.8.2 节 “全球标识符(WWID)”)以及代表该设备路径的每个标识符进行此操作。如果您只删除多路径设备的路径,则其他路径会保留,那么这个流程会很简单,如 第 25.11 节 “添加存储设备或路径” 所述。
当系统面临内存压力时,不建议移除存储设备,因为 I/O 刷新会增加负载。要确定内存压力的级别,请运行命令 vmstat 1 100; 不建议删除设备,如果:
  • 可用内存小于每 100 超过 10 个样本的 5%( 可用 命令也可用于显示总内存)。
  • 交换处于活跃状态( vmstat 输出中的非零 siso 列)。
删除对设备的所有访问的一般流程如下:

过程 25.11. 确保彻底的设备删除

  1. 根据需要,关闭设备的所有用户,并备份设备数据。
  2. 使用 umount 卸载挂载该设备的任何文件系统。
  3. 使用它的任何 md 和 LVM 卷中删除该设备。如果设备是 LVM 卷组的成员,那么可能需要使用 pvmove 命令将数据移出设备,然后使用 vgreduce 命令删除物理卷,以及(可选) pvremove 从磁盘中删除 LVM 元数据。
  4. 运行 multipath -l 命令来查找配置为多路径设备 的设备列表。如果该设备被配置为多路径设备,请运行 multipath -f device 命令来清除任何未完成的 I/O 并删除多路径设备。
  5. 将未完成的 I/O 刷新到已用路径。这对 raw 设备非常重要,其中没有 umountvgreduce 操作来导致 I/O 刷新。只有在出现以下情况时,才需要执行此步骤:
    • 该设备没有配置为多路径设备,或者
    • 该设备被配置为多路径设备,I/O 是在过去某个点直接发布到其独立路径。
    使用以下命令刷新任何未完成的 I/O:
    # blockdev --flushbufs device
  6. 删除对设备的基于路径名称的任何引用,如 /dev/sd/dev/disk/by-path 或系统上的 major:minor 号、应用程序、脚本或工具。这对于确保以后添加的不同设备不会被误认为是当前设备非常重要。
  7. 最后,从 SCSI 子系统中删除该设备的每个路径。为此,请使用命令 echo 1 > /sys/block/device-name/device/delete,例如,其中 device-name 可以是 sde
    此操作的另一个变化是 echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete,其中 h 是 HBA 号,c 是 HBA 上的频道,t 是 SCSI 目标 ID,l 是 LUN。
    注意
    这些命令的旧形式 echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi 已被弃用。
您可以从各种命令(如 lsscsiscsi_idmultipath -lls -l )确定设备的 device-name、HBA 号、HBA 通道、SCSI 目标 ID 和 LUN。
执行 过程 25.11, “确保彻底的设备删除” 后,可以从正在运行的系统中安全地删除设备。在这样做的同时,不需要停止到其他设备的 I/O。
不建议其它流程,如物理删除设备,然后重新扫描 SCSI 总线(如 第 25.12 节 “扫描存储互连” 中所述),来更新操作系统状态以反映更改。这会导致因为 I/O 超时造成的延迟,设备可能会被意外删除。如果需要对互连执行重新扫描,必须在 I/O 暂停时完成,如 第 25.12 节 “扫描存储互连” 所述。