WebDAV服务器丢失,如何从.davfs2/cache恢复原文件系统?
从davfs2缓存恢复WebDAV文件
嘿,我之前正好碰到过一模一样的情况——远程WebDAV服务器挂了,但davfs2的缓存里存了几乎所有数据,而且完全可以不用挂载就安全恢复文件,完全不用怕弄坏缓存。咱们一步步来:
第一步:先给缓存做个完整备份!
这是最关键的一步,绝对不能跳过。不管后面操作出什么问题,备份都能让你回到原点:
cp -a ~/.davfs2 ~/.davfs2_full_backup
这条命令会把整个.davfs2目录原封不动复制一份,后续所有操作都在原目录上做,备份就老老实实待着当后手。
第二步:搞清楚缓存文件对应哪些原始路径
davfs2用Berkeley DB(就是缓存目录里的cache.db)存着“缓存文件名”和“远程WebDAV原始路径”的映射关系,咱们可以把这个数据库导出成文本文件来看:
- 先装一下Berkeley DB的工具(如果没装的话):
# 如果你用Debian/Ubuntu系 sudo apt install db-util # 要是RHEL/CentOS系 sudo yum install libdb-utils - 导出数据库内容到文本文件:
db_dump ~/.davfs2/cache/cache.db > cache_mapping.txt - 打开
cache_mapping.txt看看,你会看到类似这样的条目(格式可能随davfs2版本有点变化):
这里的key: 0x00000023 data: /work/projects/notes.md [size=456, mtime=1689999999, etag="abc123"]key就是缓存目录里的文件名(去掉开头的0x就是实际文件名),data里的第一个字符串就是远程WebDAV上的原始文件路径。
第三步:批量把缓存文件恢复成原始目录结构
有了映射关系,咱们可以写个简单脚本自动把缓存文件复制到对应的目录里。这里给你一个Python脚本示例(你可以根据自己导出的映射格式微调):
import os import shutil # 先配置好路径 CACHE_DIR = "~/.davfs2/cache" MAPPING_FILE = "cache_mapping.txt" # 恢复后的文件会存在这个目录里 OUTPUT_DIR = "./recovered_webdav_files" # 确保输出目录存在 os.makedirs(OUTPUT_DIR, exist_ok=True) with open(MAPPING_FILE, "r") as f: lines = f.readlines() current_cache_file = None current_remote_path = None for line in lines: line = line.strip() # 提取缓存文件名 if line.startswith("key:"): current_cache_file = line.split(":")[1].strip().replace("0x", "") # 提取远程原始路径 elif line.startswith("data:"): # 取data后面第一个空格前的内容就是路径 current_remote_path = line.split(" ")[1].strip() if current_cache_file and current_remote_path: # 拼接实际路径 cache_file_path = os.path.join(os.path.expanduser(CACHE_DIR), current_cache_file) target_file_path = os.path.join(OUTPUT_DIR, current_remote_path.lstrip("/")) # 创建目标文件的父目录 os.makedirs(os.path.dirname(target_file_path), exist_ok=True) # 复制缓存文件到目标路径(保留原文件属性) if os.path.exists(cache_file_path): shutil.copy2(cache_file_path, target_file_path) print(f"已恢复: {current_remote_path}") else: print(f"警告: 缓存文件 {cache_file_path} 找不到,跳过 {current_remote_path}") # 重置变量,处理下一个条目 current_cache_file = None current_remote_path = None
运行这个脚本后,所有能匹配到的缓存文件都会被恢复到./recovered_webdav_files目录下,完全保留原来WebDAV上的文件结构。
第四步:验证恢复结果
恢复完之后,建议挑几个重要文件打开看看内容,对比一下大小和修改时间,确保没问题。如果有部分文件提示找不到缓存,那大概率是这些文件从来没被完整缓存过,这种情况就没法恢复了。
内容的提问来源于stack exchange,提问作者zillion




