00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604241。

章节概述:

本章节开篇通过介绍计算机硬件存储设备接口技术协议的不同以及优缺点来引入正文,iSCSI技术实现了物理硬盘设备与TCP/TP网络传输协议的相互结合,使得用户可以通过互联网方便的获取到远程机房提供的共享存储资源。课程中刘遄老师亲身带领同学们基于Linux系统部署了iSCSI服务端程序,分别基于Linux系统和Windows系统实现了对远程存储资源的使用,并且在部署iSCSI服务端环境时又重复温习了所学习过的RAID磁盘阵列组技术,通过书籍中第六章、第七章以及第十七章对存储设备的学习,最终帮助读者们更深刻的掌握了Linux系统中硬盘设备及存储资源的管理方法,是运维生产环境中必备的技能之一。

17.1 iSCSI技术介绍

硬盘是计算机硬件设备中重要的组成部分之一,存储设备的IO读写速度快慢也直接影响着服务器整体性能的高低,咱们在书籍第六章、第七章分别细致的学习了硬盘存储结构、RAID磁盘阵列技术及LVM逻辑卷管理技术等等存储设备技术,这些技术无论是软件还是硬件层面的,大多都是在努力解决硬盘存储设备的读写慢快问题或保障存储内容数据安全。为了能够让存储设备更加强大,一百年来人类一直在努力发挥强大的创造力来不断改进着物理硬盘设备的接口协议,当前硬盘接口类型主要有IDE、SCSI和SATA三种,SCSI小型计算机系统接口是一种计算机与硬盘或光驱等设备系统级接口最常见的标准协议,在当今存储设备上最常使用的一种接口协议,SCSI接口协议的出现终结了IDE接口时代,人们再也不用忍受见到数据传输很慢的情况了。

不论是使用什么类型的硬盘接口,硬盘数据总是要通过计算机主板上的总线来跟CPU处理器、内存设备进行数据交换传输,这样物理环境的限制大大增加了硬盘资源共享的不便捷性,当时人们肯定在想如果能够把硬盘存储资源也能放到互联网上那该多方便啊,于是IBM公司便开始动手研发基于TCP/IP网络协议和SCSI接口协议的新型存储技术,也就是咱们目前所看到的iSCSI小型计算机系统接口(Internet Small Computer System Interface),这是一种能够将SCSI接口与以太网技术相结合的新型存储技术,咱们基于iSCSI协议便能在网络中传输SCSI接口的命令和数据内容了,这样不仅克服了传统SCSI接口设备的物理局限性,实现让机房之间可以跨越省市来共享存储设备资源,还可以做到在不停机的状态下扩展存储容量。

刘遄老师认为同学们不仅应该学习好这项技术,更要知道iscsi存储技术在生产环境中的优势和缺点,这样在工作中才能灵活使用,首先来讲,使用iscsi存储技术确实非常便捷,从存储资源获取形式上发生了很大的变化,解脱了物理环境的限制,同时还能够将存储资源分开给多个服务器一起使用,是一种非常推荐的网络存储技术,但iscsi存储协议的技术局限性也十分明显,那就是网速!以前硬盘设备是直接通过主板上的总线进行数据传输,但当前则需要让互联网来作为数据传输的载体,在传输速率上以及稳定性上面都是当前遇到的瓶颈问题,随着互联网和网络技术的持续发展,相信iscsi技术在未来也会被不断得到改善的。

对了,还有一个很重要的问题,既然咱们要通过以太网来传输硬盘数据,那数据是通过网卡传入到咱们电脑中的吗?这就有必要向同学们介绍下iSCSI-HBA卡了,一般的网卡是连接的网络总线和内存,是用来供计算机上网的,而iSCSI-HBA卡则是连接的SCSI接口或FC总线和内存,是专门供主机之间交换存储数据的,协议也有本质的区别,iSCSI-HBA卡如图17-1所示,咱们的Linux系统服务器会基于iSCSI协议把SCSI硬盘设备、命令与数据打包成标准的TCP/IP数据包,然后通过以太网传输到目标的存储设备,而当远端的计算机系统接收到这些数据包后还需要基于iSCSI协议将TCP/IP数据包解压成SCSI设备、命令与数据。

ISCSI HBA卡

图17-1 iSCSI-HBA卡实拍图

17.2 创建RAID磁盘阵列

