MoviePilot-v2 查询占用与清理转移记录教程
MoviePilot-v2 使用时间长了以后,可能会产生一些日志、缓存、数据库记录等内容。
本文记录如何在 Docker 部署的 MoviePilot-v2 中查询存储占用,并清理“媒体整理 / 转移记录”。
本文只清理 MoviePilot-v2 的记录和缓存,不删除媒体文件。
一、Docker Compose 部署示例
本文以如下部署方式为例:
version: "3.8"
services:
moviepilot-v2:
image: jxxghp/moviepilot-v2:latest
container_name: moviepilot-v2
hostname: moviepilot-v2
network_mode: bridge
restart: always
ports:
- "3000:3000"
- "3001:3001"
- "8069:8069"
volumes:
- /mnt/user/media:/media
- ./config:/config
- ./core:/moviepilot/.cloakbrowser
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
NGINX_PORT: 3000
PORT: 3001
PUID: 0
PGID: 0
UMASK: "000"
TZ: Asia/Shanghai
其中几个重要目录含义如下:
/mnt/user/appdata/moviepilot-v2/config -> 容器内 /config
/mnt/user/appdata/moviepilot-v2/core -> 容器内 /moviepilot/.cloakbrowser
/mnt/user/media -> 容器内 /media
说明:
config 目录:MoviePilot-v2 配置、数据库、日志、缓存
core 目录:浏览器内核、CloakBrowser、Chromium 相关文件
media 目录:真实媒体文件目录
清理记录时,不要删除 /mnt/user/media。
二、进入 MoviePilot-v2 目录
先进入 MoviePilot-v2 的部署目录:
cd /mnt/user/appdata/moviepilot-v2
三、查询 MoviePilot-v2 总占用
查看当前目录一级占用:
du -h --max-depth=1 . | sort -h
示例输出:
293M ./config
1.6G ./core
1.9G .
这里可以看到:
config 占用 293M
core 占用 1.6G
总占用 1.9G
四、查询 config 详细占用
config 目录里一般是配置、数据库、日志、缓存等内容。
执行:
du -h --max-depth=2 ./config 2>/dev/null | sort -h | tail -40
常见输出可能包含:
45M ./config/logs
48M ./config/cache
66M ./config/.cache
85M ./config/plugins
293M ./config
这些目录含义大致如下:
./config/logs 日志目录
./config/cache 缓存目录
./config/.cache Python / uv 缓存目录
./config/plugins 插件目录
./config/user.db 主数据库文件
五、查询 core 详细占用
core 目录通常是浏览器内核目录,不建议随便删除。
执行:
du -h --max-depth=2 ./core 2>/dev/null | sort -h | tail -40
常见输出:
322M ./core/chromium_headless_shell-1179
587M ./core/chromium-1179
697M ./core/chromium-146.0.7680.177.5
1.6G ./core
这些一般是 Chromium / Headless Shell / CloakBrowser 相关文件。
不建议直接删除 ./core,否则可能导致 MoviePilot-v2 重新下载浏览器内核,或者影响站点登录、验证、签到等功能。
六、查询最大文件 TOP 50
如果想知道具体哪些文件最大,可以执行:
du -ah ./config ./core 2>/dev/null | sort -h | tail -50
这个命令可以帮助判断到底是日志、缓存、数据库还是浏览器内核占用较大。
七、查询数据库文件
MoviePilot-v2 的转移记录一般保存在 config 目录下的数据库里。
查询数据库文件:
find ./config -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) -exec ls -lh {} \;
常见结果:
./config/user.db
./config/plugins/p115strmhelper/p115strmhelper_file.db
其中:
./config/user.db
通常是 MoviePilot-v2 的主数据库。
八、查询转移记录表数量
如果容器正在运行,可以使用:
docker exec -i moviepilot-v2 python - <<'PY'
import sqlite3
from pathlib import Path
db_files = list(Path("/config").rglob("*.db")) + list(Path("/config").rglob("*.sqlite")) + list(Path("/config").rglob("*.sqlite3"))
print("=== 数据库文件 ===")
for db in db_files:
print(db)
print("\n=== 疑似转移/整理/历史记录表 ===")
for db in db_files:
try:
conn = sqlite3.connect(db)
cur = conn.cursor()
tables = [r[0] for r in cur.execute("select name from sqlite_master where type='table';").fetchall()]
for table in tables:
name = table.lower()
if "transfer" in name or "history" in name:
try:
count = cur.execute(f'SELECT COUNT(*) FROM "{table}";').fetchone()[0]
print(f"{db} -> {table}: {count} 条")
except Exception as e:
print(f"{db} -> {table}: 查询失败 {e}")
conn.close()
except Exception as e:
print(f"跳过 {db}: {e}")
PY
如果容器没有运行,可以使用临时容器查询:
docker run --rm -i --entrypoint python \
-v /mnt/user/appdata/moviepilot-v2/config:/config \
jxxghp/moviepilot-v2:latest - <<'PY'
import sqlite3
from pathlib import Path
db_files = list(Path("/config").rglob("*.db")) + list(Path("/config").rglob("*.sqlite")) + list(Path("/config").rglob("*.sqlite3"))
print("=== 数据库文件 ===")
for db in db_files:
print(db)
print("\n=== 疑似转移/整理/历史记录表 ===")
for db in db_files:
try:
conn = sqlite3.connect(db)
cur = conn.cursor()
tables = [r[0] for r in cur.execute("select name from sqlite_master where type='table';").fetchall()]
for table in tables:
name = table.lower()
if "transfer" in name or "history" in name:
try:
count = cur.execute(f'SELECT COUNT(*) FROM "{table}";').fetchone()[0]
print(f"{db} -> {table}: {count} 条")
except Exception as e:
print(f"{db} -> {table}: 查询失败 {e}")
conn.close()
except Exception as e:
print(f"跳过 {db}: {e}")
PY
示例输出:
=== 数据库文件 ===
/config/user.db
/config/plugins/p115strmhelper/p115strmhelper_file.db
=== 疑似转移/整理/历史记录表 ===
/config/user.db -> downloadhistory: 0 条
/config/user.db -> transferhistory: 190 条
/config/user.db -> subscribehistory: 0 条
其中:
transferhistory
就是 MoviePilot-v2 的媒体转移 / 整理记录表。
九、清理转移记录
清理前建议先备份数据库。
进入目录:
cd /mnt/user/appdata/moviepilot-v2
备份 user.db:
cp ./config/user.db ./config/user.db.bak.$(date +%F_%H%M)
停止容器:
docker stop moviepilot-v2 2>/dev/null
清理 transferhistory 表:
docker run --rm -i --entrypoint python \
-v /mnt/user/appdata/moviepilot-v2/config:/config \
jxxghp/moviepilot-v2:latest - <<'PY'
import sqlite3
db = "/config/user.db"
conn = sqlite3.connect(db)
cur = conn.cursor()
before = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"清理前 transferhistory: {before} 条")
cur.execute("DELETE FROM transferhistory;")
conn.commit()
after = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"清理后 transferhistory: {after} 条")
conn.execute("VACUUM;")
conn.commit()
conn.close()
PY
这个操作只清理数据库里的转移记录,不会删除:
/mnt/user/media
/media/original
/media/影视
也不会删除真实媒体文件。
十、启动 MoviePilot-v2
清理完成后,重新启动容器:
docker compose up -d
查看是否启动成功:
docker ps | grep moviepilot-v2
查看日志:
docker logs --tail=50 moviepilot-v2
十一、验证转移记录是否清空
执行:
docker run --rm -i --entrypoint python \
-v /mnt/user/appdata/moviepilot-v2/config:/config \
jxxghp/moviepilot-v2:latest - <<'PY'
import sqlite3
conn = sqlite3.connect("/config/user.db")
cur = conn.cursor()
count = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"transferhistory 当前记录数: {count} 条")
conn.close()
PY
如果显示:
transferhistory 当前记录数: 0 条
说明转移记录已经清理成功。
十二、清理日志和缓存
除了转移记录,config 里的一些日志和缓存也可以清理。
清空日志内容:
find ./config/logs -type f -name "*.log*" -exec sh -c ': > "$1"' _ {} \; 2>/dev/null
清理缓存目录:
rm -rf ./config/cache/*
rm -rf ./config/.cache/*
rm -rf ./config/temp/*
这些操作不会删除媒体文件。
十三、清理后再次查看占用
执行:
du -h --max-depth=1 . | sort -h
查看 config 详细占用:
du -h --max-depth=2 ./config 2>/dev/null | sort -h | tail -40
查看数据库大小:
ls -lh ./config/user.db*
十四、如果清理后需要恢复
如果误清理了转移记录,可以通过备份恢复。
先停止容器:
docker stop moviepilot-v2
查看备份文件:
ls -lh ./config/user.db.bak.*
恢复指定备份:
cp ./config/user.db.bak.你的时间 ./config/user.db
重新启动:
docker compose up -d
十五、常用命令汇总
查看总占用
cd /mnt/user/appdata/moviepilot-v2
du -h --max-depth=1 . | sort -h
查看 config 占用
du -h --max-depth=2 ./config 2>/dev/null | sort -h | tail -40
查看 core 占用
du -h --max-depth=2 ./core 2>/dev/null | sort -h | tail -40
查询转移记录数量
docker run --rm -i --entrypoint python \
-v /mnt/user/appdata/moviepilot-v2/config:/config \
jxxghp/moviepilot-v2:latest - <<'PY'
import sqlite3
conn = sqlite3.connect("/config/user.db")
cur = conn.cursor()
count = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"transferhistory 当前记录数: {count} 条")
conn.close()
PY
清理转移记录
cp ./config/user.db ./config/user.db.bak.$(date +%F_%H%M)
docker stop moviepilot-v2 2>/dev/null
docker run --rm -i --entrypoint python \
-v /mnt/user/appdata/moviepilot-v2/config:/config \
jxxghp/moviepilot-v2:latest - <<'PY'
import sqlite3
conn = sqlite3.connect("/config/user.db")
cur = conn.cursor()
before = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"清理前 transferhistory: {before} 条")
cur.execute("DELETE FROM transferhistory;")
conn.commit()
after = cur.execute("SELECT COUNT(*) FROM transferhistory;").fetchone()[0]
print(f"清理后 transferhistory: {after} 条")
conn.execute("VACUUM;")
conn.commit()
conn.close()
PY
docker compose up -d
十六、注意事项
transferhistory是 MoviePilot-v2 的媒体整理 / 转移记录表。- 清理
transferhistory只会清理页面上的整理记录,不会删除真实媒体文件。 - 不要直接删除
/mnt/user/media,这里是真实媒体目录。 - 不要直接删除
./config/user.db,这是主数据库。 - 不建议直接删除
./core,这里通常是浏览器内核目录。 - 清理前建议备份
./config/user.db。 - 如果容器处于停止状态,可以使用
docker run --rm临时容器来查询和清理数据库。 - 如果容器运行中,建议先停止容器再清理数据库,避免数据库占用或写入冲突。
十七、总结
MoviePilot-v2 的占用主要分为三块:
config:配置、数据库、日志、缓存
core:浏览器内核
media:真实媒体文件
清理“媒体整理 / 转移记录”时,只需要清理数据库中的:
transferhistory
推荐流程:
查询占用 -> 查询数据库表 -> 备份 user.db -> 停止容器 -> 清空 transferhistory -> 启动容器 -> 验证记录数量
这样可以安全清除 MoviePilot-v2 页面上的转移记录,同时保留原始媒体文件和整理后的媒体文件。
评论区