Previeni le collisioni durante il prune assegnando un unico responsabile della manutenzione per ogni repository e definendo una finestra durante la quale nessun client di backup possa avviare nuove operazioni.
In un repository condiviso su un home server, il problema di solito inizia prima dell’errore di lock: diversi host gestiscono pianificazioni di manutenzione, un backup dura più del previsto e il prune viene avviato senza un blocco a livello di repository. Inverti questa sequenza. Centralizza il prune, riserva tempo sufficiente, serializza i job al di fuori di Restic e configura avvisi per le esecuzioni saltate o in ritardo. Se una collisione è già in corso, interrompi i nuovi job e usa il percorso di ripristino minimo invece di indebolire il locking.
Assegna un unico responsabile della manutenzione a ogni repository
Cerca in ogni client e servizio lato repository i comandi di manutenzione di Restic. Registra chi gestisce forget, prune, check, unlock e gli avvisi. Disabilita le pianificazioni di prune duplicate e mantieni un solo controller con le credenziali del repository e la visibilità necessaria per vedere tutti i client.
È possibile coordinare più backup attorno a un unico repository, ma rimuovere tutti i lock prima del prune annulla il confine di sicurezza e può creare proprio la sovrapposizione non sicura che la pianificazione doveva evitare.
Il controllo della responsabilità è superato quando un solo host può avviare la manutenzione a livello di repository e ogni client di backup sa dove vengono segnalati gli errori. Se un appliance o un wrapper di backup può avviare attività di manutenzione nascoste, disabilita l’opzione automatica oppure includilo nello stesso controller prima di procedere.
Riserva una finestra per il prune più lunga della durata massima di un’esecuzione normale
Usa i log recenti per individuare il backup normale più lungo, il prune recente più lungo, i ritardi di riattivazione dei client e la coda dei tentativi. Pianifica il prune dopo il completamento previsto dell’ultimo backup e lascia tempo per la sua durata normale massima. Non scegliere la mezzanotte solo perché su un host sembra esserci poca attività.
Un piano di conservazione dovrebbe inoltre delimitare gli snapshot per host o tag, affinché la conservazione su più host non selezioni gli snapshot sbagliati mentre il repository è gestito da un unico responsabile della manutenzione.
Se i backup oltrepassano spesso il limite proposto, sposta il prune invece di accorciare la finestra del backup. Se la durata del prune supera il margine disponibile, riduci la frequenza del recupero fisico dello spazio, analizza le prestazioni del backend oppure usa una finestra più ampia. La prevenzione fallisce quando la pianificazione presuppone che ogni job termini sempre nei tempi medi.
Applica l’esclusione reciproca e una politica di retry visibile
Usa un unico metodo esterno di serializzazione rispettato da ogni job locale: l’ordinamento delle unità systemd, un wrapper per un lock condiviso oppure una coda controllata dall’host di manutenzione. Il wrapper deve rifiutare o ritardare il job successivo, mantenere il locking interno di Restic e registrare uno stato chiaro che il sistema di monitoraggio possa segnalare.
Una pianificazione di Restic basata su systemd può separare i servizi ricorrenti di backup e prune, mantenendo visibili l’ordinamento, lo stato di uscita e i log.
Imposta un intervallo di retry limitato e un ritardo massimo. Un backup bloccato dalla manutenzione deve riprovare dopo la finestra, non scomparire fino al giorno successivo; un prune bloccato da un backup in ritardo deve generare un avviso e passare alla successiva finestra approvata. Non impostare mai lo sblocco forzato automatico come azione di retry.
Testa la politica di prevenzione e mantieni un rollback minimo
Testa entrambi gli ordini su un repository usa e getta o su un dataset di esempio: avvia prima il backup e richiedi il prune, poi avvia prima il prune e richiedi il backup. In entrambi i casi, un job deve attendere oppure terminare in modo visibile, il controller deve riprovare secondo la politica configurata e nessun lock deve essere rimosso mentre è attivo un processo.
Dopo la distribuzione, controlla i log del successivo backup, forget e prune normali. Se il repository diventa di sola lettura dopo la manutenzione, usa il percorso di ripristino separato per un prune interrotto invece di allentare il blocco di prevenzione.
La politica è efficace quando due cicli vengono completati senza sovrapposizioni, i job ritardati riprovano in modo visibile, gli avvisi vengono attivati per le finestre mancate e un ripristino di prova rimane valido. Se non funziona, disabilita prima l’automazione del prune e mantieni attivi i backup ordinari con il locking normale. Procedi con un’escalation quando nessuna finestra di manutenzione è compatibile con il carico di lavoro misurato oppure il backend non riesce a completare il prune in modo affidabile.
Supporto e consigli
Altro da leggere

Come pianificare i processi Restic di backup, Forget e Prune senza conflitti di blocco
Una pianificazione completa di Restic per più host, che separa i backup frequenti, la conservazione con ambito definito, il prune fisico, i controlli, i...

Come rimuovere un blocco Restic obsoleto senza interrompere un backup attivo
Un flusso di sblocco di Restic il meno invasivo possibile, che protegge i backup attivi, rimuove solo lo stato obsoleto e conferma il ripristino...

Perché un backup Restic si blocca quando un altro host avvia la potatura?
Una diagnosi mirata della contesa dei blocchi durante il prune di Restic, inclusi i controlli del proprietario del blocco, il ripristino sicuro, la ripetizione...

