NetWorker: Kopia zapasowa klienta kontenera Docker NetWorker kończy się niepowodzeniem z błędem savefs: fail

Summary: NetWorker: Kopia zapasowa klienta kontenera Docker NetWorker kończy się niepowodzeniem z błędem 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

Oprogramowanie klienckie NetWorker jest instalowane wewnątrz kontenera Docker.
Tworzenie kopii zapasowej klienta Docker opartej na kliencie kończy się niepowodzeniem z następującym błędem:

<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

Klienci NetWorker działający w kontenerach platformy Docker nie są oficjalnie obsługiwani w bieżących wersjach. Platforma Docker używa systemu plików nakładki i nie opiera się na tradycyjnym układzie dysków, więc ścieżki takie jak /etc/fstab nie są obecne.

Resolution

Obecnie nie ma obsługiwanej metody tworzenia kopii zapasowych kontenerów Docker jako klientów NetWorker. Jeśli chcesz, aby ta funkcja istniała w NetWorker, skontaktuj się z przedstawicielem klienta lub handlowym firmy Dell w sprawie wniosku o ulepszenie (RFE).

 

Aby uniemożliwić klientowi NetWorker tworzenie kopii zapasowych danych platformy Docker, należy użyć dyrektyw pominięcia na kliencie NetWorker dla struktury plików/folderów platformy Docker.

Przykład (zmodyfikuj ścieżki i procesy zgodnie z konfiguracją systemu i platformy Docker):

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

Więcej informacji na temat dyrektyw NetWorker znajduje się w Podręczniku administratora NetWorker. Dokumentacja NetWorker jest dostępna za pośrednictwem: Wsparcie dla NetWorker | Instrukcje obsługi i dokumenty 

 

Aby utworzyć kopię zapasową danych kontenera platformy Docker, użyj jednego z następujących obejść:

Obejście pierwsze: 

  1. Uzyskaj dostęp do hosta Docker przez SSH.
  2. Z poziomu sesji SSH połącz się z kontenerem platformy Docker. Dokładna stosowana składnia zależy od platformy kontenera:
  • Oknie dokowanym: docker exec -it CONTAINER_NAME sh
  • Podman: podman exec -it CONTAINER_NAME sh
  1. Utwórz obiekt fstab za pomocą pliku mtab serwera NetWorker Management Console (NMC): cp /etc/mtab /etc/fstab
  2. Wyjdź z kontenera: exit
  3. Utwórz kopię zapasową klienta kontenera z NetWorker.

Obejście drugie:

Utwórz "archiwum" danych kontenera Docker na hoście Docker, wykonaj kopię zapasową danych jako zestaw zapisu systemu plików z hosta Docker. Takie podejście może wymagać pewnych skryptów i użycia cron Zadania.

OSTRZEŻENIE: Pomoc techniczna NetWorker nie zapewnia obsługi skryptów ani pomocy technicznej w przypadku problemów związanych ze skryptami systemu operacyjnego. Poniższy przykład służy wyłącznie do weryfikacji koncepcji. Skrypt oferuje ogólne możliwości dostrajania i może spełniać Twoje potrzeby, ale używaj go tylko wtedy, gdy w pełni rozumiesz jego zachowanie. Należy skoordynować działania z administratorem systemu hosta platformy Docker, aby sprawdzić, czy akceptuje on to podejście. Współpracuj z administratorem systemu i platformy Docker, aby sformułować skrypt odpowiedni do Twoich potrzeb, korzystając z ogólnego omówienia procedur opisanego tutaj. Dział pomocy technicznej NetWorker może jedynie pomóc w przypadku ogólnych problemów z tworzeniem kopii zapasowych/przywracaniem archiwizacji archiwów archiwalnych, których kopie zapasowe są tworzone przez NetWorker.
  1. Utwórz skrypt bash, który wykonuje następujące operacje:
    1. Tymczasowo zatrzymaj kontener Docker. Ma to na celu zapewnienie spójności bazy danych w kontenerze docker.
    2. Skompresuj zawartość folderu kontenera platformy Docker.
    3. Uruchamianie kontenera platformy Docker
    4. (opcjonalnie) oczyść archiwa starsze niż X dni.
#!/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}"
Przykładowe użycie skryptu:
[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

Alternatywnie utwórz zadanie cron, aby skrypt działał codziennie, co tydzień i tak dalej (według własnego uznania),

[root@rhel-client01 scripts]# ln -s /root/scripts/backup_npm.sh /etc/cron.daily/backup_npm
[root@rhel-client01 scripts]#
UWAGA: Ponieważ skrypt zatrzymuje kontener platformy Docker, ważne jest, aby zaplanować skrypt archiwum w przedziale czasu, który jest akceptowalny dla chwilowego przestoju. Należy to skoordynować z administratorami systemu i platformy Docker.
  1. Utwórz klienta NetWorker dla systemu hostującego kontenery Docker. "Save set" jest katalogiem używanym do katalogu, który zawiera archiwa archiwum archiwum docker:

Klient Docker

  1. Wykonaj kopie zapasowe klienta. Więcej informacji na temat tworzenia zasad tworzenia kopii zapasowych i planowania można znaleźć w Podręczniku administracyjnym NetWorker . Dokumentacja NetWorker jest dostępna za pośrednictwem: Wsparcie dla NetWorker | Instrukcje obsługi i dokumenty 

Kopia zapasowa klienta zawiera dane archiwum dockera:

[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
Dane są przechowywane zgodnie z okresem przechowywania ustawionym w czynności tworzenia kopii zapasowej.

Przywracanie klienta NetWorker służy do odzyskania archiwum tar z powrotem do istniejącego (lub alternatywnego) klienta NetWorker. Administrator systemu i dockera musi wykonać kolejne kroki, aby ponownie skonfigurować kontener docker przy użyciu odzyskanych danych.

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.