Linux搭建ISCSI存储服务器

iscsi(iscsi= internet Small Computer System Interface )是由IEETF开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,ISCSI协议被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因为IP网络的广泛应用, ISCSI能够在LAN、WAN甚至internet上进行数据传送,使得数据的存储不再受地域的限制。

ISCSI技术的核心是在TCP/IP网络上传输SCSI协议,是指用TCP/IP报文、和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输,如下图:

iSCSI协议定义了在 TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方 法。发送端将SCSI命令和数据封装到 TCP/IP 包中再通过网络转发,接收端收到 TCP/IP 包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就像访问本地的 SCSI设备一样简单。

一. 搭建ISCSI存储服务器

这里将Target主机第二块硬盘的第一个主分区(硬盘分区标识为/dev/sdb1)作为iSCSI共享磁盘,硬盘大小为20G,共享给一台linux主机使用。

1、在ISCSI存储服务器上安装iscsi target软件包,如下图所示:

2、iscsi target配置文件是/etc/tgt/targets.conf,此文件中的配置项默认全被注示掉了。编辑该文件,实现简单的ISCSI存储服务器配置。在文件尾部添加如下内容:

注:Target的命名在同一子网内应该是唯一的,标准命名方式为:iqn.yyyy-mm.[:identifier]其中:

iqn:表示“iSCSI Qualified Name”,简称iqn。yyyy-mm:表示年份-月份。这里是2011-08。 reversed domain name:表示倒过来的域名,这里是com.example。 identifier:表示识别代码,这里是disk

backing-store用于指定存储设备,一般指非实际的物理磁盘,如LVM卷、某个分区、raid磁盘阵列。

然后启动tgtd服务,并设置系统启动时自动启动,iscsi通信的端口:3260/tcp,以明文传输数据

#service tgtd start

#chkconfig tgtd on

运行tgtadm --lld iscsi --op show --mode target查看target信息

至此,iscsi target存储服务器配置完成,使用iSCSI Initiator就可以连接iscsi target服务器了。

二. 安装和配置iscsi客户端

1、安装iscsi发起端软件:iscsi-initiator-utils软件包

#service iscsi start

#chkconfig iscsi on

2、查找iscsi服务器上的iscsi目标,即iscsi发现。

执行iscsiadm -m discovery –t st –p iscsi服务器的IP

iscsiadm -m discovery -t sendtargets -p targetIP地址:端口号

若是默认端口3260可以省略不写。

3、登录服务器上的iscsi目标,即iscsi注册

执行iscsiadm -m node -T target名称 -p targetIP地址:端口号 --login

退出iscsi盘阵

执行iscsiadm -m node -T target名称 -p targetIP地址:端口号 --logout

4、查看/dev/disk/by-path目录中iscsi符号链接所指向的位置或fdisk -l查看磁盘情况或检查iscsi的状态:service iscsi status或dmesg |tail

此时,可以使用iscsi磁盘,就好像它是本地连接硬盘驱动器。

5、对连接的iscsi磁盘分区并实现自动挂载

未分区前显示sdb信息如下,通过下图可以看出sdb还未建立分区

执行fdisk /dev/sdb分区并在创建好的分区上创建文件系统(执行mkfs –t ext4 /dev/sdb命令创建文件系统)

执行完分区和创建文件系统的命令后显示sdb信息如下:创建了一个主分区/dev/sdb1

修改/etc/fstab文件实现自动挂载

执行blkid /dev/sdb1获得sdb1分区的UUID

修改/etc/fstab文件自动挂载sdb1分区,如下图所示:

测试自动挂载:mount –a或重启系统后执行df –hT查看挂载情况

注意:

使用blkid确定文件系统UUID并使用UUID挂载,而不是/dev/sd*设备名称。(每次引导时显示的设备名称都不同,具体取决于iscsi设备通过网络进行响应的顺序,如果按设备名称挂载,这会导致使用错误的设备)

