P1[向NAS借一点空间]_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘

iSCSI 部署-将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能

本指南包括所需软件的安装步骤。这个指南涵盖了从安装必要的软件包到配置 iSCSI Target 并在客户端挂载使用的基本流程

前言:

[!NOTE]

为解决电脑空间不足且程序、游戏无法安装到smb共享的网络硬盘的问题,可通过iSCSI协议挂载NAS存储空间,使电脑将其识别为本地硬盘,实际使用上与物理硬盘一致

1. 安装必要的软件

服务端配置(Linux 系统)

  • 安装 targetcli 和相关工具

    • 对于基于 Red Hat 的系统(如 CentOS、RHEL、Fedora):

      1
      sudo yum install targetcli
    • 对于基于 Debian 的系统(如 Ubuntu):

      1
      2
      sudo apt-get update
      sudo apt-get install targetcli-fb
  • 安装 ntfs-3g 工具(用于挂载 NTFS 文件系统):

    • 对于基于 Red Hat 的系统:

      1
      sudo yum install ntfs-3g
    • 对于基于 Debian 的系统:

      1
      sudo apt-get install ntfs-3g
  • 安装 lsofpsmisc(用于查找和终止占用文件系统的进程):

    • 对于基于 Red Hat 的系统:

      1
      sudo yum install lsof psmisc
    • 对于基于 Debian 的系统:

      1
      sudo apt-get install lsof psmisc

2. 创建后端存储

  • 进入 targetcli shell:

    1
    sudo targetcli
  • 创建文件IO存储对象

    (以/home/iscsi_disk.img 路径下的img镜像为例,大小为2GB):

    1
    2
    /> cd /backstores/fileio
    /backstores/fileio> create file_or_dev=/home/iscsi_disk.img name=my_iscsi_disk size=2G

3. 配置 iSCSI Target

  • 创建一个新的 iSCSI Target

    (使用合适的 IQN,例如iqn.2025-02.com.example:server.target0)#名字而已,随意

    1
    2
    /> cd /iscsi
    /iscsi> create iqn.2025-02.com.example:server.target0
  • 进入新创建的 Target 的 TPG:

    1
    /iscsi> cd iqn.2025-02.com.example:server.target0/tpg1
  • 添加 LUN

    (将之前创建的文件IO存储对象添加为 LUN):

    1
    /iscsi/iqn.20...rget0/tpg1> luns/ create /backstores/fileio/my_iscsi_disk
  • 配置访问控制(ACL)

    (根据需要设置客户端IQN):Windows的ISCSI客户端中”配置”页面查看

    QQ20250213
    1
    /iscsi/iqn.20...rget0/tpg1> acls/ create iqn.1991-05.com.microsoft:desktop-tcn6g45(换成自己的)
  • 禁用认证(如果适用):

    1
    /iscsi/iqn.20...rget0/tpg1> set attribute authentication=0
  • 启用 TPG

    (通常默认已启用):

    1
    /iscsi/iqn.20...rget0/tpg1> enable
  • 保存配置:

    1
    2
    3
    /> cd /
    /> saveconfig
    /> exit

[!IMPORTANT]

请确保防火墙开放 3260 端口

  • 配置防火墙规则以允许3260开放

    1
    2
    sudo firewall-cmd --zone=public --add-port=3260/tcp --permanent
    sudo firewall-cmd --reload

[!NOTE]

(万不得已的情况下请使用此方法) 彻底关闭防火墙(请勿在生产环境中使用此命令 ,适用于CentOS 7 或 RHEL 7 及其衍生版本)

  1. 停止 firewalld 服务

    1
    sudo systemctl stop firewalld
  2. 禁用 firewalld 服务,使其不会在系统启动时自动启动

    1
    sudo systemctl disable firewalld
  • 重新加载 LIO 服务配置
  1. 重启 LIO 服务: 如果需要应用新的配置或者重启 LIO 服务,可以使用以下命令:

    1
    sudo systemctl restart target
  2. 开机自启动 LIO 服务: 使用下面的命令确保 target 服务会在系统启动时自动运行:

    1
    sudo systemctl enable target
  3. 检查 LIO 服务状态: 若要查看 target 服务的状态,可以使用:

    1
    sudo systemctl status target

