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,就可以了。

posted on 2024-04-15 18:02  如尘如水  阅读(751)  评论(0)    收藏  举报