Michele Liberi software

versione 1.03, 1 settembre 2022

Michele Liberi
mail: mliberi@gmail.com
cell: 3485211456

liberix

comm7, sincronizzazione di files

Il comando comm7 è uno strumento potente e sofisticato per la sincronizzazione di files, directories e link simbolici.

L'analisi ed eventuale sincronizzazione avviene tra N sistemi, in modalità master/slave oppure in modalità paritetica.

L'insieme dei pathnames da analizzare viene determinato, in maniera molto flessibile con il parametro finder che contiene un comando di shell che genera una lista di pathnames, ad esempio "find .".

Per ogni coppia di sistemi A e B da analizzare, comm7 determina gli elementi:

Ai fini dell'analisi due files sono considerati identici se hanno la stessa data di ultima modifica (mtime) e la stessa dimensione. Impostando il parametro crc=1 è possibile determinare se due files sono identici in base al calcolo di un checksum; comm7 analizza parimenti anche i metadati associati ai pathname, quindi due files vengono identificati come non identici anche se è diverso il proprietario, il gruppo, i permessi di accesso.

Il parametro fat=1 permette di confrontare correttamente le date di ultima modifica quando i files risiedono su filesystem di tipo FAT. Su tali sistemi infatti la data di ultima modifica viene salvata scartando l'ultimo bit, quello meno significativo, quindi due timestamp sono considerati uguali anche se differiscono di un secondo. Inoltre in questa modalità vengono ignorati i metadati (proprietario, gruppo, permessi di accesso, ACL) ed il confronto dei nomi dei files viene fatta senza distinzione tra maiuscole e minuscole.

Una volta analizzata la situazione ed identificati gli insiemi è possibile attivare delle azioni. Ad esempio con l'opzione -master:

  1. gli elementi che sono solo in A vengono copiati in B
  2. gli elementi che sono solo in B vengono cancellati
  3. gli elementi diversi vengono copiati da A a B
Questo processo modifica solo il sistema B, al termine del processo B conterrà esattamente gli stessi elementi di A.

Con l'opzione -mirror:

  1. gli elementi che sono solo in A vengono copiati in B
  2. gli elementi che sono solo in B vengono copiati in A
  3. gli elementi diversi vengono copiati dal più nuovo al più vecchio
Come prima al termine del processo A e B conterranno gli stessi elementi, ma in questo caso entrambi i sistemi vengono potenzialmente modificati.

L'analisi e successiva eventuale sincronizzazione avvengono sia per i dati, basandosi sulla dimensione e data di ultima modifica del file, sia per i metadati (utente, gruppo, permessi di accesso, ACL, etc...).

parametri
nometiposignificatoesempio
Harray nome o indirizzo IP dei sistemi coinvolti H=(mliberi ml tcm)
Darray directory di riferimento, in essa verrà eseguito il comando finder D=(/woha /bck/woha)
prearray comando da lanciare per verificare se ci sono le condizioni per effettuare il check, in caso di return code diverso da zero l'intero processo di analisi e sincronizzazione si interrompe pre[0]='test -f semaforo.txt'
finderstring comando da lanciare per determinare gli elementi presenti ls -f |grep ^00
uxgrefoneof determina come vengono gestiti il proprietario ed il gruppo dei files che vengono copiati:
  • byname: preserva il nome
  • byid: preserva identificativo numerico
  • none: non preserva alcunché, utilizza id dell'utente corrente
uxgref=byname
modeoneof determina la modalità di esecuzione
  • check: analizza, ma non compie azioni
  • master: sincronizza da H[0] a tutti gli altri
  • mirror: sincronizza dal più giovane al più vecchio
  • *: specifica quali azioni elementari compiere:
    • cp12: copia 1o A ==> B
    • cp21: copia 2o B ==> A
    • rm1: cancella 1o da A
    • rm2: cancella 2o da B
    • put: copia 3d A ==> B
    • get: copia 3d B ==> A
    • upd12: copia 3n A ==> B
    • upd21: copia 3o B ==> A
mode='*' cp12=1 cp21=1 rm1=0 rm2=0 put=0 get=0 upd12=0 upd21=0
crcboolean per capire se due elementi sono uguali o diversi si utilizza la dimensione e la data di ultima modifica, impostando crc=1 si forza il calcolo di un checksum come ulteriore sicurezza crc=0
fatboolean quando i files risiedono in tutto o in parte su filesystem di tipo FAT è necessario impostare questo parametro in modo che:
  • il confronto della data avvenga con tolleranza di un secondo di differenza
  • i metadati vengano ignorati
  • il confronto dei nomi avvenga in senza distinzione tra maiuscole e minuscole
fat=0
compboolean specifica se procedere o no con il confronto dei files comuni (3c) per determinare i sottoinsiemi (3i, 3d, 3n, 3o) comp=1
verboseboolean specifica se visualizzare in fase di analisi il dettaglio degli elementi trovati in ogni insieme verbose=1

Per ulteriori informazioni sulle opzioni e i parametri disponibili lanciare il comando comm7 -h.