[TOC]

0.背景

由于我的笔记本存储空间告急,但是NAS上的空间还很富裕,于是尝试将NAS的空间挂载到笔记本上使用。我想用来做新创建虚拟机的硬盘,smb/cifs共享肯定不适用在这方面,于是转头看向了ISCSI。
但由于我的NAS为了方便管理,使用的是Windows 10 LTSC系统,无法创建ISCSI Server,但好在电脑有Hyper-V,于是设想创建一个Centos虚拟机,在虚拟机上安装ISCSI服务。
NAS是低功耗的J1900,4G内存,带一个2t的酷狼硬盘,带一个centos的虚拟机应该还没啥问题
3151094-20240115143132649-744435959.png
创建一个Centos 8的虚拟机,交换机选择桥接模式,分配了30G的空间作为系统盘,打算随后挂载数据盘。

1.系统环境设置

首先设置系统环境

1.1 固定ip

使用ip addr命令获取到网卡接口名称为eth0

# 设置ip地址
nmcli connection modify eth0 ipv4.address 192.168.1.113
# 设置网关地址
nmcli connection modify eth0 ipv4.gateway 192.168.1.1
# 设置DNS地址
nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
# 重新启动网络
nmcli connection down eth0 && nmcli connection up eth0

随后使用新ip即可连接网络。

1.2 换源

由于centos 8已经停止支持,所以需要更换一下软件源

# 备份原文件
mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*repo /etc/yum.repos.d/backup
# 下载阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# 清理缓存
yum clean all && yum makecache

测试可以正常使用。
3151094-20240115152012048-2020715699.png

2.设置数据盘

将虚拟机关机,随后在Hyper-V的“虚拟机设置/IDE控制器”中,新建一块硬盘驱动器。
新建一块“VHDX”格式的虚拟硬盘,类型选择扩展,大小先设置为512GB,名字设置成data.vhdx并修改存储路径。
3151094-20240115152528930-1770489342.png
随后启动虚拟机,使用lsblk确定硬盘是否添加成功

lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   30G  0 disk
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   29G  0 part
  ├─cl-root 253:0    0   26G  0 lvm  /
  └─cl-swap 253:1    0    3G  0 lvm  [SWAP]
sdb           8:16   0  512G  0 disk
sr0          11:0    1 1024M  0 rom

可以看到,系统已经成功识别了一个512G的硬盘,并将其命名为“sdb”。

2.1 格式化数据盘并挂载

注意:以下命令均建立在root权限上:
使用 fdisk 创建一个新的分区:

fdisk /dev/sdb

随后:
g创建一个新的GPT分区表
n创建新分区

  分区号 (1-128, 默认  1): 按回车选择默认
  第一个扇区 (2048-1073741790, 默认 2048):按回车选择默认
  上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-1073741790, 默认 1073741790):按回车选择默认

选择默认即可
w保存更改并退出
3151094-20240115154402195-65818539.png

创建一个物理卷(Physical volume)

pvcreate /dev/sdb1

创建一个卷组

vgcreate vgroup1 /dev/sdb1

创建逻辑卷

lvcreate -l 100%FREE -n mylv vgroup1

将逻辑卷格式化为ext4

mkfs.ext4 /dev/vgroup1/mylv

创建一个挂载点目录

mkdir /mnt/iscsidata

挂载目录

mount /dev/vgroup1/mylv /mnt/iscsidata

3151094-20240115155907875-1074409898.png
随后设置开机自动挂载此目录

echo '/dev/vgroup1/mylv /mnt/iscsidata ext4 defaults 0 0' | tee -a /etc/fstab

3.配置iscsi服务

3.1 安装软件包

yum install targetcli -y
systemctl start target
systemctl enable target

3151094-20240115160657653-2074537110.png
同时为文件夹设置权限,防止出现奇奇怪怪的问题

chmod -R 0755 /mnt/iscsidata

3.2 配置iSCSI

# 卸载之前可能挂载在 /mnt/iscsidata 上的文件系统,确保无冲突
umount /mnt/iscsidata

# 进入targetcli环境
targetcli

# 创建一个存储对象,关联到 LVM 逻辑卷 /dev/vgroup1/mylv
cd /backstores/block
create mylvmbackstore /dev/vgroup1/mylv

# 切换到 iSCSI 目录,创建一个新的 iSCSI Target,名称为 iqn.2024-01.cn.foxhank:mytarget
# 这里的名称可以自行设置,格式为iqn.yyyy-mm.reverse.domain.name:identifier
# yyyy-mm 表示年份和月份,用于确保名称的唯一性;
# reverse.domain.name 是反向域名格式,比如com.example;
# 最后的 identifier 是自定义部分,用来区分不同的目标。
cd /iscsi
create iqn.2024-01.cn.foxhank:mytarget

# 进入新创建的 iSCSI Target 的 TPG1下的 LUNs 子目录
cd iqn.2024-01.cn.foxhank:mytarget/tpg1/luns

# 在当前 TPG 中创建一个 LUN ,将之前创建的 backstore 'mylvmbackstore' 关联到此 LUN
create /backstores/block/mylvmbackstore

# 保存配置并退出
exit

结果如下:

[root@bogon ~]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> cd /backstores/block
/backstores/block> create mylvmbackstore /dev/vgroup1/mylv
Created block storage object mylvmbackstore using /dev/vgroup1/mylv.

> /iscsi create iqn.2024-01.cn.foxhank:mytarget
Created target iqn.2024-01.cn.foxhank:mytarget.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

/iscsi/iqn.20...get/tpg1/luns> create /backstores/block/mylvmbackstore
Created LUN 0.

/iscsi/iqn.20...get/tpg1/luns> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

至此,iscsi设备已经配置完毕。

3.3 设置授权

虽然现在已经配置完毕,但是使用iSCSI发起程序直接连接,会提示“授权失败”。
观察/var/log/messages日志文件,显示

Jan 15 16:40:17 bogon kernel: iSCSI Initiator Node: iqn.1991-05.com.microsoft:honor-magicbook14 is not authorized to access iSCSI target portal group: 1.
Jan 15 16:40:17 bogon kernel: iSCSI Login negotiation failed.

问题出在没有授权上。
本机名为iqn.1991-05.com.microsoft:honor-magicbook14,所以需要对本机进行授权

# 进入命令行
cd targetcli

# 进入到目标的TPG 1
cd /iscsi/iqn.2024-01.cn.foxhank:mytarget/tpg1/acls/

# 创建新的ACL授权发起程序访问
create iqn.1991-05.com.microsoft:honor-magicbook14

# 保存配置并退出
saveconfig
exit

然后在Windows系统中打开iSCSI发起程序(开始/Windows工具/iSCSI发起程序),目标栏中输入服务器ip地址,随后点击“快速链接”。
若成功,状态就变成“已连接”
3151094-20240115175858171-177926643.png
随后进入计算机管理/磁盘管理中,就可以看到一块新磁盘
3151094-20240115182152655-6706752.png

初始化此硬盘,新建一个简单卷并指定盘符,随后就可使用此块硬盘了。
3151094-20240115182301224-1243745938.png
3151094-20240115182337534-993987897.png
由于我的服务端存在瓶颈,速度不是很快,但也能接受,拿来存一些冷数据还是很好的
3151094-20240115183233797-1337370172.png