在/etc/fstab中使用_netdev作为挂载选项。(这将确保客户端不会尝试挂载文件系统,直至启用联网,否则,在引导时系统将出错)

确保iscsi和iscsid服务在引导时将启动

#chkconfig iscsi on

#chkconfig iscsid on

6、删除iscsi

卸载新文件系统并删除/etc/fstab中的行或对其添加批注,退出并删除iscsi目标的条目

7、加密iscsi (与加密一个普通LINUX分区一样)

三. 配置iscsi的发现和注册

1、#cryptsetup luksFormat /dev/sdb1 对iscsi的上新分区进行加密并设置解密密码

Are you sure? (Type uppercase yes): YES (输入大写的YES来确定创建加密分区)

Enter LUKS passphrase: (输入创建密码,你将用密码来保护你的加密分区。如果你把密码弄丢了,那就太不幸了,你就无法取回这些数据了)

Verify passphrase: (确认密码)

2、这样一个加密分区就建立好了.接下来我们需要创建一个可以挂载的分区并给它取个名字(这里我给取名为sdb1, 你也可以叫它test、fred、我的秘密分区或者任何你喜欢的名字)

#cryptsetup luksOpen /dev/sdb1 sdb1

Enter LUKS passphrase: (这里输入的是创建加密分区时设置的密码)

它将会被创建在/dev/mapper/下面.这里就是/dev/mapper/sdb1,可以用ls命令查看

3、现在将该分区格式化为ext4文件系统。mkfs.ext4 /dev/mapper/sdb1

4、接下来我们创建一个用于挂载的挂载点并挂载. 记住,你必须从/dev/mapper/路径下使用该设备

5、现在将该分区格式化为ext4文件系统。mkfs.ext4 /dev/mapper/sdb1

6、接下来我们创建一个用于挂载的挂载点并挂载. 记住,你必须从/dev/mapper/路径下使用该设备

# mkdir /bak

#mount /dev/mapper/sdb1 /bak

好了,现在你可以使用你的加密分区了,如向其内创建或存储一些文件。

使用完毕后为了保护数据的隐密,我们需要取消挂载并关闭加密分区.

# umount /bak

# cryptsetup luksClose sdb1

只有在打开加密设备的时候,你才需要输入LUKS密码。记住,如果丢了密码,你就完蛋了。你可以删除分区重新再来,但是数据是无法恢复的。打开加密设备并加载以后,你就可以像使用其它分区一样使用它了。

#cryptsetup luksOpen /dev/sdb1 sdb1

Enter LUKS passphrase: (这里输入的是创建加密分区时设置的密码)

附加资料:

系统每次启动自动挂载加密分区:

/etc/crypttab包含要在系统启动期间解锁的设备列表,每一行列出一个设备,使用空格分隔字段。其格式如下:

name /dev/sdaN /path/to/password/file

每个字段的含义:

name字段是给加密分区取的一个名字

/dev/sdaN字段用于加密的分区设备

/path/to/password/file字段是用于解锁设备的密码文件,如果该字段为空或设置为none,在系统启动时,系统会提示用户输入解密密码

具体操作如下:

修改/etc/crypttab并添加如下内容,这个文件的作用是每次系统启动时挂载加密分区时要询问的的密码

sdb1 /dev/sdb1 /path/file

具体操作如下:

1、修改/etc/crypttab并添加如下内容,这个文件的作用是每次系统启动时挂载加密分区时要询问的的密码

sdb1 /dev/sdb1 /path/file

若/path/file省略或不设置,则系统在启动时将要求用户输入密码

2、修改/etc/fstab文件:添加如下内容

/dev/mapper/sdb1 /挂载点 ext4 defaults 0 0

注:sdb1是给加密分区取的名字即执行cryptsetup luksOpen /dev/sdb1 sdb1命令后给分区起的名称

3、echo “密码” > /path/file “密码”创建加密分区时设的密码

4、chown root /path/file

5、chmod 600 /path/file

