训练集权限问题 Check failed: mdb_status == 0 (13 vs .0) Permissionm denied

本文介绍了当遇到训练集权限报错,具体错误信息为'Checkfailed:mdb_status==0(13vs.0)Permissionmdenied'时的两种解决方法。第一种方法是通过使用sudo chown命令将文件夹的拥有者更改为当前用户,第二种方法是修改文件夹的权限设置,使所有用户都能访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

训练集权限报错

问题描述:

Check failed: mdb_status == 0 (13 vs .0) Permissionm denied

如下图所示:

问题图片
解决方法:
1、文件夹降权:

sudo chown +用户名 +文件名

例如我的用户名为smart ,训练集文件名为 mnist_test_lmdb,则代码如下:

sudo chown smart mnist_test_lmdb/

降权成功后,会发现文件夹的锁的标志会消失。

2、给予所用用户权限:
打开至训练集文件夹,右键进行以下更改:

Properties(属性)--->Permission(权限)--->Access--->Access file

即可。

### LMDB中Assertion Failed错误的原因与解决方案 LMDB(Lightning Memory-Mapped Database)是一种嵌入式键值存储库,广泛应用于高性能场景。当遇到 `Assertion failed on expression: 'errors == MDB_SUCCESS || errors == MDB_NOTFOUND'` 错误时,通常表明在数据库操作过程中出现了未预期的状态或条件[^1]。 #### 错误原因分析 1. **事务提交冲突** 如果在同一事务中多次调用 `mdb_txn_commit`,可能会导致 `Asset database transaction committed twice!` 的错误提示。这是因为 LMDB 不允许对同一事务进行多次提交操作[^2]。 2. **数据库状态异常** 当数据库的返回值既不是 `MDB_SUCCESS` 也不是 `MDB_NOTFOUND` 时,断言会失败。这通常意味着在数据库操作中遇到了其他类型的错误,例如文件损坏、权限问题或内存不足等[^1]。 3. **环境配置问题** 在某些情况下,开发环境或运行时环境的配置可能导致此类错误。例如,Unity 中的许可证过期或未正确激活可能会间接影响 LMDB 的正常运行。 #### 解决方案 1. **检查事务管理逻辑** 确保每个事务只被提交一次。可以通过代码逻辑避免重复调用 `mdb_txn_commit`。例如: ```c if (txn != NULL) { mdb_txn_commit(txn); txn = NULL; } ``` 2. **验证数据库完整性** 使用 LMDB 提供的工具(如 `mdb_stat` 或 `mdb_dump`)检查数据库文件是否损坏。如果发现损坏,可以尝试恢复或重新初始化数据库[^1]。 3. **更新运行环境** 确保使用的是最新版本的 LMDB 库,并检查运行时环境是否存在兼容性问题。对于 Unity 用户,确保许可证处于有效状态并已正确激活。 4. **捕获并处理错误** 在代码中添加错误处理逻辑,捕获非预期的返回值并记录日志以便后续排查。例如: ```c int rc = mdb_get(txn, dbi, &key, &data); if (rc != MDB_SUCCESS && rc != MDB_NOTFOUND) { fprintf(stderr, "Error in mdb_get: %s\n", mdb_strerror(rc)); } ``` 5. **清理残留资源** 如果问题仍然存在,尝试清理可能的残留资源,例如删除临时文件或重启应用程序以释放锁定的资源[^1]。 ### 示例代码:事务管理改进 以下是一个改进后的事务管理示例,避免重复提交: ```c #include <lmdb.h> #include <stdio.h> void safe_commit(MDB_txn* txn) { if (txn != NULL) { int rc = mdb_txn_commit(txn); if (rc != MDB_SUCCESS) { fprintf(stderr, "Transaction commit failed: %s\n", mdb_strerror(rc)); } txn = NULL; } } int main() { MDB_env* env; MDB_dbi dbi; MDB_txn* txn = NULL; MDB_val key, data; // 初始化环境和数据库 mdb_env_create(&env); mdb_env_open(env, "./example.mdb", 0, 0664); mdb_txn_begin(env, NULL, 0, &txn); mdb_dbi_open(txn, NULL, 0, &dbi); // 数据操作逻辑 key.mv_size = sizeof(int); key.mv_data = (void*)&some_key; int rc = mdb_get(txn, dbi, &key, &data); if (rc != MDB_SUCCESS && rc != MDB_NOTFOUND) { fprintf(stderr, "Error in mdb_get: %s\n", mdb_strerror(rc)); } // 安全提交事务 safe_commit(txn); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值