Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90677d9aba | ||
|
|
fa1d33d126 |
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# checkFilestore <UUID> — compare container filestore vs host disk via md5
|
||||
|
||||
[[ -z "${1-}" ]] && { echo "Usage: $0 <UUID>"; 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 ".[] | select(.Type==\"bind\") | select(.Destination==\"$DATA_DIR\") | .Source")
|
||||
echo "Container filestore : $FILESTORE_CONTAINER"
|
||||
echo "Docker mapped to : ${MOUNT_HOST:-<no matching mount found>}"
|
||||
|
||||
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; }
|
||||
Reference in New Issue
Block a user