跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    iSCSI 与 Stratis

    适用于 CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x

    这一页讲两种企业级 Linux 上常用的块存储方案。iSCSI 让你把一台服务器上的磁盘通过网络共享给另一台服务器,对方挂载后就像本地磁盘一样使用;Stratis 则是 RHEL 提供的本地存储管理工具,在 XFS 与 device-mapper 之上提供池化、精简置备和快照,用法比传统 LVM + 文件系统更简单。

    • iSCSI 中 target(目标端)与 initiator(发起端)各自的角色
    • 用 targetcli 搭建一个 iSCSI 目标端,并持久化配置
    • 在发起端发现、登录远程块设备,并设置开机自动登录
    • 用 Stratis 创建存储池、文件系统与快照
    • 如何让 Stratis 文件系统在开机时可靠地自动挂载
    • 两台运行 EL 9.x 或 EL 10.x 的系统(iSCSI 部分需要目标端和发起端各一台)
    • sudo 权限
    • 目标端有一块可供使用的空闲磁盘或分区(如 /dev/sdb)
    • 两台主机之间网络互通

    iSCSI(Internet SCSI)通过普通的 TCP/IP 网络传输 SCSI 命令,把远程磁盘以块设备的形式提供给客户端。它涉及两个角色:

    • target(目标端):服务端,提供块设备。每个 target 用一个 IQN(iSCSI Qualified Name)标识。
    • initiator(发起端):客户端,连接 target 并把远程块设备挂载到本地,登录后会出现一个新的块设备(如 /dev/sdb)。
    iSCSI 目标端 (192.168.1.10) iSCSI 发起端 (192.168.1.20)
    /dev/sdb ──> backstore ──> LUN ──网络──> /dev/sdb(登录后出现)
    IQN + ACL 可分区/格式化/挂载
    安装目标端工具
    $ sudo dnf install targetcli

    targetcli 是一个交互式 shell,进入后用类似文件系统的路径来组织配置。下面用一块空闲磁盘 /dev/sdb 作为后端存储。

    1. 进入 targetcli 交互式 shell:

      启动 targetcli
      $ sudo targetcli
    2. 创建 backstore(后端存储)。可以用整块设备(block),也可以用一个普通文件(fileio):

      targetcli:创建 block backstore
      /> backstores/block create disk1 /dev/sdb

      如果没有空闲磁盘,可以改用文件作为后端:

      targetcli:创建 fileio backstore(可选)
      /> backstores/fileio create disk1 /var/lib/iscsi_disks/disk1.img 5G
    3. 创建 iSCSI target,会自动生成一个 IQN:

      targetcli:创建 target
      /> iscsi/ create iqn.2026-06.com.example:target1
    4. 把 backstore 作为 LUN 关联到 target:

      targetcli:创建 LUN
      /> iscsi/iqn.2026-06.com.example:target1/tpg1/luns create /backstores/block/disk1

      LUN 路径要对应你上一步创建的 backstore 类型:用 block 就是 /backstores/block/disk1,用 fileio 则改成 /backstores/fileio/disk1。

    5. 配置 ACL,只允许指定的发起端 IQN 连接。发起端的 IQN 来自其 /etc/iscsi/initiatorname.iscsi:

      targetcli:创建 ACL
      /> iscsi/iqn.2026-06.com.example:target1/tpg1/acls create iqn.2026-06.com.example:client1
    6. 退出。退出时配置会自动保存到 /etc/target/saveconfig.json:

      targetcli:退出并保存
      /> exit

    target 服务负责在开机时加载 /etc/target/saveconfig.json 中的配置。务必启用它,否则重启后所有配置都会丢失:

    启用并启动 target 服务
    $ sudo systemctl enable --now target

    iSCSI 使用 3260/tcp,需要在目标端放行:

    放行 iSCSI 端口
    $ sudo firewall-cmd --permanent --add-port=3260/tcp
    $ sudo firewall-cmd --reload

    Stratis 是 RHEL 及兼容发行版提供的本地存储管理方案。它在底层用 XFS 文件系统和 device-mapper 自动完成繁琐的配置,对外提供一个简单的命令行界面,让你像管理对象一样管理存储池、文件系统和快照,并天然支持精简置备(thin provisioning)。

    它由两部分组成:后台服务 stratisd 负责实际的存储管理,命令行工具 stratis(来自 stratis-cli)负责接收你的指令。

    安装 Stratis
    $ sudo dnf install stratisd stratis-cli
    启用并启动 stratisd
    $ sudo systemctl enable --now stratisd
    1. 用一块空闲磁盘创建一个名为 pool1 的存储池:

      创建池
      $ sudo stratis pool create pool1 /dev/sdb
    2. 在池中创建一个名为 data1 的文件系统:

      创建文件系统
      $ sudo stratis filesystem create pool1 data1
    3. 文件系统的设备路径为 /dev/stratis/<池名>/<文件系统名>。查看列表确认:

      查看池与文件系统
      $ stratis pool list
      $ stratis filesystem list

    可以先临时挂载测试一下:

    临时挂载
    $ sudo mkdir -p /mnt/data
    $ sudo mount /dev/stratis/pool1/data1 /mnt/data

    要做开机自动挂载,必须用 UUID 并加上 systemd 依赖。先查出文件系统的 UUID:

    查看文件系统 UUID
    $ sudo lsblk --output=UUID /dev/stratis/pool1/data1

    然后在 /etc/fstab 中添加(注意 x-systemd.requires=stratisd.service):

    /etc/fstab
    UUID=<上一步得到的 UUID> /mnt/data xfs defaults,x-systemd.requires=stratisd.service 0 0

    验证 fstab 配置无误(不重启就能发现错误):

    验证 fstab
    $ sudo umount /mnt/data
    $ sudo systemctl daemon-reload
    $ sudo mount -a
    $ df -hT /mnt/data

    Stratis 的快照基于精简置备,创建很快且初期几乎不占空间:

    创建快照
    $ sudo stratis filesystem snapshot pool1 data1 data1-snap

    快照本身也是一个独立的文件系统,可以单独挂载来取回数据:

    挂载快照查看数据
    $ sudo mkdir -p /mnt/snap
    $ sudo mount /dev/stratis/pool1/data1-snap /mnt/snap

    池空间不够时,可以再加一块磁盘进去,无需迁移数据:

    向池中添加磁盘
    $ sudo stratis pool add-data pool1 /dev/sdc

    最常见的原因是退出 targetcli 时配置没保存,或者没启用 target 服务。确认两件事:在 targetcli 内执行过 saveconfig(或正常 exit),并且 sudo systemctl enable --now target 已启用。

    手动保存当前配置
    $ sudo targetcli saveconfig

    按顺序排查:

    • 发起端 /etc/iscsi/initiatorname.iscsi 中的 IQN 是否和目标端 ACL 里配置的完全一致(拼写、大小写都要对)。
    • 目标端防火墙是否放行了 3260/tcp。
    • 网络是否互通(ping 目标端 IP),发现命令 iscsiadm -m discovery 能否返回 target 列表。

    几乎都是 fstab 条目漏了 x-systemd.requires=stratisd.service。补上这个选项,让挂载等待 stratisd 就绪后再进行。同时确认使用的是 UUID 而不是 /dev/stratis/... 路径。

    能不能用 fdisk/LVM 直接动 Stratis 池里的盘

    Section titled “能不能用 fdisk/LVM 直接动 Stratis 池里的盘”

    不能。池内的物理设备由 Stratis 独占管理,所有操作必须通过 stratis 命令完成。直接用其它工具操作会破坏元数据。