#!/bin/bash # checkFilestore — compare container filestore vs host disk via md5 [[ -z "${1-}" ]] && { echo "Usage: $0 "; exit 1; } UUID="$1" FILESTORE_HOST="/4server/data/$UUID/odoo/odoo-web-data/filestore/$UUID" [[ -d "$FILESTORE_HOST" ]] || { echo "ERROR: host filestore not found: $FILESTORE_HOST"; exit 2; } doas docker ps --format "{{.Names}}" | grep -q "^${UUID}$" \ || { echo "ERROR: container $UUID is not running"; exit 2; } # Read data_dir from odoo.conf inside the container, fall back to default DATA_DIR=$(doas docker exec "$UUID" sh -c \ 'for f in /etc/odoo.conf /etc/odoo/odoo.conf /opt/odoo/etc/odoo.conf; do grep -E "^data_dir" "$f" 2>/dev/null | cut -d= -f2- | xargs && break done') DATA_DIR="${DATA_DIR:-/home/odoo/.local/share/Odoo}" FILESTORE_CONTAINER="$DATA_DIR/filestore/$UUID" MOUNT_HOST=$(doas docker inspect "$UUID" --format '{{json .Mounts}}' \ | jq -r --arg dest "$DATA_DIR" '.[] | select(.Type=="bind") | select(.Destination==$dest) | .Source') echo "ODOO USES : $FILESTORE_CONTAINER" echo "Docker maps to : $DATA_DIR" echo "" echo "Docker mapped to : ${MOUNT_HOST:-}" echo "Hashing container filestore..." MD5_CONTAINER=$(doas docker exec "$UUID" sh -c \ "find $FILESTORE_CONTAINER -type f | sort | xargs md5sum 2>/dev/null" | md5sum | cut -d' ' -f1) echo "Hashing host filestore..." MD5_HOST=$(find "$FILESTORE_HOST" -type f | sort | xargs md5sum 2>/dev/null | md5sum | cut -d' ' -f1) echo "Container : $MD5_CONTAINER" echo "Host : $MD5_HOST" [[ "$MD5_CONTAINER" == "$MD5_HOST" ]] && echo "OK: filestores match" || { echo "FAIL: mismatch"; exit 3; }