侧边栏壁纸
  • 累计撰写 65 篇文章
  • 累计创建 80 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

MoviePilot-v2 查询占用与清理转移记录教程

Seger
2026-06-29 / 0 评论 / 0 点赞 / 0 阅读 / 2,498 字

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

十六、注意事项

  1. transferhistory 是 MoviePilot-v2 的媒体整理 / 转移记录表。
  2. 清理 transferhistory 只会清理页面上的整理记录,不会删除真实媒体文件。
  3. 不要直接删除 /mnt/user/media,这里是真实媒体目录。
  4. 不要直接删除 ./config/user.db,这是主数据库。
  5. 不建议直接删除 ./core,这里通常是浏览器内核目录。
  6. 清理前建议备份 ./config/user.db
  7. 如果容器处于停止状态,可以使用 docker run --rm 临时容器来查询和清理数据库。
  8. 如果容器运行中,建议先停止容器再清理数据库,避免数据库占用或写入冲突。

十七、总结

MoviePilot-v2 的占用主要分为三块:

config:配置、数据库、日志、缓存
core:浏览器内核
media:真实媒体文件

清理“媒体整理 / 转移记录”时,只需要清理数据库中的:

transferhistory

推荐流程:

查询占用 -> 查询数据库表 -> 备份 user.db -> 停止容器 -> 清空 transferhistory -> 启动容器 -> 验证记录数量

这样可以安全清除 MoviePilot-v2 页面上的转移记录,同时保留原始媒体文件和整理后的媒体文件。

0

评论区