4. 在客户端(如 Windows 11)挂载 iSCSI Target

5.服务端查看通过iSCSI挂载到Windows 的磁盘上放入的文件

使用 parted 查看分区信息

1
sudo parted /home/iscsi_disk.img unit s print

命令输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@learn home]# sudo parted /home/iscsi_disk.img unit s print

Model: (file)
Disk /home/iscsi_disk.img: 4194304s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name 标志
1 34s 32767s 32734s Microsoft reserved partition msftres
2 32768s 4190207s 4157440s ntfs Basic data partition

[root@learn home]#

根据提供的 parted 输出,/home/iscsi_disk.img 文件包含两个分区:

  1. Microsoft reserved partition(微软保留分区),从第34个扇区开始,到第32767个扇区结束。
  2. Basic data partition(基本数据分区),从第32768个扇区开始,到第4190207个扇区结束,文件系统类型为 NTFS。

为了在服务端查看第二个分区(即 NTFS 分区)中的文件内容,我们需要计算正确的偏移量,并使用该偏移量挂载这个分区。

确认分区偏移量

确保使用的偏移量是正确的。根据 parted 的输出,第二个分区(NTFS 分区)从第 32768 扇区开始,每个扇区大小为 512 字节。因此,偏移量应为:

1
偏移量 = 32768 * 512 = 16777216 字节

我们可以再次确认分区表和偏移量是否正确:

1
sudo parted /home/iscsi_disk.img unit s print
  • 使用 losetup 并检查设备

首先,使用 losetup.img 文件关联到一个循环设备,并列出所有循环设备以确认是否正确关联:

1
sudo losetup -P -f --show /home/iscsi_disk.img

这个命令会自动找到并分配一个空闲的循环设备,并且 -P 参数会自动扫描分区表并创建相应的设备节点(如 /dev/loop0p1, /dev/loop0p2 等)。

然后,列出所有循环设备:

1
lsblk

应该能看到类似 /dev/loop0p1/dev/loop0p2 这样的设备节点。其中 /dev/loop0p2 应该对应于的 NTFS 分区。

[!IMPORTANT]

NTFS 分区有时候会处于不安全的状态。具体来说,Windows 可能没有完全关闭该分区(例如通过快速启动或休眠功能),这导致了文件系统元数据仍然保存在 Windows 缓存中。因此,Linux 系统会拒绝以读写模式挂载该分区。所以要使用只读模式挂载

尝试只读挂载 (方法二选一)

如果你只是想查看文件而不需要修改它们,可以尝试以只读模式挂载:

1
sudo mount -o ro,loop,offset=16777216 /home/iscsi_disk.img /mnt
  • 或者直接挂载已识别的分区:
1
sudo mount -t ntfs-3g -o ro /dev/loop0p2 /mnt
  • 完成后的清理工作:

    1
    2
    sudo umount /mnt
    sudo losetup -d /dev/loop0

6. 解决挂载点忙的问题

如果遇到挂载点忙的问题,可以使用以下命令查找并终止占用该挂载点的进程:

  • 查找占用 /mnt 的进程:

    1
    2
    sudo fuser -m /mnt
    sudo lsof /mnt
  • 终止相关进程:

    1
    sudo kill -9 PID

    将PID替换为你找到的实际进程ID。

7.总结

[!NOTE]

以上步骤详细描述了如何在 Linux 服务器上安装必要的软件、配置 iSCSI Target、以及如何在客户端挂载和使用该 Target。同时也包含了如何在服务端查看通过 iSCSI 挂载的卷中的文件。每个环境可能有其特定的需求或限制,请根据实际情况调整上述步骤; 如果有任何问题或需要进一步的帮助,请询问我们

邮箱:dutyc.studio@qq.com 作者Github : Persistence


P1[向NAS借一点空间]_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘
http://blog.dutyc.top/2025/02/13/P1_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘/
作者
DUTYC Studio
发布于
2025年2月13日
许可协议