Db2 LUW chroot环境启动失败求助:nosuid挂载相关报错
Db2 LUW Chroot环境下启动db2start失败的问题排查与解决
已完成Db2 LUW的chroot环境搭建,所有依赖库和可执行文件已复制到chroot目录,db2 CLP、db2trc等命令可正常运行,但执行db2start时启动失败。
报错详情
db2trc日志内容
Data1 (PD_TYPE_STRING,95) String:
database monitor initialization was skipped, instance home directory may be mounted with nosuid
db2diag.log报错信息
49655 | | | | | sqlnlsMessage data [probe 170]
bytes 136 Data1 (PD_TYPE_DEFAULT,128) Hexdump: 5351 4C31 3634 314E 2020 5468 6520 6462 SQL1641N The db 3273 7461 7274 2063 6F6D 6D61 6E64 2066 2start command f 6169 6C65 6420 6265 6361 7573 6520 6F6E ailed because on 6520 6F72 206D 6F72 6520 6461 7461 6261 e or more databa 7365 200A 6D61 6E61 6765 7220 7072 6F67 se .manager prog 7261 6D20 6669 6C65 7320 7761 7320 7072 ram files was pr 6576 656E 7465 6420 6672 6F6D 2065 7865 evented from exe 6375 7469 6E67 2077 6974 6820 726F 6F74 cuting with root
对应错误为SQL1641N,提示数据库管理器程序文件无法以root权限执行,同时伴随SQL1042错误。
操作命令
进入chroot环境的命令
usr/bin/sudo /usr/bin/setpriv --no-new-privs /usr/bin/prlimit --fsize=unlimited:unlimited --data=unlimited:unlimited --nofile=1048576:1048576 --core=unlimited:unlimited --stack=unlimited: --nproc=unlimited:unlimited /usr/sbin/chroot --userspec:db2inst1:db2inst1 --groups:db2inst1 /db2root /bin/bash
chroot内执行的命令
source /home/db2inst1/sqllib/db2profile db2start
已执行的前置操作
- 创建chroot内实例目录:
mkdir -p /db2root/home/db2inst1 - 绑定挂载实例主目录:
mount --bind /home/db2inst1 /db2root/home/db2inst1 && mount -o "remount,bind,rw" /db2root/home/db2inst1 - 尝试移除挂载的
rw选项,问题未解决
环境信息
- 系统:Linux
- Db2 LUW版本:11.5.8
- 部署方式:root用户通过
db2setup -f ../db2server.rsp将安装包部署在独立文件系统/db2bin/db,执行db2icrt -u db2fenc1 db2inst1创建实例 - 非chroot环境下,直接以db2inst1用户登录可正常启动Db2
解决方案
1. 彻底检查挂载选项,移除nosuid
需确认所有相关挂载点(实例主目录所在文件系统、chroot根目录所在文件系统)的挂载属性中无nosuid:
- 查看当前挂载信息:
mount | grep -E "/home/db2inst1|/db2root" - 若存在
nosuid,重新挂载时明确添加suid并移除nosuid:
注意:如果mount -o remount,bind,rw,suid /db2root/home/db2inst1/home/db2inst1所在原始文件系统本身带nosuid,需先调整原始挂载,再重新绑定到chroot目录。
2. 调整setpriv参数,移除--no-new-privs
setpriv --no-new-privs会阻止进程获取新权限,而Db2启动过程中部分程序需要setuid权限切换身份,需去掉该参数,同时修正命令中的路径和参数格式:
/usr/bin/sudo /usr/bin/prlimit --fsize=unlimited:unlimited --data=unlimited:unlimited --nofile=1048576:1048576 --core=unlimited:unlimited --stack=unlimited: --nproc=unlimited:unlimited /usr/sbin/chroot --userspec=db2inst1:db2inst1 --groups=db2inst1 /db2root /bin/bash
3. 确认chroot内Db2文件权限
检查chroot目录内的Db2安装文件和实例目录权限是否与原系统一致:
# 原系统执行 ls -l /db2bin/db/adm/db2sysc # chroot内执行 ls -l /db2bin/db/adm/db2sysc
确保db2sysc等关键程序保留setuid权限(权限位显示为-rwsr-xr-x),若权限丢失,重新复制文件时保留权限:
cp -a /db2bin/db/* /db2root/db2bin/db/
4. 检查SELinux/AppArmor限制
若系统启用了SELinux或AppArmor,可能阻止chroot内程序执行setuid操作:
- 临时关闭SELinux测试:
setenforce 0,重新进入chroot尝试启动Db2 - 对于AppArmor,临时禁用Db2相关profile:
aa-disable /etc/apparmor.d/usr.sbin.db2sysc
内容的提问来源于stack exchange,提问作者rssarkar
相关产品推荐
相关产品推荐