既然要使用iSCSI技术为远程用户提供硬盘存储资源,那首先应该保证服务器存储资源的稳定性和可用性,否则一旦远程用户在使用过程中出现故障,那排错维修起来的难度相比较本地硬盘设备来讲是要复杂困难很多的,因此十分推荐同学们按照咱们书籍《Linux就该这么学》的第七章知识来部署搭建RAID磁盘阵列组,做到真正的保证数据安全性,接下来以配置RAID5级别的磁盘阵列组为例,由于前面已经系统性详细的学习过了,所以本小节并不会再对参数进行详尽的介绍,如果同学们忘记了的话可以翻回去看一下哦~首先在虚拟机中添加4块用于创建RAID5级别磁盘阵列组和热备盘的新硬盘,如图17-2所示:

虚拟机添加硬盘

图17-2 添加4块用于创建RAID10级别磁盘阵列组的新硬盘

然后启动虚拟机系统后使用mdadm命令创建RAID磁盘阵列组,-Cv参数为创建阵列组并显示过程,/dev/md0为生成的阵列组名称,-n 3参数为创建RAID5级别磁盘阵列组所需要用的硬盘个数,-l 5参数为RAID磁盘阵列组的级别,-x 1参数为磁盘阵列组的热备盘个数,在命令的最后面逐一写上要使用的硬盘名称,有没有同学能尝试下使用第三章学过的通配符写一下呢?