6、执行下列命令:cryptsetup luksAddKey /dev/sdb1 /path/file

四、修改内核启动参数

识别运行内核:

cat /etc/redhat-release //安装Red Hat Enterprise Linux版本。

uname -r //当前运行的内核版本

uname -m 或arch //当前运行所在处理器体系结构

yum list installed kernel\* 安装的内核版本

Grub 的配置文件位于 "/boot/grub/grub.conf", 更改后将对以后的每次启动有效。 此配置文件可分为两个大的部分:全局配置和菜单项配置:A. 全局配置命令全局配置命令从配置文件最上方到第一个 "title" 命令之前结束。default 0timeout 10splashimage (hd0,2)/boot/grub/splash.xpm.gzpassword --md5 $1$tBWhgwVY$sIzNYKY/iV9rZ4keYAkaQ/ #设置了密码的才有此项default 菜单号: 指定 Grub 默认启动项(默认引导的系统), 菜单号从0 开始, 0 表示下面的第一个菜单项timeout seconds: 从 Grub 启动界面出现到以默认启动项引导系统之间等待用户选择的时间。splashimage full_path_of_xpm_or_xpm.gz: 指定启动菜单的背景文件(xpm 图像或其gzip 压缩文件)。B. 菜单项配置从”title”开始到下一个 "title" 之前为一个启动菜单项, 即引导一个操作系统所需的参数

title: 定义启动菜单项的名称root: 设置 Grub 的根设备 (root)为 Linux 内核所在分区kernel: 后跟 Linux 内核文件为参数, 加载 Linux 内核文件initrd: 加载镜像文件

1、临时修改内核启动参数

系统启动到GRUB阶段时,中断启动,选择要引导的系统。如图所示:

按“a”键进入修改内核引导参数界面,输入系统启动时要引导的内核参数。如下图所示:

按回车键继续启动系统。

与内核引导相关的引导参数可以查看如下文件:

/usr/share/doc/kernel-doc-*/Documentation/kernel-parameters.txt文件。要确保安装kernel-doc包。

如:enforcing参数:selinux控制;enforcing=1可设置强制模式,enforcing=0可设置许可模式。

Selinux参数:selinux控制;selinux=0可完全禁用selinux,selinux=1可启用selinux

vga参数:改变字符终端的分辨率,vga=788

vga参数值的意义,这里的值给出的是十进制的,也可以使用十六进制,如vga=0x317。

# VGA Mode Args# Color 640x480 800x600 1024x768 1280x1024# 256 769 771 773 775# 32K 784 787 790 793# 64K 785 788 791 794# 16M 786 789 792 795

2、永久修改内核启动参数:使用grub.conf文件

在/boot/grub/grub.conf或/etc/grub.conf文件中将内核参数添加到kernel一行中的rhgb quiet前面,注意这一声明前后与其他部分间有空格,如图所示:

你的修改应该在/proc/cmdline文件中可以查看到。

环回设备用于像挂载设备一样挂载文件。例如,对于访问ISO映像来说这种设备非常方便。默认情况下,内核支持8个环回设备。修改服务器的内核命令行,使其支持32个环回设备。

列出/dev目录中的环回设备(环回设备的名称都是loop*):ls /dev/loop*

将参数max_loop=32添加到/boot/grub/grub.conf中的内核命令行,重启服务器,再次查看环回设备的数量。

3、给GRUB设密码:(务必将password行置于第一个title行的上方,这样才可全局应用)

明文存储密码:在grub.conf文件的全局配置中添加password 密码

密文存储密码:先执行grup-md5-crypt命令生成密码加密字串,然后修改grub.conf文件在全局配置中添加password --md5 加密密码字串

4、通过/etc/sysctl.conf文件或sysctl命令查看或调整内核网络参数

修改/etc/sysctl.conf文件以永久更改,然后运行sysctl –p以重新加载

编辑/Alex 美编/Mary

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180710G06O9Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券