NetWorker: Docker-beholder Sikkerhetskopiering av NetWorker-klient mislykkes med error savefs: fail

Summary: NetWorker: Docker-beholder Sikkerhetskopiering av NetWorker-klient mislykkes med error 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-klientprogramvaren installeres inne i en docker-beholder.
Den klientbaserte sikkerhetskopien av docker-klienten mislykkes med følgende feil:

<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 kjører i Docker-beholdere, støttes ikke offisielt i gjeldende versjoner. Docker bruker et overleggsfilsystem og er ikke avhengig av et tradisjonelt diskoppsett, så baner som /etc/fstab finnes ikke.

Resolution

Det finnes for øyeblikket ingen metode som støttes for å sikkerhetskopiere docker-containere som NetWorker-klienter. Hvis du vil at denne funksjonaliteten skal finnes i NetWorker, kontakter du Dell-kontoen din eller salgsrepresentanten din angående en forespørsel om forbedring (RFE).

 

Hvis du vil hindre at en NetWorker-klient sikkerhetskopierer Docker-data, må du bruke hoppedirektiver på NetWorker-klienten for Docker-fil-/mappestrukturen.

Eksempel (endre banene og prosessene i henhold til systemet og Docker-konfigurasjonen):

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

Du finner mer informasjon om NetWorker-direktiver i administrasjonsveiledningen for NetWorker. NetWorker-dokumentasjon er tilgjengelig gjennom: Støtte for NetWorker | Håndbøker og dokumenter 

 

Hvis du vil sikkerhetskopiere docker-beholderdata, kan du bruke én av følgende løsninger:

Løsning én: 

  1. Få tilgang til docker-verten via SSH.
  2. Fra SSH-økten kobler du til docker-beholderen. Den nøyaktige syntaksen som brukes, avhenger av beholderplattformen:
  • Dokker: docker exec -it CONTAINER_NAME sh
  • Podman: podman exec -it CONTAINER_NAME sh
  1. Opprett en fstab ved hjelp av mtab Filen: cp /etc/mtab /etc/fstab
  2. Gå ut av beholderen: exit
  3. Sikkerhetskopier beholderklienten fra NetWorker.

Løsning to:

Opprett "arkiver" av docker-beholderdataene på docker-verten, og sikkerhetskopier dataene som et filsystemlagringssett fra docker-verten. Denne fremgangsmåten kan kreve noe skripting og bruk av cron Jobber.

ADVARSEL: NetWorker-støtte gir ikke skriptstøtte eller støtte for OS-skriptrelaterte problemer. Eksemplet nedenfor gjelder bare for konseptbevis. Skriptet tilbyr generelle innstillingsfunksjoner og kan dekke dine behov, men bruk det bare når du fullt ut forstår oppførselen. Du må koordinere med systemansvarlig for docker-verten for å se om de godtar denne tilnærmingen. Samarbeid med systemet og Docker-administratoren for å formulere et passende skript for dine behov ved hjelp av den generelle prosedyreoversikten som er beskrevet her. NetWorker-støtte kan bare hjelpe deg med generelle problemer med sikkerhetskopiering/gjenoppretting av NetWorker for «arkiv»-tarballer som støttes av NetWorker.
  1. Opprett et bash-skript som utfører følgende operasjoner:
    1. Stopp docker-beholderen midlertidig. Dette er for å sikre konsekvent database i dockerbeholderen.
    2. Pakk mappeinnholdet i docker-beholderen.
    3. Start docker-beholderen
    4. (valgfritt) oppryddingsarkiver eldre enn X dager.
#!/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}"
Eksempel på skriptbruk:
[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 opprette en cron-jobb for skriptet for å kjøre daglig, ukentlig og så videre (etter eget skjønn),

[root@rhel-client01 scripts]# ln -s /root/scripts/backup_npm.sh /etc/cron.daily/backup_npm
[root@rhel-client01 scripts]#
MERK: Siden skriptet stopper beholderen for docker, er det viktig å planlegge arkivskriptet i en tidsramme som er akseptabel for midlertidig nedetid. Dette må koordineres med system- og docker-administratorene.
  1. Opprett en NetWorker-klient for systemet som er vert for docker-containere. Den "Lagre sett" er katalogen som brukes til katalogen som inneholder docker tarball arkiver:

Docker Client

  1. Utfør sikkerhetskopier av klienten. Administrasjonsveiledningen for NetWorker inneholder mer informasjon om hvordan du oppretter retningslinjer for sikkerhetskopiering og planlegging. NetWorker-dokumentasjon er tilgjengelig gjennom: Støtte for NetWorker | Håndbøker og dokumenter 

Sikkerhetskopien av klienten inneholder docker-arkivet – 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
Dataene beholdes i henhold til oppbevaringsperioden som er angitt i sikkerhetskopihandlingen.

En NetWorker-klientgjenoppretting brukes til å gjenopprette tarballen tilbake til den eksisterende (eller alternative) NetWorker-klienten. System- og docker-administratoren må utføre de påfølgende trinnene for å konfigurere dockerbeholderen på nytt ved hjelp av de gjenopprettede dataene.

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.