NetWorker: Docker kapsayıcısı NetWorker istemci yedeklemesi hata savefs: fail ile başarısız oluyor

Summary: NetWorker: Docker kapsayıcısı NetWorker istemci yedeklemesi hata savefs: fail ile başarısız oluyor

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 istemci yazılımı bir docker kapsayıcısının içine kurulur.
Docker istemcisinin istemci tabanlı yedeklemesi aşağıdaki hatayla başarısız olur:

<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

Docker kapsayıcıları içinde çalışan NetWorker istemcileri, mevcut sürümlerde resmi olarak desteklenmemektedir. Docker bir bindirme dosya sistemi kullanır ve geleneksel bir disk düzenine dayanmaz, bu nedenle /etc/fstab gibi yollar mevcut değildir.

Resolution

Şu anda Docker kapsayıcılarını NetWorker istemcileri olarak yedeklemek için desteklenen bir yöntem bulunmamaktadır. Bu işlevin NetWorker'da mevcut olmasını istiyorsanız Geliştirme Talebi (RFE) ile ilgili olarak Dell hesabınızla veya satış temsilcinizle iletişime geçin.

 

Bir NetWorker istemcisinin Docker verilerini yedeklemesini önlemek için Docker dosya/klasör yapısı için NetWorker istemcisinde atlama yönergelerini kullanmalısınız.

Örnek (yolları ve işlemleri sisteminize ve Docker yapılandırmanıza göre değiştirin):

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

NetWorker direktifleri hakkında daha fazla bilgi NetWorker Yönetim Rehberi'nde mevcuttur. NetWorker belgelerine şuradan ulaşılabilir: NetWorker Desteği | Kılavuzlar ve Belgeler 

 

Docker kapsayıcı verilerini yedeklemek için aşağıdaki geçici çözümlerden birini kullanın:

Geçici Çözüm Bir: 

  1. Docker ana bilgisayarına SSH üzerinden erişin.
  2. SSH oturumundan docker kapsayıcısına bağlanın. Kullanılan tam söz dizimi kapsayıcı platformuna bağlıdır:
  • Docker: docker exec -it CONTAINER_NAME sh
  • Podman: podman exec -it CONTAINER_NAME sh
  1. Bir fstab dosyasını kullanarak mtab : cp /etc/mtab /etc/fstab
  2. Kapsayıcıdan çıkın: exit
  3. Kapsayıcı istemcisini NetWorker'dan yedekleyin.

Geçici Çözüm İki:

Docker ana bilgisayarında docker kapsayıcı verilerinin "arşivlerini" oluşturun, verileri docker ana bilgisayarından bir dosya sistemi kaydetme kümesi olarak yedekleyin. Bu yaklaşım, bazı komut dosyaları ve cron Işleri.

UYARI: NetWorker desteği, komut dosyası oluşturma desteği veya işletim sistemi komut dosyasıyla ilgili sorunlar için destek sağlamaz. Aşağıdaki örnek yalnızca kavram kanıtı içindir. Komut dosyası genel ayarlama özellikleri sunar ve gereksinimlerinizi karşılayabilir, ancak yalnızca davranışını tam olarak anladığınızda kullanabilirsiniz. Bu yaklaşımı kabul edip etmediklerini görmek için docker ana bilgisayarının sistem yöneticisiyle koordinasyon sağlamanız gerekir. Burada özetlenen genel prosedüre genel bakışı kullanarak gereksinimlerinize uygun bir komut dosyası formüle etmek için sistem ve Docker yöneticisiyle birlikte çalışın. NetWorker desteği yalnızca NetWorker tarafından yedeklenen "arşiv" tar toplarının genel NetWorker yedekleme/geri yükleme sorunları konusunda yardımcı olabilir.
  1. Aşağıdaki işlemleri gerçekleştiren bir bash betiği oluşturun:
    1. Docker kapsayıcısını geçici olarak durdurun. Bu, docker kapsayıcısında veritabanı tutarlılığını sağlamak için kullanılır.
    2. Docker kapsayıcısının klasör içeriğini sıkıştırın.
    3. Docker kapsayıcısını başlatma
    4. (isteğe bağlı) X günden eski arşivleri temizleme.
#!/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}"
Örnek komut dosyası kullanımı:
[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

Alternatif olarak, komut dosyasının günlük, haftalık vb. çalışması için bir cron işi oluşturun (kendi takdirinize bağlı olarak),

[root@rhel-client01 scripts]# ln -s /root/scripts/backup_npm.sh /etc/cron.daily/backup_npm
[root@rhel-client01 scripts]#
NOT: Betik docker kapsayıcısını durdurduğundan, arşiv betiğini anlık kapalı kalma süresi için kabul edilebilir bir zaman dilimi sırasında zamanlamak önemlidir. Bu, sistem ve docker yöneticileri ile koordine edilmelidir.
  1. Docker kapsayıcılarını barındıran sistem için bir NetWorker istemcisi oluşturun. "Kaydetme kümesi", docker tarball arşivlerini içeren dizinde kullanılan dizindir:

Docker istemcisi

  1. İstemcinin yedeklemelerini gerçekleştirin. NetWorker Administration Guide belgesinde, yedekleme politikaları oluşturma ve zamanlama hakkında daha fazla bilgi verilmektedir. NetWorker belgelerine şuradan ulaşılabilir: NetWorker Desteği | Kılavuzlar ve Belgeler 

İstemci yedeklemesi, docker archive-tarball verilerini içerir:

[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
Veriler, yedekleme eyleminde ayarlanan saklama süresine göre saklanır.

NetWorker istemci geri yüklemesi, tar dosyasını mevcut (veya alternatif) NetWorker istemcisine geri yüklemek için kullanılır. Sistem ve docker yöneticisi, kurtarılan verileri kullanarak docker kapsayıcısını yeniden yapılandırmak için sonraki adımları gerçekleştirmelidir.

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.