Kubernetes 1.19.6集群挂载iSCSI卷报ext4 wrong fs type错误求助
核心问题定位
当前mount退出码32报错的本质是Kubelet挂载时读取的设备路径与实际写入文件系统的位置不匹配,与iSCSI连接本身无关——从当前展示的状态信息看,iSCSI会话、设备映射路径、服务运行状态全部正常,问题出在设备文件系统制备逻辑与K8s iSCSI卷的挂载规则存在错位。
已排查确认的排除项
- iSCSI链路连通性正常:
iscsiadm -m session显示会话已登录,/dev/disk/by-path下的软链接正确指向远端LUN对应的本地/dev/sdb设备,无链路中断、多路径映射错位问题。 - 系统依赖完整:
open-iscsi、iscsid服务均正常运行,群晖RS1221侧的厚制备LUN在线,无存储侧离线问题。 - 基础环境版本匹配:K8s 1.19.6、open-iscsi 2.0.874 版本兼容,不存在驱动版本不支持的问题。
根因定位
当前操作存在两个核心错位:
- 文件系统制备位置与K8s挂载的目标设备不一致
K8s内置iSCSI卷驱动挂载时,固定使用/dev/disk/by-path/ip-xxx-iscsi-iqn-xxx-lun-x路径,从提供的映射关系看,这个软链接指向整个块设备/dev/sdb(整盘),而非手动创建的分区/dev/sdb1。
当ext4文件系统被格式化到sdb1分区上时,Kubelet实际尝试挂载的是整盘/dev/sdb——该盘上只有GPT分区表,没有直接在整盘写入ext4超级块,自然触发“wrong superblock”报错。 - 挂载残留冲突
之前尝试手动挂载sdb、配置LVM、提前挂载到/mnt路径的操作,在Kubelet的临时挂载目录下留下了旧的挂载条目,会触发“device busy”类报错。
落地修复步骤
按顺序操作即可解决问题:
- 清理所有关联iSCSI设备的残留配置
- 登录kt04节点,执行
df -h | grep sdb确认所有手动挂载的sdb/sdb1条目全部卸载 - 清理Kubelet残留的临时挂载目录:
sudo rm -rf /var/lib/kubelet/plugins/kubernetes.io/iscsi/iface-default/192.168.20.100:3260-iqn.2020-09.com.xxxx:yyyy.testtarget-lun-1 - 清除
sdb上残留的分区、LVM配置,让设备回到裸盘状态:sudo wipefs -a /dev/sdb
- 登录kt04节点,执行
- 按照K8s iSCSI卷的规则制备文件系统
K8s iSCSI卷支持两种使用方式,二选一即可,优先推荐整盘格式化方案,避免分区错位问题:- 整盘直接格式化为ext4(推荐):不对盘做分区操作,直接对Kubelet要挂载的整盘设备创建文件系统:
sudo mkfs.ext4 /dev/disk/by-path/ip-192.168.20.100:3260-iscsi-iqn.2020-09.com.xxxx:yyyy.testtarget-lun-1 - 如果需要使用分区方案,需要调整udev规则让
/dev/disk/by-path下的软链接指向目标分区,同时保证文件系统写入分区位置,该方案配置复杂,不推荐新手使用。
- 整盘直接格式化为ext4(推荐):不对盘做分区操作,直接对Kubelet要挂载的整盘设备创建文件系统:
- 重启kubelet服务,让驱动重新识别设备状态:
sudo systemctl restart kubelet - 重新创建测试Pod,验证挂载状态。
注意事项
- 不要手动将iSCSI设备提前挂载到系统固定路径下,Kubelet会自行管理临时挂载点,手动提前挂载一定会触发“device busy”报错。
- 这种整盘ext4格式的iSCSI块设备完全支持fallocate操作,可以替代原有NFS存储,避免NFS场景下MongoDB因fallocate不兼容引发的系统崩溃问题。
- 如果后续使用该存储卷部署MongoDB,建议在群晖侧关闭对应LUN的写缓存,避免出现IO一致性问题。
内容的提问来源于stack exchange,提问作者KiddHsieh
相关产品推荐
相关产品推荐

