Aggiornamento OpenZFS 2.1.14 e 2.2.2 con correzione di un bug che porta alla corruzione dei file

Sono stati rilasciati aggiornamenti correttivi per il progetto OpenZFS 2.1.14 e 2.2.2, che sviluppano l'implementazione del file system ZFS per Linux e FreeBSD. Negli aggiornamenti è stato risolto un problema nel codice di verifica della coerenza della cache dnode, che causava la corruzione dei dati nei file che contenevano aree vuote, durante la loro copia dopo modifiche.

Inizialmente si tentò di risolvere il problema nella versione 2.2.1, ma la correzione si rivelò inefficace. L'errore è rimasto inosservato a lungo e ha iniziato a manifestarsi dopo le modifiche apportate all'utilità «cp» nel pacchetto coreutils 9.x. Si presume che su Red Hat Enterprise Linux e le distribuzioni basate su di esso il problema non si manifesti, poiché in RHEL 9 viene utilizzato il pacchetto coreutils 8.x con una logica diversa per l'utilità «cp».

Il problema si manifesta durante l'utilizzo di utilità di copia file che riescono a riconoscere e ottimizzare le aree vuote nei file. La corruzione può verificarsi su filesystem sovraccarichi durante la copia di un file, se l'operazione è eseguita quasi subito dopo una modifica e parte dei dati rimane solo nella cache sporca e non è ancora stata scritta su disco.

Per ottimizzare il lavoro con le aree vuote nei file, OpenZFS, a partire dalla versione 0.6.2, supporta le operazioni SEEK_HOLE e SEEK_DATA, che consentono di saltare l'area vuota del file durante la lettura da disco. L'identificazione delle aree vuote e la conservazione delle informazioni su di esse avviene solo dopo che tutti i dati rimanenti in cache, relativi al file, sono stati scritti su disco. Per avviare il write back in OpenZFS è disponibile un controllo che valuta la presenza di dati non salvati in cache e costringe il write back delle informazioni su disco, necessario per utilizzare SEEK_HOLE e SEEK_DATA.

Sfortunatamente, il controllo si è rivelato incompleto e, in determinate circostanze, le informazioni sullo stato del write back venivano determinate in modo errato e sul disco si trovavano informazioni obsoleti sul contenuto del file, se la richiesta cadeva in una piccola finestra temporale tra due operazioni di write back dalla cache. Le operazioni di lettura che ottimizzano il caricamento delle aree vuote potrebbero in quel momento saltare la lettura di parte dei dati, considerandoli vuoti, mentre il programma che lavorava con il file nel frattempo poteva aver apportato modifiche alle aree vuote. Di conseguenza, l'uso dell'utilità «cp» poteva portare alla creazione di una copia contenente aree vuote dove non erano presenti nel file originale.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster