NetWorker: Docker-container NetWorker-klientsäkerhetskopiering misslyckas med felet savefs: fail

Summary: NetWorker: Docker-container NetWorker-klientsäkerhetskopiering misslyckas med felet savefs: fail

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

NetWorker-klientprogramvaran installeras i en Docker-behållare.
Den klientbaserade säkerhetskopieringen av Docker-klienten misslyckas med följande fel:

<client name>:savefs failed.
<client name>:savefs See the file '/nsr/logs/policy/<policy>/<workflow/backup_<jobid>_logs/<jobid>.log' for command output.
Stopped processing of the save set <cleint name>:<save set> because the savefs job job terminated with an error.
Job <jobid> host: <client name> savepoint: <save set> had ERROR indication(s) at completion
<client name>:<save set> abandoned.
Client '<client name>' is being skipped because no savesets of this client have been backed up as part of the backup action.
Action backup traditional 'backup' with job id <job id> is exiting with status 'failed', exit code 1

Cause

NetWorker-klienter som körs i Docker-containrar stöds inte officiellt i aktuella versioner. Docker använder ett överläggsfilsystem och förlitar sig inte på en traditionell disklayout, så sökvägar som /etc/fstab finns inte.

Resolution

Det finns för närvarande ingen metod som stöds för att säkerhetskopiera Docker-containrar som NetWorker-klienter. Om du vill att den här funktionen ska finnas i NetWorker kontaktar du ditt Dell-konto eller din säljare angående en begäran om förbättring (RFE).

 

Om du vill förhindra att en NetWorker-klient säkerhetskopierar Docker-data måste du använda skip-direktiv på NetWorker-klienten för Docker-fil-/mappstrukturen.

Exempel (ändra sökvägar och processer enligt systemet och Docker-konfigurationen):

<< /var/lib/docker >>
skip: *
<< /var/lib/containers >>
skip: *
<< /run >>
skip: docker docker.sock containers podman crun

Mer information om NetWorker-direktiv finns i NetWorker Administration Guide. NetWorker-dokumentation finns tillgänglig på: Stöd för NetWorker | Manualer och dokument 

 

Om du vill säkerhetskopiera Docker-containerdata använder du någon av följande lösningar:

Lösning ett: 

  1. Få åtkomst till Docker-värden via SSH.
  2. Från SSH-sessionen ansluter du till Docker-containern. Den exakta syntaxen som används beror på containerplattformen:
  • Docker: docker exec -it CONTAINER_NAME sh
  • Podman: podman exec -it CONTAINER_NAME sh
  1. Skapa en fstab filen med hjälp av mtab Filen: cp /etc/mtab /etc/fstab
  2. Lämna behållaren: exit
  3. Säkerhetskopiera behållarklienten från NetWorker.

Lösning två:

Skapa "arkiv" med Docker-containerdata på Docker-värden och säkerhetskopiera data som en sparad filsystemsuppsättning från Docker-värden. Den här metoden kan kräva viss skriptning och användning av cron Jobb.

VARNING! NetWorker-supporten tillhandahåller inte skriptstöd eller support för operativsystemsskriptrelaterade problem. Exemplet nedan är endast för konceptbevis. Skriptet erbjuder allmänna justeringsfunktioner och kan uppfylla dina behov, men använd det bara när du helt förstår dess beteende. Du måste samordna med systemadministratören för Docker-värden för att se om de accepterar den här metoden. Arbeta med systemet och Docker-administratören för att formulera ett lämpligt skript för dina behov med hjälp av den allmänna proceduröversikten som beskrivs här. NetWorker-supporten kan endast hjälpa till med allmänna problem med NetWorker-säkerhetskopiering/-återställning av arkiv-tarbollarna som säkerhetskopieras av NetWorker.
  1. Skapa ett bash-skript som utför följande åtgärder:
    1. Stoppa Docker-containern tillfälligt. Detta är för att säkerställa databasens konsekvens i Docker-behållaren.
    2. Zippa innehållet i dockercontainerns mapp.
    3. Starta Docker-containern
    4. (valfritt) rensa arkiv som är äldre än X dagar.
#!/usr/bin/env bash
set -euo pipefail
# ===== Config (tunable) =====
CONTAINER_TOOL="podman"                  # container platform (podman or docker)
CONTAINER_NAME="npm"                     # the container name to verify after restart
COMPOSE_DIR="/root/docker/nginx"         # directory containing docker-compose.yaml/podman-compose.yaml
BACKUP_ROOT="/root/docker/backups"       # where backups are stored on the host
RETENTION_DAYS=3                         # delete archives older than N days
TIMESTAMP="$(date +%F_%H%M%S)"
ARCHIVE="${BACKUP_ROOT}/${CONTAINER_NAME}-backup-${TIMESTAMP}.tar.gz"
LOCK_FILE="/var/lock/${CONTAINER_NAME}_backup.lock"
# ========================================
mkdir -p "$BACKUP_ROOT" /var/lock
# --- Handle stale lock files (if previous run crashed) ---
if [[ -f "$LOCK_FILE" ]]; then
  # Try to find an owning process; if none, remove the stale lock
  LOCK_FD_OWNER="$(lsof -t -- "$LOCK_FILE" 2>/dev/null || true)"
  if [[ -z "$LOCK_FD_OWNER" || ! -d "/proc/$LOCK_FD_OWNER" ]]; then
    echo "[INFO] Removing stale lock file: $LOCK_FILE"
    rm -f "$LOCK_FILE"
  fi
fi
# --- Simple lock to avoid overlapping runs ---
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
  echo "[INFO] Another backup is running. Exiting."
  exit 0
fi
# --- Safety checks ---
if [[ ! -d "$COMPOSE_DIR" ]]; then
  echo "[ERROR] Compose directory not found: $COMPOSE_DIR" >&2
  exit 1
fi
if [[ ! -f "${COMPOSE_DIR}/docker-compose.yaml" && ! -f "${COMPOSE_DIR}/podman-compose.yaml" ]]; then
  echo "[ERROR] No compose file found in ${COMPOSE_DIR}" >&2
  exit 1
fi
# --- Functions ---
prune_backups() {
  local root="$1" days="$2"
  echo "[INFO] Pruning backups older than ${days} days in ${root}..."
  find "$root" -maxdepth 1 -type f -name "${CONTAINER_NAME}-backup-*.tar.gz" -mtime +"$days" -print -delete || true
}
verify_running() {
  # Expect container named "${CONTAINER_NAME}" to be running again
  if ${CONTAINER_TOOL} ps --format '{{.Names}}' | grep -qx "${CONTAINER_NAME}"; then
    echo "[INFO] Container '${CONTAINER_NAME}' is running."
  else
    echo "[WARN] Container '${CONTAINER_NAME}' not found in '${CONTAINER_TOOL} ps'. Check '${CONTAINER_TOOL} ps -a' and logs."
  fi
}
# --- Stop stack cleanly using *-compose in its directory ---
echo "[INFO] Bringing down stack (${CONTAINER_TOOL}-compose down) in ${COMPOSE_DIR}..."
(
  cd "$COMPOSE_DIR"
  # Do NOT pass -p; let the project default to the directory name
  ${CONTAINER_TOOL}-compose down || {
    echo "[WARN] ${CONTAINER_TOOL}-compose down returned non-zero. Continuing (stack may not have been up)."
  }
)
# --- Create archive (compose dir: data, letsencrypt, compose file, etc.) ---
echo "[INFO] Archiving ${COMPOSE_DIR} to ${ARCHIVE}..."
# Preserve SELinux/xattrs and ownership; exclude the backups dir if it's under same parent
tar -C "$(dirname "$COMPOSE_DIR")" \
  --xattrs --selinux --same-owner --numeric-owner \
  --exclude "$(basename "$BACKUP_ROOT")" \
  -czf "$ARCHIVE" "$(basename "$COMPOSE_DIR")"
# Optional integrity checksum
sha256sum "$ARCHIVE" > "${ARCHIVE}.sha256"
# --- Start stack back up ---
echo "[INFO] Starting stack (${CONTAINER_TOOL}-compose up -d)..."
(
  cd "$COMPOSE_DIR"
  ${CONTAINER_TOOL}-compose up -d
)
# --- Verify expected container is running ---
verify_running
# --- Prune according to retention ---
prune_backups "$BACKUP_ROOT" "$RETENTION_DAYS"
echo "[OK] Backup completed: ${ARCHIVE}"
Exempel på skriptanvändning:
[root@rhel-client01 scripts]# ./backup_npm.sh
[INFO] Removing stale lock file: /var/lock/npm_backup.lock
[INFO] Bringing down stack (podman-compose down) in /root/docker/nginx...
npm
npm
14dc3c3871a7a9716142a1011f1039258d330be1ddb49543eb7a8e257256239a
nginx_default
[INFO] Archiving /root/docker/nginx to /root/docker/backups/npm-backup-2026-02-10_155107.tar.gz...
[INFO] Starting stack (podman-compose up -d)...
be491bf43aa17f1a767075ed8b2cd55d93cdf4581ad04abe66a58f3bce0b5e74
e677dbedd5fdd92a440896dc4cae22165cb34ce704ec3ed8f7620ce243183585
npm
[INFO] Container 'npm' is running.
[INFO] Pruning backups older than 3 days in /root/docker/backups...
[OK] Backup completed: /root/docker/backups/npm-backup-2026-02-10_155107.tar.gz
[root@rhel-client01 scripts]#
[root@rhel-client01 scripts]# ls -ltr /root/docker/backups/
total 8
-rw-r--r--. 1 root root 638 Feb 10 15:51 npm-backup-2026-02-10_155107.tar.gz
-rw-r--r--. 1 root root 123 Feb 10 15:51 npm-backup-2026-02-10_155107.tar.gz.sha256

Alternativt kan du skapa ett cron-jobb för skriptet som ska köras dagligen, veckovis och så vidare (enligt ditt gottfinnande),

[root@rhel-client01 scripts]# ln -s /root/scripts/backup_npm.sh /etc/cron.daily/backup_npm
[root@rhel-client01 scripts]#
Obs! Eftersom skriptet stoppar Docker-containern är det viktigt att schemalägga arkivskriptet under en tidsram som är acceptabel för tillfällig stilleståndstid. Detta måste samordnas med systemet och Docker-administratörerna.
  1. Skapa en NetWorker-klient för det system som är värd för Docker-containrarna. "Save set" är den katalog som används till katalogen som innehåller docker-tarball-arkiven:

Docker-klient

  1. Utför säkerhetskopiering av klienten. I NetWorker-administrationshandboken finns mer information om hur du skapar policyer för säkerhetskopiering och schemaläggning. NetWorker-dokumentation finns tillgänglig på: Stöd för NetWorker | Manualer och dokument 

Klientsäkerhetskopian innehåller Docker Archive-tarball-data:

[root@nsr ~]# mminfo -avot -q client=rhel-client01.amer.lan -r "nsavetime,savetime(20),name,sumflags,ssretent"
  save time    date     time   name                           fl  retent
...
 1770757763    02/10/2026 16:09 /root/docker/backups          cb 03/10/2026

[root@nsr ~]# nsrinfo -t 1770757763 rhel-client01.amer.lan
scanning client `rhel-client01.amer.lan' for savetime 1770757763(Tue 10 Feb 2026 04:09:23 PM EST) from the backup namespace
/root/docker/backups/npm-backup-2026-02-10_155107.tar.gz
/root/docker/backups/npm-backup-2026-02-10_155107.tar.gz.sha256
/root/docker/backups/
/root/docker/
/root/
/
6 objects found
Data behålls enligt den kvarhållningsperiod som angetts i säkerhetskopieringsåtgärden.

En NetWorker-klientåterställning används för att återställa tarbollen till den befintliga (eller alternativa) NetWorker-klienten. Systemet och Docker-administratören måste utföra efterföljande steg för att konfigurera om Docker-containern med återställda data.

Affected Products

NetWorker

Products

NetWorker
Article Properties
Article Number: 000071581
Article Type: Solution
Last Modified: 18 Apr 2026
Version:  8
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.