[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954624K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

命令执行成功后咱们就得到了一块名称为/dev/md0的新设备,这是一块RAID5级别的磁盘阵列组,并且还有一块热备盘为硬盘数据保驾护航,可使用mdadm -D命令参数来查看设备的详细信息。另外由于使用远程设备时极有可能出现识别顺序发生变化的情况,如果直接在fstab挂载配置文件中写/dev/sdb、/dev/sdc等设备名称的话,就有可能下一次挂载错了存储设备,UUID值为设备的唯一标识符 ,是一种区分本地或远程设备最精准的方法,咱们需要把这段字符串记录下来,一会填写到挂载配置文件中。

[root@linuxprobe ~]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Sep 24 21:59:57 2015
     Raid Level : raid5
     Array Size : 41909248 (39.97 GiB 42.92 GB)
  Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Thu Sep 24 22:02:23 2015
          State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
           Name : linuxprobe.com:0  (local to host linuxprobe.com)
           UUID : 3370f643:c10efd6a:44e91f2a:20c71f3e
         Events : 26
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd
       3       8       64        -      spare   /dev/sde
17.3 配置iSCSI服务端

iSCSI技术在工作形式上分为服务端(target)与客户端(initiator),iSCSI服务端即用于存放硬盘存储资源的服务器,作为前面创建RAID磁盘阵列组的存储端,能够为用户提供可用的存储资源,而iSCSI客户端则是用户使用的软件,用于获取远程服务端的存储资源,咱们接下来使用的两台Linux系统主机网卡配置参数如下所示。

主机名称 操作系统 IP地址
iSCSI服务端 红帽RHEL7操作系统 192.168.10.10
Linux系统客户端 红帽RHEL7操作系统 192.168.10.20

第1步:配置好Yum软件仓库后安装iSCSI服务端程序以及配置命令工具,咱们在yum命令的后面加上参数y,这样安装过程中也就不再需要进行手工确认了:

[root@linuxprobe ~]# yum -y install targetd targetcli
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Installing:
 targetcli noarch 2.1.fb34-1.el7 rhel 55 k
 targetd noarch 0.7.1-1.el7 rhel 48 k
Installing for dependencies:
 PyYAML x86_64 3.10-11.el7 rhel 153 k
 libyaml x86_64 0.1.4-10.el7 rhel 55 k
 lvm2-python-libs x86_64 7:2.02.105-14.el7 rhel 153 k
 pyparsing noarch 1.5.6-9.el7 rhel 94 k
 python-configshell noarch 1:1.1.fb11-3.el7 rhel 64 k
 python-kmod x86_64 0.9-4.el7 rhel 57 k
 python-rtslib noarch 2.1.fb46-1.el7 rhel 75 k
 python-setproctitle x86_64 1.1.6-5.el7 rhel 15 k
 python-urwid x86_64 1.1.1-3.el7 rhel 654 k
………………省略部分输出信息………………
Installed:
 targetcli.noarch 0:2.1.fb34-1.el7 targetd.noarch 0:0.7.1-1.el7 
Dependency Installed:
 PyYAML.x86_64 0:3.10-11.el7 
 libyaml.x86_64 0:0.1.4-10.el7 
 lvm2-python-libs.x86_64 7:2.02.105-14.el7 
 pyparsing.noarch 0:1.5.6-9.el7 
 python-configshell.noarch 1:1.1.fb11-3.el7 
 python-kmod.x86_64 0:0.9-4.el7 
 python-rtslib.noarch 0:2.1.fb46-1.el7 
 python-setproctitle.x86_64 0:1.1.6-5.el7 
 python-urwid.x86_64 0:1.1.1-3.el7 
Complete!

安装完成后启动iSCSI的服务端targetd程序,然后将服务程序加入到开机启动项中,以便下次重启服务器后依然能够为用户提供iSCSI共享存储资源服务:

[root@linuxprobe ~]# systemctl start targetd
[root@linuxprobe ~]# systemctl enable targetd
 ln -s '/usr/lib/systemd/system/targetd.service' '/etc/systemd/system/multi-user.target.wants/targetd.service'

第2步:配置iSCSI服务端共享资源,targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它能够提供类似于前面学习过的fdisk命令的交互式配置功能,将iSCSI共享资源的配置内容抽象成了“目录”的形式,咱们只需要将各类配置信息写入到对应“目录”中即可,难点主要集中在认识每个“参数目录”的作用,当把配置参数正确妥当的填写到“目录”中后,iSCSI服务端也就能够提供存储设备资源服务了,总体来说在红帽RHEL7系统中配置iSCSI共享资源相比较5和6版本变得很简单了。

执行targetcli命令后就能看到交互式的配置界面了,这里面可以使用很多的Linux命令,利用使用ls查看参数目录的结构,或者使用cd来进行切换也是可以的,/backstores/block是iSCSI服务端对共享设备的配置位置,咱们需要将刚刚创建的RAID10磁盘阵列组md0文件加入到资源池中并重新命名为disk0,这样用户不会知道咱们是由那块硬盘提供的共享存储资源,而只会看到叫做disk0的存储设备。

[root@linuxprobe ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb34
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 0]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0
/> cd /backstores/block
/backstores/block> create disk0 /dev/md0
Created block storage object disk0 using /dev/md0.
/backstores/block> cd /
/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- block .............................................. [Storage Objects: 1]
  | | o- disk0 ..................... [/dev/md0 (40.0GiB) write-thru deactivated]
  | o- fileio ............................................. [Storage Objects: 0]
  | o- pscsi .............................................. [Storage Objects: 0]
  | o- ramdisk ............................................ [Storage Objects: 0]
  o- iscsi ........................................................ [Targets: 0]
  o- loopback ..................................................... [Targets: 0]

第3步:创建iSCSI target名称及配置共享资源,iSCSI target名称是由系统自动生成的,这时一串用于描述共享资源的相对唯一的字符串,稍后用户扫描发现iSCSI服务端时可看到这串共享资源的信息,因此系统生成后同学们不需要记住它们。名称生成后还会在叫做/iscsi的参数目录中创建一个与其同名的新“目录”用来存放共享资源,咱们需要将刚刚加入到iSCSI共享资源池中的硬盘设备添加到此处,这样稍后用户登陆iSCSI服务端时即可默认使用这个设备提供的共享存储资源了。

/> cd iscsi
/iscsi> 
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80.
Created TPG 1.
/iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80/
/iscsi/iqn.20....d497c356ad80> ls
o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 ...... [TPGs: 1]
  o- tpg1 ............................................... [no-gen-acls, no-auth]
    o- acls .......................................................... [ACLs: 0]
    o- luns .......................................................... [LUNs: 0]
    o- portals .................................................... [Portals: 0]
/iscsi/iqn.20....d497c356ad80> cd tpg1/luns
/iscsi/iqn.20...d80/tpg1/luns> create /backstores/block/disk0 
Created LUN 0.

第4步:设置ACL访问控制列表,iSCSI协议是通过客户端名称进行验证的,也就是说用户获取存储共享资源的时候不需要输入密码,而只要iSCSI客户端的名称与服务端中设置的ACL访问控制列表名称一致即可,因此咱们需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称,刘遄老师推荐直接在刚刚系统生成的iSCSI target后追加上类似于:client的参数即可,这样既能保证用户名称具有唯一性,又非常便于管理和阅读:

/iscsi/iqn.20...d80/tpg1/luns> cd ..
/iscsi/iqn.20...c356ad80/tpg1> cd acls 
/iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
Created mapped LUN 0.

第5步:设置iSCSI服务端的监听IP地址和端口号,因为在生产环境的服务器上面可能有多块网卡,那么到底由那个网卡或IP地址对外提供共享存储资源呢?这就需要咱们手工的在配置文件中定义iSCSI服务器的信息,即在portals参数目录中写上服务器的IP地址即可,接下来会由系统自动提醒主机192.168.10.10的3260端口将向外提供iSCSI共享存储资源服务:

/iscsi/iqn.20...d80/tpg1/acls> cd ..
/iscsi/iqn.20...c356ad80/tpg1> cd portals 
/iscsi/iqn.20.../tpg1/portals> create 192.168.10.10
Using default IP port 3260
Created network portal 192.168.10.10:3260.

第6步:配置妥当后检查配置信息,重启iSCSI服务端程序并配置防火墙策略,在配置妥当参数文件后可大致浏览下刚刚配置的信息,同学们也应该跟下面的信息基本保持一致,确认信息无误后可输入exit命令来退出配置命令,但此处切记不要习惯性的按ctrl+c来结束进程,这样的话配置文件是没有被保存的,也就前功尽弃了,最后咱们重启一下iSCSI服务端程序,再设置firewalld防火墙对3260/Tcp端口号的流量放行策略,咱们也就完成了iSCSI服务端全部的配置步骤了。

/iscsi/iqn.20.../tpg1/portals> ls /
o- / ........................... [...]
  o- backstores................. [...]
  | o- block ................... [Storage Objects: 1]
  | | o- disk0 ................. [/dev/md0 (40.0GiB) write-thru activated]
  | o- fileio .................. [Storage Objects: 0]
  | o- pscsi ................... [Storage Objects: 0]
  | o- ramdisk ................. [Storage Objects: 0]
  o- iscsi ..................... [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 .... [TPGs: 1]
  |   o- tpg1 .................. [no-gen-acls, no-auth]
  |     o- acls ........................................................ [ACLs: 1]
  |     | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............................................. [lun0 block/disk0 (rw)]  
    o- luns .................... [LUNs: 1]
  |     | o- lun0 .............. [block/disk0 (/dev/md0)]
  |     o- portals ............. [Portals: 1]
  |       o- 192.168.10.10:3260  [OK]
  o- loopback .................. [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
[root@linuxprobe ~]# systemctl restart targetd
[root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp 
success 
[root@linuxprobe ~]# firewall-cmd --reload 
success
17.4 配置Linux客户端

咱们现在已经有了很多的Linux服务配置经验,可以总结来说不论是什么服务,客户端的配置步骤都会比服务端更简单一些,在红帽RHEL7系统中iSCSIK客户端服务程序initiator已经被默认安装好了,而如果您在生产环境中没有默认安装的话,可以用yum软件仓库来手工安装下:

[root@linuxprobe ~]# yum install iscsi-initiator-utils 
Loaded plugins: langpacks, product-id, subscription-manager 
Package iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 already installed and latest version 
Nothing to do

如前面所提到的iSCSI协议是通过客户端名称进行验证的,而该名称也就是iSCSI客户端的唯一标识,这串信息必须与服务端配置文件中ACL访问控制列表中的信息匹配一致,否则客户端在尝试使用存储共享时就会弹出验证失败的报错信息,编辑在iSCSI客户端中的initiator名称文件,将刚刚服务端的ACL访问控制列表名称填写进入,然后重启一下客户端iscsid服务程序并加入到开机启动项中:

[root@linuxprobe ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
[root@linuxprobe ~]# systemctl restart iscsid
[root@linuxprobe ~]# systemctl enable iscsid
 ln -s '/usr/lib/systemd/system/iscsid.service' '/etc/systemd/system/multi-user.target.wants/iscsid.service'

在iSCSI客户端使用共享存储资源的步骤很简单,只需要记住刘遄老师的一个小口诀“先发现,再登陆,最后挂载并使用”,iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个iscsiadm命令对远程iSCSI服务端进行扫描发现,查看该服务器上面有那些可用的共享存储资源,-m discovery参数为定义操作目的是扫描发现可用存储资源,-t st参数为扫描发现操作的类型,-p 192.168.10.10参数为对方iSCSI服务端的IP地址:

[root@linuxprobe ~]# iscsiadm -m discovery -t st -p 192.168.10.10
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80

使用iscsiadm命令扫描发现到远程iSCSI服务端上可用的存储资源名称后,然后就要进行登陆了,-m node参数为将本机作为一台节点服务器,-T  iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80参数为要使用的存储资源名称,字符串很长手打容易错,同学们直接复制上面扫描发现到的结果即可,-p 192.168.10.10参数依然为对方iSCSI服务端的IP地址,最后使用--login或-l参数进行登陆验证吧:

[root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -p 192.168.10.10 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] successful.

在对iSCSI服务端进行登陆验证显示顺利成功后就会在系统中多了一块名为/dev/sdb的设备文件,还记得第六章中刘遄老师说过udev服务在命名硬盘名称的时候与插槽是没有关系的吧~这个远程的存储资源设备文件就这么活生生的出现到了咱们iSCSI客户端主机上面,接下来可以像使用自己电脑上的硬盘一样来对这块设备进行操作了。

[root@linuxprobe ~]# file /dev/sdb 
/dev/sdb: block special

接下来咱们可以按照之前所学习过的硬盘标准流程进行操作,这部分内容同学们应该早已烂熟于胸,如果忘记的话可以翻回到第六章再复习一下,由于这块存储资源本身也就只有2GB容量了,因此也就不进行分区步骤了,可以直接进行格式化并挂载使用:

[root@linuxprobe ~]# mkfs.xfs /dev/sdb
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/sdb               isize=256    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@linuxprobe ~]# mkdir /iscsi
[root@linuxprobe ~]# mount /dev/sdb /iscsi
[root@linuxprobe ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   18G  3.4G   15G  20% /
devtmpfs               734M     0  734M   0% /dev
tmpfs                  742M  176K  742M   1% /dev/shm
tmpfs                  742M  8.8M  734M   2% /run
tmpfs                  742M     0  742M   0% /sys/fs/cgroup
/dev/sr0               3.5G  3.5G     0 100% /media/cdrom
/dev/sda1              497M  119M  379M  24% /boot
/dev/sdb                40G   33M   40G   1% /iscsi

每个实验做成功后都会感到像解出一道数学题似得喜悦吧~接下来这块硬盘设备就像在客户端主机本地的硬盘设备一样工作,但有一点需要同学们格外的留意,就是由于udev服务对硬盘设备的命名规则是按照系统识别顺序操作的,那么当客户端主机同时使用多个远程存储资源时,如果下一次识别远程共享设备的顺序发生了变化,那么客户端所挂载目录内的文件可能也会随之混乱,所以为了防止此类问题出现,咱们应该在/etc/fatab配置文件中使用设备的UUID唯一标识符进行挂载,这样不论远程设备资源识别的顺序再怎样发生变化,系统也一样能马上找到设备所对应的正确目录。blkid命令用于查看设备的名称、文件系统及UUID内容,咱们可以用第三章中学习的管道符进行过滤显示出针对/dev/sdb设备的内容信息:

[root@linuxprobe ~]# blkid | grep /dev/sdb
/dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs" 

最最最最刘遄老师还要再啰嗦一句,由于/dev/sdb是一块网络存储设备,而iSCSI协议是基于TCP/IP网络进行传输数据的,因此咱们必须在/etc/fstab配置文件中添加上_netdev参数,代表当系统联网启动后再进行挂载操作,避免系统开机时间过长或启动失败:

[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsi xfs defaults,_netdev 0 0

对了,如果同学们不再需要使用iSCSI共享设备资源了,可以用iscsiadm命令的-u参数来将其设备卸载掉:

[root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -u
Logging out of session [sid: 7, target : iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260]
Logout of [sid: 7, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80,portal:192.168.10.10,3260] successful.
17.5 配置Windows客户端

用户使用Windows系统的客户端同样能够正常获得iSCSI服务器上共享的存储资源,并且操作的原理及步骤与Linux系统基本大致相同,在进行本实验之前请关闭Linux系统客户端,避免两台主机同时使用了iSCSI共享存储资源产生潜在问题,iSCSI服务器与Windows系统客户端的网卡可参考下表进行设置:

主机名称 操作系统 IP地址
iSCSI服务端 红帽RHEL7操作系统 192.168.10.10
Windows系统客户端 微软Windows7操作系统 192.168.10.30

第1步:运行iSCSI发起程序,在最常见的Windows7操作系统中iSCSI客户端程序已经被默认安装,咱们只需要在系统控制面板中找到系统和安全标签,然后点击管理工具按钮,如图17-3所示,进入到管理工具页面后即可看到iSCSI发起程序图标了,用力双击它的图标吧!第一次运行时会提示Microsoft iSCSI服务尚未启动,点击选项是(Y)即可自动启动并运行程序,如图17-4所示。

图17-3 在系统控制面板中点击管理工具标签

图17-4 点击iSCSI发起程序图标

第2步:扫描发现iSCSI服务端上可用的存储资源,不论是Windows系统还是Linux系统要想使用iSCSI共享存储资源都必须先进行扫描发现操作。运行iSCSI发起程序后在目标标签的目标选项框中填写入iSCSI服务端的网卡IP地址,然后点击快速链接按钮,如图17-5所示。

图17-5 填写iSCSI服务端网卡IP地址后快速连接

在快速连接提示框中可看到共享的硬盘存储资源,点击完成(D)按钮即可,如图17-6所示,回到目标标签属性页面中便可看到存储共享信息名称已经出现,如图17-7所示。

图17-6 快速连接提示框中看到共享的硬盘存储资源

图17-7 目标标签属性页中看到共享资源名称

第3步:对iSCSI服务端共享存储资源进行连接,由于咱们在iSCSI服务端程序上面设置了ACL访问控制列表限制,只有客户端名称与ACL访问控制列表策略中的保持一致才能使用远程存储资源,因此需要在配置标签中点击更改(H)按钮,将发起程序名称修改为服务端ACL所定义的名称,如图17-8所示。确认客户端发起程序名称修改正确后即可返回到目标标签属性页面中,点击连接(N)按钮进行连接请求,成功连接远程共享存储资源如图17-9所示,

图17-8 修改iSCSI客户端发起名称

图17-9 成功连接到远程存储资源

第4步:使用获得的iSCSI远程共享存储资源,首先右键点击我的电脑(计算机)图标打开计算机管理程序,如图17-10所示,然后开始对磁盘进行初始化操作,如图17-11所示,Windows系统对磁盘设备的初始化步骤十分简单,而且刘遄老师也相信同学们既然都能玩得转Linux系统,想必不会输给Windows系统吧,初始化过程步骤细节如图17-12至图17-18所示。

图17-10 计算机管理程序界面

图17-11 对磁盘设备进行初始化操作

图17-12 开始使用新建简单卷向导

图17-13 对磁盘设备进行分区操作

图17-14 设置系统中显示的盘符号码

图17-15 设置磁盘设备的格式以及卷标名称

图17-16 检查磁盘初始化信息是否正确

图17-17 等待磁盘设备初始化过程结束

图17-18 磁盘初始化完毕后弹出设备图标

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:简述iSCSI存储技术在生产环境中的作用。

答案:通过将硬件存储设备与TCP/IP互联网协议相结合,实现硬盘存储资源可提供给远程用户使用。

2:请问在Linux系统中iSCSI服务端和iSCSI客户端所使用的服务程序分别叫什么名字?

答案:iSCSI服务端程序为targetd,iSCSI客户端程序为initiator。

3:在使用targetcli命令来配置iSCSI服务端配置文件时,acls与portals参数目录中分别存放的什么内容?

答案:acls参数目录中用于存放能够访问iSCSI服务端共享存储资源的客户端名称,而portals参数目录用于定义由服务器的那个IP地址对外提供共享存储资源的服务。

4:iSCSI协议占用服务器的什么协议?什么端口号?[送分题]

答案:iSCSI协议占用服务器TCP协议的3260端口号。

5:用户在填写fstab设备挂载配置文件时,一般会将远程存储资源的UUID填写到配置文件中,为何不是设备的名称呢?

答案:因为在Linux系统中设备名称是由Udev服务进行管理的,Udev服务的设备命名规则是由设备类型及系统识别顺序等信息共同组成的,而网络存储设备具有识别顺序不稳定的特点,所以为了避免识别顺序混乱造成的挂载错误问题而选择用UUID设备唯一标识符进行挂载操作。

6:使用Windows系统对iSCSI共享存储资源使用时,与Linux系统一样要遵守那两个步骤?

答案:分别都是需要对服务端上可用的iSCSI共享存储资源进行扫描发现,然后进行验证登陆。