在操作系统运行时,通常需要添加,删除或重新调整存储设备的大小,而无需重新引导。本章概述在系统运行时可用于在Red Hat Enterprise Linux 7主机系统上重新配置存储设备的过程。它涵盖了iSCSI和光纤通道存储互连; 其他互连类型可能会在未来添加。
本章重点介绍如何添加,删除,修改和监视存储设备。它没有详细讨论光纤通道或iSCSI协议。有关这些协议的更多信息,请参阅其他文档。
本章引用了各种sysfs
对象。红帽建议sysfs
对象名称和目录结构在主要的红帽企业Linux版本中可能会发生变化。这是因为上游Linux内核不提供稳定的内部API。有关如何以sysfs
可移动方式引用对象的指导,请参阅内核源代码树中的文档以获取指导。/usr/share/doc/kernel-doc-*version*/Documentation/sysfs-rules.txt
在线存储重新配置必须小心。过程中的系统故障或中断可能会导致意外的结果。红帽建议您在更改操作期间尽可能减少系统负载。这将减少I / O错误,内存不足错误或在配置更改期间发生的类似错误的可能性。以下部分提供了更具体的指导方针。
另外,Red Hat建议您在重新配置在线存储之前备份所有数据。
Target 设置
帽企业版Linux 7使用targetcli
shell作为查看,编辑和保存Linux-IO目标配置的前端,而无需直接操作内核目标的配置文件。targetcli
工具是一个命令行界面,允许管理员将由文件,卷,本地SCSI设备或RAM磁盘支持的本地存储资源导出到远程系统。targetcli
工具具有基于树的布局,包含内置的选项卡完成,并提供完整的自动完成支持和内联文档。
targetcli
层次结构并不总是与内核接口完全匹配,因为targetcli
在可能的情况下被简化了。
要确保所做的更改targetcli
是持久性的,请启动并启用目标服务:
1 | # systemctl start target |
安装和运行targetcli
要安装targetcli
, 使用:
1 | # yum install targetcli |
启动 target
服务:
1 | # systemctl start target |
配置target
开机启动:
1 | # systemctl enable target |
使用targetcli
命令,然后使用该ls
命令进行树形界面的布局:
1 | # targetcli |
例如,在红帽企业版Linux 7.0中,使用targetcli
Bash命令targetcli iscsi/ create
不起作用,并且不会返回错误。从红帽企业版Linux 7.1开始,提供了一个错误状态代码来使用targetcli
shell脚本更有用。
创建一个Backstore
后台支持在本地机器上存储导出的LUN数据的不同方法。创建一个存储对象定义了backstore使用的资源。
在红帽企业Linux 6中,术语’backing-store’用来指代创建的映射。然而,为了避免混淆“后端存储”的各种方式,在红帽企业版Linux 7中,术语“存储对象”是指创建的映射,“后端”用于描述不同类型的后备设备。
LIO支持的后端设备是:
FILEIO(Linux文件备份存储)
FILEIO存储对象可以支持
write_back
或write_thru
操作。在write_back
使本地文件系统缓存。这样可以提高性能,但会增加数据丢失的风险。建议使用write_back=false
禁用,write_back
以支持write_thru
。
要创建文件夹存储对象,请运行该命令。例如: /backstores/fileio create *file_name file_location file_size* write_back=false
例如:
1 | /> /backstores/fileio create file1 /tmp/disk1.img 200M write_back=false |
BLOCK(Linux BLOCK设备)
块驱动程序允许使用任何在
/sys/block
LIO中使用的块设备。这包括物理设备(例如,HDD,SSD,CD,DVD)和逻辑设备(例如软件或硬件RAID卷或LVM卷)。
BLOCK后台通常提供最好的性能。
要使用/dev/sdb
块设备创建BLOCK backstore ,请使用以下命令:
1 | /> /backstores/block create name=block_backend dev=/dev/sdb |
PSCSI(Linux直通SCSI设备)
任何支持直接传递SCSI命令而无需SCSI模拟的存储对象,以及与lsscsi一起出现的基础SCSI设备
/proc/scsi/scsi
(如SAS硬盘驱动器)都可以配置为后端存储。此子系统支持SCSI-3及更高版本。PSCSI只能由高级用户使用。高级SCSI命令(如用于量测逻辑单元分配(ALUAs)或永久保留(例如VMware ESX和vSphere使用的那些))通常不会在设备固件中实现,并可能导致故障或崩溃。如有疑问,请使用BLOCK进行生产设置。
要为物理SCSI设备创建PSCSI后端存储,在本例中使用的
TYPE_ROM
设备/dev/sr0
使用:
1 | backstores/pscsi/ create name=pscsi_backend dev=/dev/sr0 |
内存拷贝RAM磁盘(Linux RAMDISK_MCP)
内存拷贝RAM磁盘(
ramdisk
)为RAM磁盘提供完整的SCSI模拟,并为启动器使用内存拷贝分离内存映射。这为多会话提供了能力,并且对于用于生产目的的快速,易变的大容量存储特别有用。要创建1GB RAM磁盘后端存储,请使用以下命令:
1 | /> backstores/ramdisk/ create name=rd_backend size=1GB |
创建 iSCSI Target
要创建一个iSCSI目标:
运行
targetcli
.进入iSCSI配置路径:
1 | /> iscsi/ |
注意
该cd
命令也被接受来改变目录,以及简单地列出要移入的路径。
- 使用默认目标名称创建一个iSCSI目标。
1 | /iscsi> create |
或者使用指定的名称创建一个iSCSI目标。
1 | /iscsi > create iqn.2006-04.com.example:444 |
- 验证
ls
在列出目标时新创建的目标是否可见
1 | /iscsi > ls |
配置 iSCSI 门户
要配置iSCSI门户,必须首先创建iSCSI目标并将其与TPG相关联。
Note
从Red Hat Enterprise Linux 7.1创建iSCSI目标时,也会创建一个默认门户。此门户设置为使用默认端口号(即0.0.0.0:3260)监听所有IP地址 。删除此项并只添加指定的门户,请使用 /iscsi/*iqn-name*/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260
创建一个新门户 .
创建一个iSCSI门户
- 进入TPG
1 | /iscsi> iqn.2006-04.example:444/tpg1/ |
有两种方法可以创建一个门户网站:创建一个默认的门户网站,或创建一个门户网站来指定要监听的IP地址。
创建默认门户使用默认的iSCSI端口3260,并允许目标侦听该端口上的所有IP地址。
1 | /iscsi/iqn.20...mple:444/tpg1> portals/ create |
要创建指定要侦听的IP地址的门户,请使用以下命令。
1 | /iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137 |
- 使用
ls
命令验证新创建的门户是否可见。
1 | /iscsi/iqn.20...mple:444/tpg1> ls |
配置LUN
要配置LUN,请先创建存储对象。
配置LUN
- 创建已经创建的存储对象的LUN。
1 | /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/ramdisk1 |
- 显示更改.
1 | /iscsi/iqn.20...mple:444/tpg1> ls |
请注意,与tgtd
红帽企业版Linux 6中使用的情况相比,默认的LUN名称从0开始,而不是1 。
默认情况下,创建具有读写权限的LUN。如果在创建ACL后添加了新的LUN,该LUN将自动映射到所有可用的ACL。这可能会导致安全风险。使用以下过程以只读方式创建LUN。
创建一个只读LUN
- 要创建具有只读权限的LUN,请首先使用以下命令:
1 | /> set global auto_add_mapped_luns=false |
这可以防止将LUN自动映射到现有的ACL,从而允许手动映射LUN。
- 接下来,使用该命令手动创建LUN ,
iscsi/*target_iqn_name*/tpg1/acls/*initiator_iqn_name*/ create mapped_lun=*next_sequential_LUN_number* tpg_lun_or_backstore=*backstore*write_protect=1
.
1 | /> iscsi/iqn.2015-06.com.redhat:target/tpg1/acls/iqn.2015-06.com.redhat:initiator/ create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1 |
mapped_lun1行现在在末尾有(ro)(与mapped_lun0(rw)不同),说明它是只读的。
配置ACL
为将要连接的每个启动器创建一个ACL。这会在启动器连接时强制进行身份验证,从而只允许向每个启动器公开LUN。通常每个启动器都可以独占访问LUN。目标和发起者都有唯一的识别名称。必须知道启动程序的唯一名称才能配置ACL。对于open-iscsi启动器,可以在 /etc/iscsi/initiatorname.iscsi
找到。
配置ACL
- 进入acls目录。
1 | /iscsi/iqn.20...mple:444/tpg1> acls/ |
- 创建一个ACL。要么使用启动器中的启动器名称
/etc/iscsi/initiatorname.iscsi
,要么使用更容易记住的名称, 例如:
1 | /iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888 |
上面的例子的行为取决于使用的设置。在这种情况下,使用全局设置auto_add_mapped_luns
。这会自动将LUN映射到任何创建的ACL。
- 显示更改.
1 | /iscsi/iqn.20...444/tpg1/acls> ls |
配置以太网光纤通道 (FCoE) Target
确认基本FCoE设置已完成,并fcoeadm -i
显示配置的FCoE接口。
配置FCoE目标
设置FCoE目标需要安装
targetcli
包及其相关性。在FCoE接口上创建FCoE目标实例。
1 | /> tcm_fc/ create 00:11:22:33:44:55:66:77 |
如果系统上存在FCoE接口,则选项卡完成后将create
列出可用接口。如果没有,请确保fcoeadm -i
显示活动接口。
将一个backstore映射到目标实例。
将Backstore映射到目标实例的示例
1 | /> tcm_fc/00:11:22:33:44:55:66:77 |
1 | /> luns/ create /backstores/fileio/example2 |
- 允许从FCoE启动器访问LUN。
1 | /> acls/ create 00:99:88:77:66:55:44:33 |
LUN现在应该可以被该启动器访问。
要使更改在重新启动时保持不变,请在出现提示时使用
saveconfig
命令并键入yes
。如果没有这样做,配置将在重启后丢失。通过输入
exit
或输入 ctrl+D 退出targetcli
使用 targetcli
删除对象
要删除一个backstore,请使用以下命令:
1 | /> /backstores/backstore-type/backstore-name |
要删除iSCSI目标的某些部分(如ACL),请使用以下命令:
1 | /> /iscsi/iqn-name/tpg/acls/ delete iqn-name |
要删除整个目标(包括所有ACL,LUN和门户),请使用以下命令:
1 | /> /iscsi delete iqn-name |
创建一个 ISCSI INITIATOR
在红帽企业版Linux 7中,默认情况下,iSCSI服务是延迟启动的:运行iscsiadm
命令后服务启动。
创建一个iSCSI启动器
- 安装
iscsi-initiator-utils
:
1 | # yum install iscsi-initiator-utils |
- 如果ACL 中给出了自定义名称,则相应地修改该
/etc/iscsi/initiatorname.iscsi
文件。例如:
1 | # cat /etc/iscsi/initiatorname.iscsi |
- 发现 target:
1 | # iscsiadm -m discovery -t st -p target-ip-address |
- target 服务器上的TPG节点中设置用户创建的ACL:
1 | /iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1 |
`exit` 退出
- 使用在步骤3中发现的目标IQN登录到目标:
1 | # iscsiadm -m node -T iqn.2006-04.com.example:3260 -l |
光纤通道
Fibre Channel API
以下是/sys/class/
包含用于提供用户空间API的文件的目录列表。在每个项目中,主机号码由*H*
总线号*B*
,目标*T*
,逻辑单元号(LUN)*L*
和远程端口号指定*R*
。
Transport: /sys/class/fc_transport/target
H
: : B
: T
/
port_id
— 24位端口ID /地址node_name
— 64位节点名称port_name
— 64位端口名称
Remote Port: /sys/class/fc_remote_ports/rport-H:B-R
port_id
node_name
port_name
dev_loss_tmo
: 控制scsi设备何时从系统中移除。之后dev_loss_tmo
触发器, scsi设备被删除.multipath.conf
, 您可以设置dev_loss_tmo
为infinity
, 其值设置为 2,147,483,647 seconds, 或 68 years, 并且是dev_loss_tmo
最大值 .在红帽企业版Linux 7中,如果不设置该
fast_io_fail_tmo
选项,dev_loss_tmo
则上限为600秒。默认情况下,fast_io_fail_tmo
如果multipathd
服务正在运行,在Red Hat Enterprise Linux 7中设置为5秒; 否则,设置为off
。fast_io_fail_tmo
:指定在将链接标记为“不良”之前等待的秒数。一旦链接被标记为坏,现有的正在运行的I / O或其相应路径上的任何新I / O都会失败。如果I / O处于阻塞队列中,则不会失败,直到
dev_loss_tmo
到期并且队列被解除阻塞。如果
fast_io_fail_tmo
设置为任何值off
,dev_loss_tmo
则不封顶。如果fast_io_fail_tmo
设置为off
,则在将设备从系统中移除之前,不会发生I / O故障。如果fast_io_fail_tmo
设置为一个数字,则当fast_io_fail_tmo
超时触发时,I / O将立即失败。
Host: /sys/class/fc_host/host*H*/
port_id
issue_lip
: 指示驱动程序重新发现远程端口。
本地光纤通道驱动程序和功能
红帽企业Linux 7附带下列本地光纤通道驱动程序:
lpfc
qla2xxx
zfcp
bfa
qla2xxx驱动程序启动器模式默认运行。要在Linux-IO上使用qla2xxx,请使用相应的qlini_mode模块参数启用光纤通道目标模式。
首先,确保已安装qla设备的固件包,如ql2200-固件或类似软件。
要启用目标模式,请将以下参数添加到/usr/lib/modprobe.d/qla2xxx.conf
1 | options qla2xxx qlini_mode=disabled |
然后,使用该dracut -f
命令重建初始ramdisk(initrd
),然后重新引导系统以使更改生效。
光纤通道API功能
lpfc |
qla2xxx |
zfcp |
bfa |
|
---|---|---|---|---|
Transport port_id |
X | X | X | X |
Transport node_name |
X | X | X | X |
Transport port_name |
X | X | X | X |
Remote Port dev_loss_tmo |
X | X | X | X |
Remote Port fast_io_fail_tmo |
X | X | X | X |
Host port_id |
X | X | X | X |
Host issue_lip |
X | X | X | |
通过以太网接口配置光纤通道
设置和部署以太网光纤通道(FCoE)接口需要两个包:
fcoe-utils
lldpad
安装这些软件包后,请执行以下步骤以通过虚拟LAN(VLAN)启用FCoE:
配置以太网接口以使用FCoE
- 要配置新的VLAN,请复制现有的网络脚本,
/etc/fcoe/cfg-eth0
, a并将名称更改为支持FCoE的以太网设备。
1 | # cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-ethX |
如果您希望设备在启动时自动加载, 在相应的文件中进行设置
ONBOOT=yes
通过运行以下命令来 启动数据中心桥接守护进程 (
dcbd
) :
1 | # systemctl start lldpad |
对于实现硬件DCBX客户端的网络接口,请跳过此步骤。
对于需要软件DCBX客户端的接口,通过运行以下命令在以太网接口上启用数据中心桥接:
1 | # dcbtool sc ethX dcb on |
然后,运行以下命令在以太网接口上启用FCoE:
1 | # dcbtool sc ethX app:fcoe e:1 |
请注意,只有dcbd
在以太网接口的设置没有改变的情况下,这些命令才有效。
- 现在使用以下命令加载FCoE设备
1 | # ip link set dev ethX up |
- 使用以下命令启动FCoE:
1 | # systemctl start fcoe |
如果Fabric上的所有其他设置都正确,则FCoE设备即将出现。要查看已配置的FCoE设备,请运行:
1 | # fcoeadm -i |
在正确配置以太网接口以使用FCoE之后,Red Hat建议您设置FCoE并lldpad
在启动时运行该服务。为此,请使用systemctl实用程序:
1 | # systemctl enable lldpad |
1 | # systemctl enable fcoe |
运行该# systemctl stop fcoe
命令会停止守护程序,但不会重置FCoE接口的配置。为此,请运行该# systemctl -s SIGHUP kill fcoe
命令。
从红帽企业版Linux 7开始,网络管理器可以查询和设置具有DCB功能的以太网接口的DCB设置。
配置FCOE接口以在引导时自动挂载
您可以通过udev
规则autofs
,和其他类似的方法安装新发现的磁盘。然而,有时候,特定的服务可能需要在启动时挂载FCoE磁盘。在这种情况下,应在服务运行后立即安装FCoE磁盘,fcoe
并在启动需要FCoE磁盘的任何服务之前安装。
要将FCoE磁盘配置为在引导时自动挂载,请将适当的FCoE挂载代码添加到服务的启动脚本中fcoe
。该fcoe
启动脚本/etc/init.d/fcoe
。
无论您使用的是简单格式的FCoE磁盘,LVM还是多路径设备节点,FCoE安装代码对于每个系统配置都是不同的。
例25.2。FCoE安装代码
以下是通过通配符指定安装文件系统的FCoE安装代码示例/etc/fstab
:
1 | mount_fcoe_disks_from_fstab() |
在服务脚本启动守护进程之后 mount_fcoe_disks_from_fstab
函数应该被调用。 fcoe
脚本启动 fcoemon
守护进程之后. 这将挂载以下路径指定的FCoE磁盘
1 | /dev/disk/by-path/fc-0xXX:0xXX /mnt/fcoe-disk1 ext3 defaults,_netdev 0 0 |
与项fc-
和_netdev
子串启用mount_fcoe_disks_from_fstab
功能,以确定FCoE的磁盘挂载项。
ISCSI
本节介绍iSCSI API和iscsiadm
实用程序。在使用该iscsiadm
实用程序之前,iscsi-initiator-utils
先运行安装软件包yum install iscsi-initiator-utils
。
在红帽企业版Linux 7中,默认情况下iSCSI服务延迟启动。如果root不在iSCSI设备上,或者没有标有节点的节点,node.startup = automatic
则在iscsiadm
运行需要启动iscsid或iscsi内核模块的命令之前,iSCSI服务才会启动。例如,运行发现命令iscsiadm -m discovery -t st -p ip:port
将导致iscsiadmin启动iSCSI服务。
要强制运行iscsid守护程序并加载iSCSI内核模块,请运行service iscsid force-start
。
iSCSI API
要获取有关运行会话的信息,请运行:
1 | # iscsiadm -m session -P 3 |
此命令显示会话/设备状态,会话ID(sid),一些协商参数以及可通过会话访问的SCSI设备。
对于较短的输出(例如,仅显示sid到节点的映射),请运行:
1 | # iscsiadm -m session -P 0 |
或者
1 | # iscsiadm -m session |
这些命令以下列格式打印正在运行的会话列表:
1 | driver [sid] target_ip:port,target_portal_group_tag proper_target_name |
iscsisadm -m session命令的输出
1 | # iscsiadm -m session |
持久命名
红帽企业Linux提供了许多方法来识别存储设备。使用正确的选项识别每个设备时很重要,以避免无意中访问错误的设备,特别是在安装或重新格式化驱动器时
主要和次要的存储设备
由sd
驱动程序管理的存储设备在内部由一系列主要设备编号及其相关次要编号进行标识。用于此目的的主要设备编号不在连续的范围内。每个存储设备都由一个主号码和一系列次号码来表示,这些号码用来标识设备中的整个设备或分区。分配给设备的主号码和次号码以及形式中的号码之间存在直接联系。只要驾驶员检测到新设备,就会分配可用的主号码和次号码范围。无论何时将设备从操作系统中移除,主要号码和次要号码范围都被释放以供以后再次使用。
主要和次要号码范围和相关sd
名称在检测到时分配给每个设备。这意味着,sd
如果设备检测顺序发生变化,则主号码和次号码范围以及相关联的名称之间的关联可能会发生变化。尽管在某些硬件配置(例如,使用内部SCSI控制器和磁盘的SCSI目标ID由其机箱内的物理位置分配)的情况下,这种情况并不常见。发生这种情况的例子如下:
- 磁盘可能无法启动或响应SCSI控制器。这将导致它不被正常的设备探测器检测到。系统将无法访问磁盘,并且后续设备将具有其主要和次要编号范围,包括关联的
sd
名称向下移动。例如,如果sdb
没有检测到通常被称为的磁盘,则通常被称为的磁盘sdc
会显示为sdb
。 - SCSI控制器(主机总线适配器或HBA)可能无法初始化,导致连接到该HBA的所有磁盘不能被检测到。连接到随后探测到的HBA的任何磁盘将被分配不同的主号码范围和次号码范围,以及不同的关联
sd
名称。 - 如果系统中存在不同类型的HBA,驱动程序初始化的顺序可能会改变。这将导致连接到这些HBA的磁盘以不同的顺序被检测到。如果HBA移动到系统上不同的PCI插槽,也会发生这种情况。
- 例如,由于存储阵列或中断交换机断电,在探测存储设备时,通过光纤通道,iSCSI或FCoE适配器连接到系统的磁盘可能无法访问。当系统在电源故障后重新启动时,如果存储阵列比系统启动需要更长的时间才能联机,则可能会发生这种情况。虽然某些光纤通道驱动程序支持一种机制来指定永久SCSI目标ID到WWPN映射,但这不会导致主要和次要编号范围以及相关联的
sd
名称被保留,只会提供一致的SCSI目标ID编号。
这些原因使得sd
在引用诸如/etc/fstab
文件中的设备时使用主要和次要号码范围或相关名称是不合需要的。可能会装入错误的设备并导致数据损坏。
然而,有时sd
甚至在使用另一种机制时(例如,当设备报告错误时)仍然需要引用这些名称。这是因为Linux内核sd
在关于设备的内核消息中使用了名称(还有SCSI主机/通道/目标/ LUN元组)。
全球标识符(WWID)
的全球标识符(WWID)可以可靠地识别设备中使用。这是一个持久的,与系统无关的ID,SCSI标准要求所有的SCSI设备。WWID标识符保证对于每个存储设备都是唯一的,并且独立于用于访问设备的路径。
此标识符可以通过发出SCSI查询获取设备标识重要产品数据(页面0x83
)或设备序列号(页面0x80
)来获得。从这些WWID到当前/dev/sd
名称的映射可以在/dev/disk/by-id/
目录中维护的符号链接中看到。
例如,具有页面0x83
标识符的设备将具有:
1 | scsi-3600508b400105e210000900000490000 -> ../../sda |
或者,具有页面0x80
标识符的设备将具有:
1 | scsi-SSEAGATE_ST373453LW_3HW1RHM6 -> ../../sda |
红帽企业版Linux会自动维护从该系统中基于WWID的设备名称到当前/dev/sd
名称的正确映射。应用程序可以使用该/dev/disk/by-id/
名称来引用磁盘上的数据,即使设备的路径发生更改,甚至在从不同系统访问设备时也是如此。
如果从系统到设备有多条路径,则DM多路径使用WWID来检测此路径。DM多路径然后在/dev/mapper/wwid
目录中呈现单个“伪装置” ,例如/dev/mapper/3600508b400105df70000e00000ac0000
。
命令multipath -l
显示映射到非永久标识符:,名称和编号。
1 | 3600508b400105df70000e00000ac0000 dm-2 vendor,product |
DM多路径会自动维护每个基于WWID的设备名称/dev/sd
与系统上相应名称的正确映射。这些名称在路径更改中保持不变,并且在从不同系统访问设备时是一致的。
使用DM Multipathuser_friendly_names
特性时,WWID被映射到表单的名称。 默认情况下,该映射在文件 /etc/multipath/bindings
中维护. 只要该文件被保留,这些名称就是持久的。
除了系统提供的这些持久名称之外,您还可以使用udev
规则来实现您自己的持久化名称,并将其映射到存储器的WWID。
设备名称管理由udev
机制/dev/disk/by-*
该udev
机制由三个主要组成部分组成:
The kernel
生成添加,删除或更改设备时发送到用户空间的事件。
The
udevd
service接收事件。
The
udev
rulesSpecifies the action to take when the
udev
service receives the kernel events.指定udev
服务收到内核事件时要执行的操作。
这种机制用于Linux中的所有类型的设备,而不仅仅用于存储设备。对于存储设备,红帽企业版Linux包含的udev
规则可以在/dev/disk/
目录中创建符号链接,允许存储设备的内容,唯一标识符,序列号或用于访问设备的硬件路径。
/dev/disk/by-label/
此目录中的条目提供了一个符号名称,该名称通过存储在设备上的内容(即数据)中的标签来引用存储设备。的BLKID实用程序用于从所述设备读取数据并确定一个名称(即,标记)的装置。例如:
1 | /dev/disk/by-label/Boot |
该标签还可以用于/etc/fstab
使用以下语法引用设备:
1 | LABEL=Boot |
/dev/disk/by-uuid/
此目录中的条目提供了一个符号名称,该名称通过存储在设备上的内容(即数据)中的唯一标识符引用存储设备。的BLKID实用程序用于从设备读取数据,将获得的唯一标识符(即,UUID)的设备。例如:
1 | UUID=3e6be9de-8139-11d1-9106-a43f08d823a6 |
/dev/disk/by-id/
此目录中的条目提供了一个符号名称,该名称通过唯一标识符引用存储设备(与所有其他存储设备不同)。标识符是设备的属性,但不存储在设备上的内容(即数据)中。例如:
1 | /dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05 |
1 | /dev/disk/by-id/wwn-0x600508e000000000ce506dc50ab0ad05 |
该ID是从设备的全球ID或设备序列号获得的。这些/dev/disk/by-id/
条目还可以包括分区号。例如:
1 | /dev/disk/by-id/scsi-3600508e000000000ce506dc50ab0ad05-part1 |
/dev/disk/by-path/
此目录中的条目提供了一个符号名称,该名称通过用于访问设备的硬件路径引用存储设备,从对PCI层次结构中存储控制器的引用开始,包括SCSI主机,通道,目标和LUN号和可选的分区号码。虽然这些名字比使用主要和次要的数字更可取sd
名称时,必须谨慎使用以确保目标号码在光纤通道SAN环境中不发生更改(例如,通过使用持久性绑定),并且如果主机适配器移到其他位置,则更新名称的使用PCI插槽。此外,如果HBA无法探测,驱动程序以不同的顺序加载,或者系统上安装了新的HBA,SCSI主机号码可能会发生变化。旁路列表的一个例子是
1 | /dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0 |
这些/dev/disk/by-path/
条目还可以包括分区号,例如:
1 | /dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:0-part1 |
udev
设备命名约定的局限性
以下是udev
命名约定的一些限制。
- 在执行查询时设备可能不可访问,因为该
udev
机制可能依赖于在udev
处理udev
事件的规则时查询存储设备的能力。当设备不在服务器机箱中时,这很可能发生在光纤通道,iSCSI或FCoE存储设备上。 - 内核也可能
udev
随时发送事件,导致规则被处理,/dev/disk/by-*/
如果设备不可访问,可能导致链接被删除。 - 在
udev
事件发生时和处理时间之间可能存在一定的延迟,例如当检测到大量设备,并且用户空间udevd
服务需要一些时间来处理每个设备的规则时。这可能会导致内核检测到设备和/dev/disk/by-*/
名称可用之间的延迟。 - 诸如由规则调用的blkid之类的外部程序可能会在短时间内打开设备,使设备无法进入其他用途。
修改持久命名属性
尽管udev
命名属性是持久的,但是在系统重启时它们不会自行更改,有些也是可配置的。您可以为以下持久命名属性设置自定义值:
UUID
:文件系统UUIDLABEL
:文件系统标签
由于UUID
和LABEL
属性与文件系统有关,所以需要使用的工具取决于该分区上的文件系统。
- 要更改
UUID
或LABEL
XFS文件系统的属性,卸载文件系统,然后使用xfs_admin实用程序来更改属性:
1 | # umount /dev/device |
- 要改变
UUID
或LABEL
一个EXT4,ext3或ext2文件系统的属性,可以使用tune2fs实用程序:
1 | # tune2fs [-U new_uuid] [-L new_label] /dev/device |
将new_uuid替换为您要设置的UUID; 例如1cdfbc07-1c90-4984-b5ec-f61943f5ea50
。用标签替换new_label ; 例如backup_data
。
更改udev
属性发生在后台,可能需要很长时间。该udevadm settle
命令将等待更改完全注册,这将确保您的下一个命令能够正确使用新的属性。
在创建新设备之后,您还应该使用该命令; 例如,在使用分开的工具创建具有自定义PARTUUID
或PARTLABEL
属性的分区之后,或者在创建新的文件系统之后。
卸下存储设备
在删除对存储设备本身的访问之前,建议先从设备备份数据。之后,刷新I / O并删除所有操作系统对设备的引用。如果设备使用多路径,则对多路径“伪设备”和代表设备路径的每个标识符都执行此操作。如果只删除多路径设备的路径,其他路径将保留,则过程更简单,
当系统处于内存压力下时,不建议取出存储设备,因为I / O刷新将添加到负载。要确定内存压力的级别,运行命令vmstat 1 100
; 如果出现以下情况,建议不要拆除设备
- 空闲内存少于每100个10个以上采样总数的5%(该命令
free
也可用于显示总内存)。 - 交换处于活动状态(非零
si
和输出中的so
列vmstat
)。
删除对设备的所有访问的一般过程如下所示:
根据需要关闭设备的所有用户和备份设备数据。
使用
umount
卸载该安装的设备的文件系统。使用
md
从任何LVM卷中移除设备。如果设备是LVM卷组的成员,则可能需要使用pvmove
命令将数据从设备移出,然后使用vgreduce
命令移除物理卷,pvremove
从磁盘移除LVM元数据。如果设备使用多路径,请运行
multipath -l
并记下设备的所有路径。之后,使用multipath -f device
删除多路径设备。运行
blockdev --flushbufs device
刷新任何未完成的I / O到设备的所有路径。 这对于原始设备来说尤为重要。删除任何引用到设备的基于路径的名字一样
/dev/sd
,/dev/disk/by-path
或者major:minor
number,在应用程序,脚本,或在系统上的实用程序。这对确保未来添加的不同设备不会被误认为当前设备非常重要。最后,从SCSI子系统中删除设备的每个路径。要做到这一点,使用命令在那里可能,例如。
echo 1 > /sys/block/device-name/device/delete
此操作的另一个变体是:HBA号在哪里是HBA 上的通道,是SCSI目标ID,是LUN。
echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete
, .Note
这些命令的旧形式,
echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi
已被弃用。
可以判断device-name
,HBA数目,HBA信道,SCSI目标ID和LUN从各种命令,诸如设备 lsscsi
, scsi_id
, multipath -l
, and ls -l /dev/disk/by-
.
可以将设备从运行的系统中安全地移出。这样做不需要停止对其他设备的I/O。
其他过程,如物理移除设备,然后重新扫描SCSI总线,以使操作系统状态更新以反映更改。这会由于I / O超时而导致延迟,并且可能会意外删除设备。如果需要执行互连的重新扫描,则必须在I / O暂停时完成。
删除存储设备的路径
如果要删除使用多路径的设备的路径(不影响设备的其他路径),则一般过程如下所示:
删除存储设备的路径
删除该设备的基于路径名的任何引用,如
/dev/sd
或/dev/disk/by-path
或major:minor
数量,在应用程序,脚本,或在系统上的实用程序。这对确保未来添加的不同设备不会被误认为当前设备非常重要。使用离线路径
echo offline > /sys/block/sda/device/state
。这将导致发送到此路径上的设备的任何后续I / O立即失败。设备映射器多路径将继续使用设备的剩余路径。
从SCSI子系统中删除路径。为了这样做,使用命令,其中可以是,例如。
echo 1 > /sys/block/*device-name*/device/delete``*device-name*``sde
可以安全地从正在运行的系统中删除该路径。在此过程中不必停止I / O,因为设备映射器多路径将根据配置的路径分组和故障转移策略将I / O重新路由到其余路径。
其他程序,例如物理移除电缆,然后重新扫描SCSI总线以使操作系统状态更新以反映更改,不建议使用。这会由于I / O超时而导致延迟,并且可能会意外删除设备。如果需要执行互连的重新扫描,则必须在I / O暂停时完成。
添加存储设备或路径
添加设备时,请注意,系统分配给新设备的基于路径的设备名称(例如,/dev/sd
名称,major:minor
编号和/dev/disk/by-path
名称)可能以前已被移除的设备使用。因此,请确保已删除对基于路径的设备名称的所有旧引用。否则,新设备可能会被误认为旧设备。
添加存储设备或路径
添加存储设备或路径的第一步是在物理上启用对新存储设备的访问或对现有设备的新路径。这是通过在光纤通道或iSCSI存储服务器上使用特定于供应商的命令完成的。这样做时,请注意将显示给主机的新存储的LUN值。如果存储服务器是光纤通道,请注意存储服务器的全球通用节点名称(WWNN),并确定存储服务器上的所有端口是否存在单个WWNN。如果不是这种情况,请记下将用于访问新LUN的每个端口的全球端口名称(WWPN)。
接下来,让操作系统知道新的存储设备或现有设备的路径。建议使用的命令是:
1 | $ echo "c t l" > /sys/class/scsi_host/hosth/scan |
在前面的命令中,h
是HBA号,c
是HBA 上的通道,t
是SCSI目标ID,l
是LUN。
此命令的较早形式echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
已被弃用。
1. 在某些光纤通道硬件中,在执行*循环初始化协议*(LIP)操作之前,RAID阵列上新创建的LUN可能对操作系统不可见。
如果需要LIP,则需要在执行此操作时停止I / O。
2. 如果在RAID阵列上添加了新的LUN,但仍未被操作系统配置,请使用`sg_luns`命令(sg3_utils包的一部分)确认阵列正在导出的LUN的列表。这将向`SCSI REPORT LUNS`RAID阵列发出命令并返回存在的LUN列表。
对于实现单个WWNN对所有端口光纤通道存储服务器,您可以确定正确的h
,c
,和t
值 (即HBA数量,HBA通道和SCSI目标ID),在sysfs
中搜索WWNN .
例如,如果存储服务器的WWNN是0x5006016090203181
,请使用:
1 | $ grep 5006016090203181 /sys/class/fc_transport/*/node_name |
这应该显示类似于以下内容的输出:
1 | /sys/class/fc_transport/target5:0:2/node_name:0x5006016090203181 |
这表示到此目标有四条光纤通道路由(两条单通道HBA,每条通向两个存储端口)。假设有一个LUN值56
,那么下面的命令将配置第一个路径:
1 | $ echo "0 2 56" > /sys/class/scsi_host/host5/scan |
这必须为新设备的每个路径完成。
对于没有为所有端口实施单个WWNN的光纤通道存储服务器,可以通过搜索其中的每个WWPN来确定正确的HBA编号,HBA通道和SCSI目标ID.
确定HBA号码,HBA通道和SCSI目标ID的另一种方法是引用已经在新设备的相同路径上配置的另一个设备。这可以通过各种命令,比如要做lsscsi
,scsi_id
,multipath -l
,和ls -l /dev/disk/by-
。如上所示,可以使用此信息以及新设备的LUN编号来探测和配置到新设备的路径。
- 将所有SCSI路径添加到设备后,执行该
multipath
命令,并检查设备是否已正确配置。此时,可以将设备添加到md
LVMmkfs
,或者mount
,例如。
如果遵循上述步骤,则可以将设备安全地添加到正在运行的系统中。完成这个任务后,不需要停止对其他设备的I / O操作。当存储I / O正在进行时,不推荐其他涉及SCSI总线重新扫描(或重置)的过程,这会导致操作系统更新其状态以反映当前的设备连接。
扫描存储互连
某些命令允许您重置,扫描或同时重置和扫描一个或多个互连,这可能会在一次操作中添加和删除多个设备。这种类型的扫描可能会造成干扰,因为在I / O操作超时的同时会造成延迟,并意外移除设备。红帽建议仅在必要时使用互连扫描。扫描存储互连时,请遵守以下限制:
- 在执行该过程之前,受影响的互连上的所有I/O必须暂停并刷新,并在I/O恢复之前检查扫描结果。
- 与拆除设备一样,当系统处于内存压力下时,不建议进行互连扫描。要确定内存压力的级别,请运行该
vmstat 1 100
命令。如果空闲内存小于每100个10个以上采样的总内存的5%,则不建议进行互连扫描。另外,如果交换处于活动状态(非零si
和输出中的so
列),则不建议进行互连扫描vmstat
。free
命令还可以显示总内存。
以下命令可用于扫描存储互连:
echo "1" > /sys/class/fc_host/host/issue_lip
此操作执行循环初始化协议(LIP),扫描互连,并使SCSI层更新以反映总线上当前的设备。从本质上讲,LIP是一个总线复位,并导致设备添加和删除。此过程对于在光纤通道互连上配置新的SCSI目标是必需的。
请注意,这
issue_lip
是一个异步操作。该命令可以在整个扫描完成之前完成。你必须监视,/var/log/messages
以确定何时issue_lip
完成。的
lpfc
,qla2xxx
和bnx2fc
驱动程序的支持issue_lip
。有关红帽企业版Linux中每个驱动程序支持的API功能的更多信息/usr/bin/rescan-scsi-bus.sh
该
/usr/bin/rescan-scsi-bus.sh
脚本是在红帽企业Linux 5.4中引入的。默认情况下,此脚本扫描系统上的所有SCSI总线,并更新SCSI层以反映总线上的新设备。该脚本提供了额外的选项来允许设备移除和发行LIP。echo "- - -" > /sys/class/scsi_host/hosth/scan
在这种情况下,通道号,SCSI目标ID和LUN值将被通配符替换。标识符和通配符的任何组合都是允许的,所以您可以根据需要将命令设置为特定或广泛的。此过程添加LUN,但不删除它们。
modprobe --remove driver-name
,modprobe driver-name
运行
modprobe --remove driver-name
命令,然后执行命令modprobe driver-name
完全重新初始化驱动程序控制的所有互连的状态。尽管比较极端,但在某些情况下使用描述的命令可能是合适的。例如,可以使用这些命令以不同的模块参数值重新启动驱动程序。
ISCSI发现配置
默认的iSCSI配置文件是/etc/iscsi/iscsid.conf
。该文件包含iscsid
和使用的iSCSI设置iscsiadm
。
在发现目标期间,该iscsiadm
工具使用其中的设置/etc/iscsi/iscsid.conf
来创建两种类型的记录:
节点记录
/var/lib/iscsi/nodes
登录到目标时,
iscsiadm
使用此文件中的设置。发现记录在
/var/lib/iscsi/*discovery_type*
在对同一目的地执行发现时,
iscsiadm
使用此文件中的设置。
在使用不同的发现设置之前,先删除当前的发现记录(即)。为此,请使用以下命令
1 | # iscsiadm -m discovery -t discovery_type -p target_IP:port -o delete |
在这里,discovery_type可以是sendtargets
,isns
或fw
。
有两种方法可以重新配置发现记录设置:
- 编辑
/etc/iscsi/iscsid.conf
在执行发现之前直接. 发现设置使用前缀discovery
; 要查看它们,请运行:
1 | # iscsiadm -m discovery -t discovery_type -p target_IP:port |
- 或者,
iscsiadm
也可以用来直接更改发现记录设置,如下所示:
1 | # iscsiadm -m discovery -t discovery_type -p target_IP:port -o update -n setting -v %value |
配置ISCSI卸载和接口绑定
本章介绍如何设置iSCSI接口,以便在使用软件iSCSI时将会话绑定到NIC端口。还介绍如何设置支持卸载的网络设备的接口。
网络子系统可以配置为确定iSCSI接口应该用于绑定的路径/ NIC。例如,如果门户网站和网卡设置在不同的子网上,则不需要手动配置iSCSI接口进行绑定。
在尝试配置iSCSI接口进行绑定之前,请先运行以下命令:
1 | $ ping -I eth X target_IP |
如果ping
失败,那么您将无法将会话绑定到NIC。如果是这种情况,请首先检查网络设置。
查看可用的iface配置
以下iSCSI启动器实施支持iSCSI卸载和接口绑定:
软件iSCSI
此堆栈为
scsi_host
每个会话分配一个iSCSI主机实例(即),每个会话只有一个连接。作为结果,/sys/class_scsi_host
、/proc/scsi
会报告scsi_host
你登录到每个连接/会话。卸载iSCSI
这个堆栈
scsi_host
为每个PCI设备分配一个。因此,主机总线适配器上的每个端口将显示为不同的PCI设备,scsi_host
每个HBA端口都有不同的端口。
要管理这两种类型的启动器实现,请iscsiadm
使用该iface
结构。使用此结构,iface
必须为用于绑定会话的/var/lib/iscsi/ifaces
每个HBA端口,软件iSCSI或网络设备(ethX
)输入配置。
要查看可用iface
配置,请运行iscsiadm -m iface
。这将显示iface
以下格式的信息:
1 | iface_name transport_name,hardware_address,ip_address,net_ifacename,initiator_name |
请参阅下表,
设置 | 描述 |
---|---|
iface_name |
iface 配置名称。 |
transport_name |
设备名称 |
hardware_address |
MAC 地址 |
ip_address |
用于此端口的IP地址 |
net_iface_name |
名称用于vlan 软件iSCSI会话的别名绑定。对于iSCSI卸载,net_iface_name 将是<empty> 因为这个值在重新启动时不是持久的。 |
initiator_name |
此设置用于覆盖/etc/iscsi/initiatorname.iscsi 中定义的启动器的默认名称 |
iscsiadm -m iface命令的输出示例
以下是iscsiadm -m iface
命令的输出示例:
1 | iface0 qla4xxx,00:c0:dd:08:63:e8,20.15.0.7,default,iqn.2005-06.com.redhat:madmax |
对于软件iSCSI,每个iface
配置必须具有唯一的名称(少于65个字符)。该iface_name
网络设备支持卸载出现在格式。
iscsiadm -m iface使用Chelsio网卡输出
例如,iscsiadm -m iface
使用Chelsio网卡的系统上的示例输出可能显示为:
1 | default tcp,<empty>,<empty>,<empty>,<empty> |
也可以以iface
更友好的方式显示特定配置的设置。为此,请使用该选项。这将以以下格式显示设置
1 | iface.setting = value |
使用ifaceChelsio融合网络适配器的设置
使用前面的示例,iface
相同的Chelsio融合网络适配器(即iscsiadm -m iface -I cxgb3i.00:07:43:05:97:07
)的设置将显示为:
1 | # BEGIN RECORD 2.0-871 |
为软件iSCSI配置iface
如前所述,iface
每个将用于绑定会话的网络对象都需要配置。
之前
要iface
为软件iSCSI 创建配置,请运行以下命令:
1 | # iscsiadm -m iface -I iface_name --op=new |
这将创建一个具有指定的新的空 iface
配置*iface_name*
。如果现有iface
配置已经有相同的*iface_name*
,那么它将被一个新的空的覆盖。
要配置特定的iface
配置设置,请使用以下命令:
1 | # iscsiadm -m iface -I iface_name --op=update -n iface.setting -v hw_address |
设置MAC地址iface0
例如,要设置的MAC地址(hardware_address
的)iface0
到00:0F:1F:92:6B:BF
,运行:
1 | # iscsiadm -m iface -I iface0 --op=update -n iface.hwaddress -v 00:0F:1F:92:6B:BF |
不要使用default
或iser
作为iface
名称。这两个字符串都是iscsiadm
为了向后兼容而使用的特殊值。任何手动创建的iface
配置命名default
或iser
将禁用向后兼容性。
为iSCSI卸载配置iface
默认情况下iscsiadm
会iface
为每个端口创建一个配置。要查看可用的iface
配置,请在软件iSCSI中使用相同的命令,即iscsiadm -m iface
。
在使用iface
网卡进行iSCSI卸载之前,首先设置设备应使用的IP地址。对于使用be2iscsi
驱动程序的设备,在BIOS设置屏幕中配置IP地址。对于所有其他设备,要配置使用的IP地址iface
:
1 | # iscsiadm -m iface -I iface_name -o update -n iface.ipaddress -v target_IP |
设置ifaceChelsio卡的IP地址
例如,要将iface
IP地址设置为20.15.0.66
使用iface名称为cxgb3i.00:07:43:05:97:07的卡时,请使用:
1 | # iscsiadm -m iface -I cxgb3i.00:07:43:05:97:07 -o update -n iface.ipaddress -v 20.15.0.66 |
将iface绑定/解除绑定到Portal
每当iscsiadm
用于扫描互连时,都会首先检查iface.transport
每个iface
配置的设置/var/lib/iscsi/ifaces
。在iscsiadm
随后实用程序将绑定发现的门户网站的任何iface
其iface.transport
是tcp
。
出于兼容性的原因,此行为已实施。要覆盖这个,使用指定哪个入口绑定到一个,如下所示:
1 | # iscsiadm -m discovery -t st -p target_IP:port -I iface_name -P 1 |
默认情况下,该iscsiadm
实用程序不会自动将任何入口绑定到iface
使用卸载的配置。这是因为这样的iface
配置不会被iface.transport
设置为tcp
。因此,这些iface
配置需要手动绑定到发现的门户。
也可以防止门户绑定到任何现有的iface
。要做到这一点,使用default
的iface_name
,如:
1 | # iscsiadm -m discovery -t st -p IP:port -I default -P 1 |
要删除目标之间的绑定iface
,请使用:
1 | # iscsiadm -m node -targetname proper_target_name -I iface0 --op=delete |
要删除特定的所有绑定iface
,请使用:
1 | # iscsiadm -m node -I iface_name --op=delete |
要删除特定门户的绑定(例如,对于Equalogic目标),请使用:
1 | # iscsiadm -m node -p IP:port -I iface_name --op=delete |
如果没有iface
定义任何配置/var/lib/iscsi/iface
并且该-I
选项未被使用,iscsiadm
将允许网络子系统决定特定门户应该使用哪个设备。
扫描ISCSI互连
对于iSCSI,如果目标发送指示添加新存储的iSCSI异步事件,则扫描将自动完成。
但是,如果目标不发送iSCSI异步事件,则需要使用该iscsiadm
实用程序手动扫描它们。然而,在这样做之前,您需要先检索正确--targetname
的--portal
值。如果您的设备型号仅支持每个目标的单个逻辑单元和门户,请使用iscsiadm
向sendtargets
主机发出命令,如下所示:
1 | # iscsiadm -m discovery -t sendtargets -p target_IP:port |
输出将以以下格式显示:
1 | target_IP:port,target_portal_group_tag proper_target_name |
使用iscsiadm发出一个sendtargets命令
例如,在具有proper_target_name
of iqn.1992-08.com.netapp:sn.33615311
和target_IP:port
of 的目标上10.15.85.19:3260
,输出可能显示为:
1 | 10.15.84.19:3260,2 iqn.1992-08.com.netapp:sn.33615311 |
In this example, the target has two portals, each using *target_ip:port*
s of 10.15.84.19:3260
and 10.15.85.19:3260
.
要查看哪个iface
配置将用于每个会话,请添加该-P 1
选项。此选项将以树格式打印会话信息,如下所示:
1 | Target: proper_target_name |
查看iface配置
例如,与iscsiadm -m discovery -t sendtargets -p 10.15.85.19:3260 -P 1
,输出可能会显示为:
1 | Target: iqn.1992-08.com.netapp:sn.33615311 |
这意味着目标iqn.1992-08.com.netapp:sn.33615311
将iface2
用作其iface
配置。
对于某些设备模型,一个目标可能有多个逻辑单元和门户。在这种情况下,sendtargets
首先向主机发出命令以在目标上找到新的门户。然后,使用以下命令重新扫描现有会话:
1 | # iscsiadm -m session --rescan |
您还可以通过指定会话的SID
值重新扫描特定会话,如下所示:
1 | # iscsiadm -m session -r SID --rescan |
如果您的设备支持多个目标,则需要向sendtargets
主机发出命令,以便为每个目标找到新的入口。重新扫描现有会话以使用该--rescan
选项在现有会话上发现新的逻辑单元。
sendtargets
用于检索--targetname
和--portal
值 的命令会覆盖/var/lib/iscsi/nodes
数据库的内容。然后使用中的设置重新填充此数据库/etc/iscsi/iscsid.conf
。但是,如果会话当前已登录并正在使用,则不会发生这种情况。
要安全地添加新的目标/门户或删除旧的,分别使用-o new
或-o delete
选项。例如,要添加新的目标/门户而不覆盖/var/lib/iscsi/nodes
,请使用以下命令:
1 | iscsiadm -m discovery -t st -p target_IP -o new |
要删除/var/lib/iscsi/nodes
目标在发现过程中未显示的条目,请使用:
1 | iscsiadm -m discovery -t st -p target_IP -o delete |
您也可以同时执行这两个任务,如下所示:
1 | iscsiadm -m discovery -t st -p target_IP -o delete -o new |
该sendtargets
命令将产生以下输出:
1 | ip:port,target_portal_group_tag proper_target_name |
sendtargets命令的输出
例如,给定一个具有单个目标,逻辑单元和门户equallogic-iscsi1
的设备*target_name*
,其输出应与以下内容类似:
1 | 10.16.41.155:3260,0 iqn.2001-05.com.equallogic:6-8a0900-ac3fe0101-63aff113e344a4a2-dl585-03-1 |
此时,您现在拥有手动扫描iSCSI设备所需的正确值--targetname
和--portal
值。为此,请运行以下命令:
1 | # iscsiadm --mode node --targetname proper_target_name --portal ip:port,target_portal_group_tag \ --login |
完整的iscsiadm命令
使用我们前面的例子(*proper_target_name*
是equallogic-iscsi1
),完整的命令是:
1 | # iscsiadm --mode node --targetname \ iqn.2001-05.com.equallogic:6-8a0900-ac3fe0101-63aff113e344a4a2-dl585-03-1 \ --portal 10.16.41.155:3260,0 --login[8] |
登录到ISCSI目标
必须运行iSCSI服务才能发现或登录目标。要启动iSCSI服务,请运行:
1 | # systemctl start iscsi |
执行此命令后,iSCSI init
脚本将自动登录到node.startup
设置配置为的目标automatic
。这是node.startup
所有目标的默认值。
要防止自动登录到目标,请设置node.startup
为manual
。为此,请运行以下命令:
1 | # iscsiadm -m node --targetname proper_target_name -p target_IP:port -o update -n node.startup -v manual |
删除整个记录也会阻止自动登录。要做到这一点,运行:
1 | # iscsiadm -m node --targetname proper_target_name -p target_IP:port -o delete |
要从网络上的iSCSI设备自动安装文件系统,请/etc/fstab
使用该_netdev
选项为安装添加分区条目。例如,为了自动iSCSI设备安装sdb
到/mount/iscsi
启动过程中,下面的行添加到/etc/fstab
:
1 | /dev/sdb /mnt/iscsi ext3 _netdev 0 0 |
要手动登录到iSCSI目标,请使用以下命令:
1 | # iscsiadm -m node --targetname proper_target_name -p target_IP:port -l |
该proper_target_name
和target_IP:port
指全名和目标的IP地址/端口组合。
RESIZING 调整在线逻辑单元的大小
在大多数情况下,完全调整在线逻辑单元的大小涉及两件事情:调整逻辑单元本身的大小,并在相应的多路径设备(如果在系统上启用多路径)中反映大小更改。
要调整联机逻辑单元的大小,请首先通过存储设备的阵列管理界面修改逻辑单元大小。这个过程与每个数组不同,因此,请查阅您的存储阵列供应商文档以获取更多信息。
Note
为了调整在线文件系统的大小,文件系统不能驻留在分区设备上。
调整光纤通道逻辑单元的大小
修改在线逻辑单元大小后,重新扫描逻辑单元以确保系统检测到更新的大小。要为光纤通道逻辑单元执行此操作,请使用以下命令:
1 | $ echo 1 > /sys/block/sdX/device/rescan |
要在使用多路径的系统上重新扫描光纤通道逻辑单元,请为表示多路径逻辑单元的路径的每个sd设备(即sd1
,sd2
等等)执行上述命令。要确定哪些设备是多路径逻辑单元的路径,请使用multipath -ll
; 然后找到匹配被调整大小的逻辑单元的条目。建议您参考每个条目的WWID,以便更容易地找到哪个匹配被调整大小的逻辑单元。
调整iSCSI逻辑单元的大小
修改在线逻辑单元大小后,重新扫描逻辑单元以确保系统检测到更新的大小。要为iSCSI设备执行此操作,请使用以下命令:
1 | # iscsiadm -m node --targetname target_name -R |
替换*target_name*
为设备所在的目标的名称。
您也可以使用以下命令重新扫描iSCSI逻辑单元:
1 | # iscsiadm -m node -R -I interface |
替换interface
为调整大小的逻辑单元的相应接口名称(例如iface0
)。该命令执行两个操作:
它以与命令相同的方式扫描新设备
echo "- - -" > /sys/class/scsi_host/*host*/scan
它以与命令相同的方式重新扫描新的/修改的逻辑单元
echo 1 > /sys/block/sdX/device/rescan
请注意,该命令与用于重新扫描光纤通道逻辑单元的命令相同。
更新多路径设备的大小
如果系统启用了多路径,则还需要将逻辑单元大小的变化反映到逻辑单元的相应多路径设备(在调整逻辑单元大小之后)。这可以通过multipathd
。为此,首先确保multipathd
正在运行使用service multipathd status
。一旦您验证了multipathd
可操作性,请运行以下命令:
1 | # multipathd -k "resize map multipath_device" |
该multipath_device
变量是您的设备在相应的多路径条目/dev/mapper
。根据系统上多路径的设置,*multipath_device*
可以是以下两种格式之一:
mpathX
,X
您的设备的相应条目在哪里(例如mpath0
)- WWID; 例如,
3600508b400105e210000900000490000
要确定哪个多路径条目对应于您调整大小的逻辑单元,请运行multipath -ll
。这将显示系统中所有现有多路径条目的列表,以及相应设备的主要和次要编号。
改变在线逻辑单元的读/写状态
某些存储设备为用户提供了将设备状态从读/写(R / W)更改为只读(RO)以及从RO更改为R / W的功能。这通常通过存储设备上的管理界面完成。进行更改时,操作系统不会自动更新设备状态视图。按照本章介绍的步骤使操作系统知道更改。
运行以下命令,将XYZ替换为所需的设备指示符,以确定操作系统当前的设备R / W状态视图:
1 | # blockdev --getro /dev/sdXYZ |
以下命令也可用于红帽企业版Linux 7:
1 | # cat /sys/block/sdXYZ/ro 1 = read-only 0 = read-write |
使用多路径时,请参阅命令输出的第二行中的ro或rw字段multipath -ll
。例如:
1 | 36001438005deb4710000500000640000 dm-8 GZ,GZ500 |
要更改R/W状态,请使用以下步骤:
改变R/W状态
要将设备从RO移到R / W,请参阅步骤2。
要将器件从R / W移至RO,确保不会再发出写操作。通过停止应用程序或通过使用适当的特定于应用程序的操作来执行此操作。
使用以下命令确保所有未完成的写入I / O完成:
1 | # blockdev --flushbufs /dev/device |
用所需的代号替换设备 ; 对于设备映射器多路径,这是您设备的条目dev/mapper
。例如。 /dev/mapper/mpath3
使用存储设备的管理接口将逻辑单元的状态从R / W更改为RO,或将RO更改为R/W。这个过程对每个数组都不相同。查阅适用的存储阵列供应商文档以获取更多信
执行设备的重新扫描以更新设备的R / W状态的操作系统的视图。如果使用设备映射器多路径,请在发出告知多路径重新加载其设备映射的命令之前,对设备的每条路径执行此重新扫描。
重新扫描逻辑单元
在线逻辑单元的读/写状态”所述,修改了在线逻辑单元读/写状态之后,重新扫描逻辑单元以确保系统检测到更新状态命令:
1 | # echo 1 > /sys/block/sdX/device/rescan |
要在使用多路径的系统上重新扫描逻辑单元,请为表示多路径逻辑单元的路径的每个sd设备执行上述命令。例如,在sd1,sd2和所有其他sd设备上运行命令。要确定哪些设备是多路径单元的路径,请使用multipath -11
,然后查找与要更改的逻辑单元相匹配的条目。
使用multipath -11命令
例如,multipath -11
以上显示了WWID为36001438005deb4710000500000640000的LUN的路径。在这种情况下,输入:
1 | # echo 1 > /sys/block/sdax/device/rescan |
更新多路径设备的R/W状态
如果启用了多路径,则在重新扫描逻辑单元之后,其状态变化将需要反映在逻辑单元的相应多路径驱动器中。通过使用以下命令重新载入多路径设备映射来执行此操作:
1 | # multipath -r |
该multipath -11
命令可以用来确认更改。
通过RESCAN-SCSI-BUS.SH添加/删除逻辑单元
该sg3_utils
软件包提供了rescan-scsi-bus.sh
脚本,可以根据需要自动更新主机的逻辑单元配置(在设备添加到系统后)。该rescan-scsi-bus.sh
脚本还可以issue_lip
在支持的设备上执行。有关如何使用此脚本的更多信息,请参阅rescan-scsi-bus.sh --help
。
要安装该sg3_utils
软件包,请运行yum install sg3_utils
。
已知问题与rescan-scsi-bus.sh
使用rescan-scsi-bus.sh
脚本时,请注意以下已知问题:
- 为了
rescan-scsi-bus.sh
正常工作,LUN0
必须是第一个映射的逻辑单元。的rescan-scsi-bus.sh
,如果它是仅可以检测第一映射逻辑单元LUN0
。该rescan-scsi-bus.sh
不会是能够扫描任何其他逻辑单元,除非它检测到,即使你使用的第一映射逻辑单元--nooptscan
选项。 rescan-scsi-bus.sh
如果逻辑单元是第一次映射的, 竞态条件要求运行两次。在第一次扫描期间,rescan-scsi-bus.sh
只增加LUN0
; 在第二次扫描中添加所有其他逻辑单元。rescan-scsi-bus.sh
当使用该--remove
选项时 ,脚本中的错误错误地执行识别逻辑单元大小变化的功能。- 该
rescan-scsi-bus.sh
脚本不识别ISCSI逻辑单元删除。
修改链路丢失行为
This section describes how to modify the link loss behavior of devices that use either Fibre Channel or iSCSI protocols.
光纤通道
如果驱动程序实现传输dev_loss_tmo
回调,则在检测到传输问题时,通过链接访问设备的尝试将被阻止。要验证设备是否被阻止,请运行以下命令:
1 | $ cat /sys/block/device/device/state |
blocked
如果设备被阻塞, 该命令将返回。如果设备运行正常,该命令将返回running
。
确定远程端口的状态
- 要确定远程端口的状态,请运行以下命令:
1 | $ cat |
Blocked
当远程端口(以及通过它访问的设备)被阻塞时, 该命令将返回。如果远程端口正常运行,命令将返回Online
。如果问题在
dev_loss_tmo
几秒内不能解决,则rport和设备将被解除阻塞,并且该设备上运行的所有I/O(以及任何发送到该设备的新I/O)都将失败。
更改dev_loss_tmo
- 要更改该
dev_loss_tmo
值,echo
请将所需的值更改为该文件。例如,要设置dev_loss_tmo
为30秒,请运行:
1 | $ echo 30 > |
iSCSI设置dm-multipath
如果dm-multipath
已实施,则建议将iSCSI定时器设置为立即将命令延迟到多路径层。要配置它,请将以下行嵌套device
在/etc/multipath.conf
:
1 | features "1 queue_if_no_path" |
这确保了如果dm-multipath
图层中的所有路径都失败,I / O错误将重试并排队。
您可能需要进一步调整iSCSI定时器,以更好地监控SAN的问题。您可以配置可用的iSCSI计时器是NOP超时间隔/超时和replacement_timeout
,这在下面的章节中讨论。
NOP输出间隔/超时
为了帮助监控SAN的问题,iSCSI层向每个目标发送一个NOP-Out请求。如果NOP-Out请求超时,则iSCSI层响应失败的任何运行命令,并指示SCSI层在可能的情况下重新执行这些命令。
在dm-multipath
使用时,SCSI层将会使那些正在运行的命令失效,并将它们推迟到多路径层。多路径层然后在另一条路径上重试这些命令。如果dm-multipath
是没有被使用,这些命令是完全失败之前重试五次。
NOP-Out请求之间的间隔默认为10秒。要调整它,请打开/etc/iscsi/iscsid.conf
并编辑以下行:
1 | node.conn[0].timeo.noop_out_interval = [interval value] |
一旦设置,iSCSI层将每[间隔值]秒发送一个NOP-Out请求给每个目标。
默认情况下,NOP-Out请求在10秒内超时要调整它,请打开/etc/iscsi/iscsid.conf
并编辑以下行:
1 | node.conn[0].timeo.noop_out_timeout = [timeout value] |
这会将iSCSI层设置为在[超时值]秒后超时一个NOP-Out请求。
SCSI错误处理程序
如果SCSI错误处理程序正在运行,当路径上的NOP-Out请求超时时,在路径上运行命令将不会立即失败。相反,这些命令将在 replacement_timeout
几秒钟后失败。
要验证SCSI错误处理程序是否正在运行,请运行:
1 | #iscsiadm -m session -P 3 |
replacement_timeout
replacement_timeout
控制iSCSI层在发生任何命令失败之前应该等待超时路径/会话重新建立自己的时间。默认replacement_timeout
值是120秒。
要进行调整replacement_timeout
,请打开/etc/iscsi/iscsid.conf
并编辑以下行:
1 | node.session.timeo.replacement_timeout = [replacement_timeout] |
通过配置较低的replacement_timeout
I / O,当iSCSI层尝试重新建立失败的路径/会话时,I / O被快速发送到新的路径并执行(在NOP-Out超时的情况下)。如果所有路径都超时,那么多路径和设备映射器将根据设置在内部排队I / O /etc/multipath.conf
而不是/etc/iscsi/iscsid.conf
。
重要
无论您考虑的是故障转移速度还是安全性,建议的值replacement_timeout
将取决于其他因素。这些因素包括网络,目标和系统工作负载。因此,建议您replacements_timeout
在将其应用于任务关键型系统之前彻底测试任何新的配置。
iSCSI根
当直接通过iSCSI磁盘访问根分区时,应设置iSCSI定时器,以便iSCSI层尝试重新建立路径/会话有几次机会。另外,命令不应该快速重新排队到SCSI层。这与dm-multipath
实施时应该做的是相反的。
首先,应禁用NOP输出。您可以通过将NOP-Out时间间隔和超时设置为零来完成此操作。要设置这个,打开/etc/iscsi/iscsid.conf
并编辑如下:
1 | node.conn [0] .timeo.noop_out_interval = 0 |
为此,replacement_timeout
应该设置一个很高的数字。这将指示系统等待很长时间来重新建立路径/会话。要进行调整replacement_timeout
,请打开/etc/iscsi/iscsid.conf
并编辑以下行:
1 | node.session.timeo.replacement_timeout = replacement_timeout |
配置完成后/etc/iscsi/iscsid.conf
,您必须重新发现受影响的存储。这将允许系统加载和使用任何新的值/etc/iscsi/iscsid.conf
。
配置特定会话超时
您还可以为特定会话配置超时,并使其非持久(而不是使用/etc/iscsi/iscsid.conf
)。为此,请运行以下命令(相应地替换变量):
1 | #iscsiadm -m node -T target_name -p target_IP:port -o update -n node.session.timeo.replacement_timeout -v $ timeout_value |
控制SCSI命令计时器和设备状态
Linux SCSI层在每个命令上设置一个定时器。当此计时器到期时,SCSI层将使主机总线适配器(HBA)停顿并等待所有未完成的命令超时或完成。之后,SCSI层将激活驱动程序的错误处理程序。
当错误处理程序被触发时,它将按顺序尝试以下操作(直到成功执行):
- 中止命令。
- 重置设备。
- 重置总线。
- 重置主机。
如果所有这些操作失败,设备将被设置为offline
状态。发生这种情况时,该设备的所有I / O都将失败,直到问题得到纠正,并且用户将设备设置为running
。
但是,如果设备使用光纤通道协议并且rport
被阻止,则该过程是不同的。在这种情况下,驱动程序rport
在激活错误处理程序之前等待几秒钟才能再次联机。这可以防止由于临时传输问题导致设备脱机。
设备状态
要显示设备的状态,请使用:
1 | $ cat /sys/block/device-name/device/state |
要将设备设置为该running
状态,请使用:
1 | #echo running> /sys/block/device-name/device/state |
命令计时器
要控制命令计时器,请修改文件: /sys/block/device-name/device/timeout
1 | #echo value > /sys/block/device-name/device/timeout |
value
在命令中用您想要实现的超时值(以秒为单位) 替换。
在线存储配置故障排除
逻辑单元删除状态不会反映在主机上。
在配置的文件管理器上删除逻辑单元时,更改不会反映在主机上。在这种情况下,lvm
命令将在dm-multipath
使用时无限期挂起,因为逻辑单元现在已经过时。
要解决此问题,请执行以下步骤:
在陈旧的逻辑单位工作
确定哪些
mpath
链接条目/etc/lvm/cache/.cache
特定于陈旧的逻辑单元。为此,请运行以下命令:1
$ ls -l / dev / mpath | grep stale-logical-unit
确定特定的mpath链接条目
例如,如果
stale-logical-unit
是3600d0230003414f30000203a7bc41a00,则可能会出现以下结果:1
2lrwxrwxrwx 1 root root 7 Aug 2 10:33 / 3600d0230003414f30000203a7bc41a00 - > ../dm-4 lrwxrwxrwx
1 root root 7 Aug 2 10:33 / 3600d0230003414f30000203a7bc41a00p1 - > ../dm-5这意味着3600d0230003414f30000203a7bc41a00被映射到两个
mpath
链接:dm-4
和dm-5
。接下来,打开
/etc/lvm/cache/.cache
。删除包含的所有行*stale-logical-unit
和映射到的mpath
链接stale-logical-unit
。
删除相关的行
使用上一步中的相同示例,需要删除的行是:
1 | / dev / dm-4 |
使用EH_DEADLINE配置错误恢复的最长时间
在大多数情况下,您不需要启用eh_deadline参数。eh_deadline例如,如果光纤通道交换机和目标端口之间发生链路丢失,并且主机总线适配器(HBA)没有收到注册状态更改通知(RSCN),则在某些特定情况下使用该参数可能很有用。在这种情况下,I / O请求和错误恢复命令全部超时而不是遇到错误。eh_deadline在这个环境中设置恢复时间的上限,这使得可以通过多路径在另一条可用路径上重试失败的I / O。
但是,如果启用了RSCN,则HBA不会注册链路变为不可用,或者两者兼而有之eh_deadline,因为I / O和错误恢复命令立即失败,因此该功能不会提供额外的好处,从而允许多路径重试。
SCSI主机对象eh_deadline参数使您能够配置SCSI错误处理机制在停止和重置整个HBA之前尝试执行错误恢复的最长时间。
该值eh_deadline以秒为单位指定。默认设置是off
禁用时间限制,并允许所有的错误恢复。除使用外sysfs
,还可以使用scsi_mod.eh_deadline内核参数为所有SCSI HBA设置默认值。
请注意,eh_deadline到期时,HBA将重置,从而影响该HBA上的所有目标路径,而不仅仅是失败的路径。因此,如果某些冗余路径由于其他原因而不可用,则可能会发生I / O错误。eh_deadline仅当您在所有目标上具有完全冗余的多路径配置时才启用。
设备映射器多路径和虚拟存储
虚拟存储
红帽企业版Linux 7支持以下用于虚拟存储的文件系统/在线存储方法:
- 光纤通道
- iSCSI的
- NFS
- GFS2
红帽企业版Linux 7中的虚拟化libvirt
用于管理虚拟实例。该libvirt
实用程序使用存储池的概念来管理虚拟客户的存储。存储池是可以分成更小卷或直接分配给来宾的存储。存储池的卷可以分配给虚拟客户端。有两类存储池可用:
本地存储池
本地存储涵盖直接连接到主机的存储设备,文件或目录。本地存储包括本地目录,直接连接的磁盘和LVM卷组。
联网(共享)存储池
网络存储涵盖了使用标准协议通过网络共享的存储设备。它包括使用光纤通道,iSCSI,NFS,GFS2和SCSI RDMA协议的共享存储设备,并且需要在主机之间迁移访客虚拟化来宾。
DM-多路径
设备映射器多路径(DM-Multipath)功能可让您将服务器节点和存储阵列之间的多个I / O路径配置到一个设备中。这些I / O路径是物理SAN连接,可以包含单独的电缆,交换机和控制器。多路径聚合I / O路径,创建一个由聚合路径组成的新设备。
DM-Multipath主要用于以下原因:
冗余
DM-Multipath可以在主动/被动配置中提供故障转移。在主动/被动配置中,只有一半的路径在任何时候用于I / O。如果I / O路径的任何元素(电缆,交换机或控制器)发生故障,DM-Multipath将切换到备用路径。
改进的性能
可以在主动/主动模式下配置DM-Multipath,其中I / O以循环方式分布在路径上。在一些配置中,DM-Multipath可以检测I / O路径上的负载并动态地重新平衡负载。