资源为什么会丢失,以及怎么防范
相关帖子
-
正好之前写了个 js, 定时检测是有存在: 失效的引用块 和 丢失的资源文件, 分别对应以下位置


// [js] 定时检测无效的引用块: 20250726_212948 (() => { const CFG = { TIME_INTERVAL: "10", // 检测间隔, 单位:分钟 } async function myFetch(api, data) { return fetch(api, { method: "POST", body: JSON.stringify(data), }).then((response) => { if (response.ok) { return response.json(); } else { throw new Error("Failed to get file content"); } }).catch((error) => { console.log('请求失败:', error); }); } async function myFetchPost(api, data, cb = null) { cb(await myFetch(api, data)); } const syapi = { handle_post: function (api, data, cb) { myFetchPost(api, data, (rsp) => { if (rsp.code == 0) { if (cb) cb(rsp.data); return; } console.log(rsp.msg); }); }, get_invalid_block: function(cb) { syapi.handle_post('/api/search/listInvalidBlockRefs', {page: 1}, (rsp) => cb(rsp.blocks)); }, get_missing_file: function(cb) { syapi.handle_post('api/asset/getMissingAssets', {}, (rsp) => cb(rsp.missingAssets)); }, push_message: function(msg, timeout=5000) { syapi.handle_post('/api/notification/pushMsg', {msg, timeout}); }, } function get_time_now_str() { const now = new Date(); // 获取时间部分 const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); const milliseconds = String(now.getMilliseconds()).padStart(3, '0'); return `[${hours}:${minutes}:${seconds}]`; } async function check_invalid_block_timer_cb() { const time_str = get_time_now_str(); console.log(`${time_str}: 定时检测: 无效的引用块/丢失的资源文件`); syapi.get_invalid_block((blocks) => { const cnt = blocks.length; if (cnt) { syapi.push_message(`${time_str} 检测到${cnt}个无效的引用块, 请及时处理`); } }); syapi.get_missing_file((files) => { const cnt = files.length; if (cnt) { syapi.push_message(`${time_str} 检测到${cnt}个丢失的资源文件, 请及时处理`); } }); } check_invalid_block_timer_cb(); const intervalId = setInterval(check_invalid_block_timer_cb, CFG.TIME_INTERVAL*60*1000); // 如果需要停止定时器,可以调用 clearInterval(intervalId); })() -
资源文件丢失, 我目前遇到几种情况
- 文件真实存在, 但是文件名包含特殊字符, 思源无法识别导致
- 自己手动(小概率) / 被动(清理软件) 将工作空间/assets/对应的文件删掉了
- 同步功能导致, 可能是同步导致的,我今天刚遇到的, 丢失的文件都是 20250912213046-xxxxxxx.tmp 结尾的

如何追溯
丢失那里可以有文件的 id
使用全局搜索 搜一下这个 id, 看看 id 对应的是什么文件, 文件所在位置 在哪里, 通过笔记的上下文, 推测出来具体是哪个文件丢失了
如果可以的话, 再追溯下为什么丢了
如何找回
在数据历史那里, 通过挨个对比之前与现在的数据快照, 看看能不能找回丢失的对应的文件
备注: 以上只是我的经验
1 回复



欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于