dpdk启动报:Permission denied
普通用户启动dpdk时,启动失败,报错:
EAL: Error creating '/run/user/0/dpdk': Permission denied
EAL: Cannot create runtime directory
分析:dpdk一天前用普通用户启动的时候还是正常的,而且用root可以启动,说明不是程序配置的问题,而是哪里的权限设置的有问题了。
解决方法1:重绑网卡,由原先的-b 改为-vb ,/usr/local/sbin/bindnet.sh -vb ,绑定的时候给与普通用户使用的权限,普通用户也能使用。失败
解决方法2:查看路径/run/user/0/dpdk , 说明是dpdk这个目录没权限
/run/user/0
drwx------ 3 root root 60 2月 3 17:54 0
/run/user/0
drwx------ 3 zhang zhang 60 4月 3 17:54 dpdk
这里分别是0 目录和dpdk 两级目录,一开始我修改dpdk目录权限为:777 ,不能启动的同时,还会报不安全的提示,
failed. msg: Permission denied ignored
后修改为755消失 ,程序能启动成功。后来又遇到几次这样的问题,直接修改 0 目录的权限就行,dpdk可以不用修改
我一开始疑惑的是为什么是 0 这个目录,不能是其他目录吗? 而且这个目录是哪个程序创建的? 后来来分析0 目录,是dpdk 在绑定网卡的时候,root用户创建,用来放临时文件的。用id -u 查看,0 是root用户的uid。而当我使用普通用户启动时,没有这个权限,
所以启动失败,当给与权限后就好了。
后来在改动,因为把0目录的属组权限更改为普通用户,也是可以的
drwxr-xr-x 2 root zhang 40 4月 8 15:51 0
至于为什么给与777 权限会报安全错误问题:网上看到的一个解释
$XDG_RUNTIME_DIR
$XDG_RUNTIME_DIR 定义了应存储用户特定的非重要性运行时文件和一些其他文件对象。
使用场景:套接字 (socket)、命名管道 (named pipes) 等。该目录必须由用户拥有,并且该用户必须是唯一具有读写访问权限的。目录的 Unix 访问模式必须是 0700。
应该是给的权限太大了,其他用户不该有 写操作,就改为755,就可以了。
浙公网安备 33010602011771号