27 Novembre 2023

Difetto Distruttivo dei Dati Rilevato in OpenZFS 2.2.0

Disattivate la clonazione dei blocchi di file o aggiorna a 2.2.1 al più presto

OpenZFS-Bug

Recentemente è emerso un grave problema in OpenZFS 2.2.0, implementato in sistemi operativi come FreeBSD 14. La nuova funzionalità, introdotta un mese fa, si chiama “clonazione di blocchi” e mira a ottimizzare la gestione dei dati. Tuttavia, un bug critico, identificato dal team di Gentoo e segnalato come bug #15526, ha portato al rilascio immediato di OpenZFS 2.2.1, che temporaneamente disabilita questa funzione.

Questo incidente solleva preoccupazioni riguardo all’affidabilità di OpenZFS, noto per la sua robustezza e integrità dei dati. Inoltre, per sistemi come FreeBSD 14, che includono questa versione di OpenZFS, si raccomanda cautela. Colin Percival, esperto BSD, ha sottolineato su Twitter che la funzionalità “clonazione di blocchi” è disattivata di default in FreeBSD 14 e ha avvertito di non attivarla per evitare la perdita di dati.

Il bug si manifesta come corruzione di file – i file copiati mostrano una combinazione di zeri e blocchi di dati che sembrano codificati in Base64. Interessante è che i controlli di salute del file system non rilevano il problema, un aspetto che richiede attenzione.

La natura del bug sembra essere legata a circostanze specifiche e rare. Bronek Kozicki ha spiegato su GitHub che il bug potrebbe verificarsi durante la scrittura asincrona di un file, se in quel preciso momento si legge la parte del file che sta ancora venendo scritta. Questo può portare a dati corrotti, un problema non facilmente rilevabile senza confrontare i checksum.

Gli sviluppatori hanno identificato un problema correlato ai dnode di ZFS e alla loro gestione, che potrebbe essere un bug più antico e nascosto. Il bug è diventato più evidente con l’introduzione della nuova funzionalità di clonazione dei blocchi, soprattutto in sistemi con multi-core.

Per gli utenti Linux, sembra che il bug sia correlato anche alla versione di coreutils utilizzata, in particolare versioni successive alla 9.x. Non è ancora chiaro se Ubuntu 23.10 abbia attivato di default questa funzione nel suo supporto ZFS, che è recentemente ritornato ma ancora sperimentale.

Ci si aspetta che OpenZFS 2.2.2 arrivi presto per risolvere questi problemi. Nel frattempo, la community è invitata a mantenere un approccio cauto e a considerare backup su altri file system per garantire la sicurezza dei dati.

Abbiamo già menzionato il lavoro dell’esperto BSD Colin Percival, ma chiunque abbia già installato questa release “punto zero” dovrebbe prestare attenzione al suo avvertimento su Twitter X: “Il codice ZFS di FreeBSD 14 supporta la ‘clonazione di blocchi’. Questa è disattivata per impostazione predefinita. NON ATTIVARE QUESTA FUNZIONALITÀ SE NON VUOI PERDERE DATI.”

Al momento della scrittura, non è chiaro esattamente cosa la causi. Sembra essere una combinazione di circostanze estremamente specifica (e quindi improbabile), il che significa che quasi mai si verifica, come spiega Bronek Kozicki su GitHub:

È necessario comprendere il meccanismo che causa la corruzione. Potrebbe essere presente da un decennio e causare problemi solo in scenari molto specifici, che normalmente non si verificano.

A meno che non si possa adattare il meccanismo di backup alle condizioni descritte di seguito, è molto improbabile essere stati colpiti da esso.

  • Un file è in fase di scrittura (tipicamente in modo asincrono – il che significa che la scrittura non è completata al momento in cui il processo di scrittura “pensa” che lo sia)
  • Nello stesso momento in cui ZFS sta ancora scrivendo i dati, la parte modificata del file viene letta. Lo stesso momento significa “colpire una finestra di tempo molto specifica”, misurata in microsecondi (un milionesimo di secondo).
  • Se viene letto in questo momento molto specifico, il lettore vedrà zeri dove i dati scritti sono in realtà qualcos’altro
  • Se il lettore poi memorizza gli zeri letti in modo errato da qualche altra parte, è lì che i dati vengono corrotti Uno dei cacciatori di bug ha scritto uno script, reproducer.sh, che colpisce i volumi ZFS e controlla se i file vengono corrotti. Uno dei problemi attorno a questa questione è che non c’è modo di scrivere un programma che possa segnalare se un file è stato corrotto o meno ispezionandone il contenuto: è perfettamente normale che alcuni tipi di file contengano lunghi tratti di zeri. L’unico modo per essere sicuri è confrontare i checksum prima e dopo le operazioni di copia – quindi gli utenti preoccupati che non dispongono di backup su altri tipi di file system non possono facilmente dire. Lo strumento integrato di OpenZFS per il controllo della validità dei pool di archiviazione non può rilevare il problema.

Una possibile correzione è aperta, e l’indagine sembra aver scoperto un bug sottostante, diverso e preesistente, che potrebbe essere stato presente già nel 2013. Il bug riguarda i dnode di ZFS e la logica di come il codice verifica se un dnode è “sporco” o meno, che governa se deve scaricarlo: sincronizzare eventuali modifiche sul disco.

È possibile che questa causa unica fosse profondamente nascosta, e quindi molto improbabile da colpire. Sfortunatamente, la nuova funzionalità di copia più veloce ha significato che ciò che era un bug che avrebbe solo corrotto i dati una volta ogni decine di milioni di copie di file, improvvisamente è diventato più probabile, specialmente su macchine con molti core di processore tutti in uso simultaneo.

Per gli utenti Linux, una condizione aggiuntiva sembra essere che il sistema operativo abbia una versione recente del pacchetto coreutils – sopra la versione 9.x. Questo è lo strumento che fornisce la funzionalità del comando cp. Finora, non siamo stati in grado di verificare se Ubuntu 23.10 abbia la funzione di clonazione dei blocchi abilitata per impostazione predefinita nel suo supporto recentemente ritornato (ma ancora sperimentale) per essere installato su ZFS, ma almeno un commento al bug originale è di qualcuno che lo ha riprodotto su Ubuntu.

Sembra molto probabile che OpenZFS 2.2.1, che semplicemente disattiva la clonazione dei blocchi, sarà rapidamente seguito da una release 2.2.2 per correggere il trattamento sottostante dei dnode.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Facebook, Inc. detiene i diritti su Facebook®; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Questo sito non è affiliato, sponsorizzato, o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello Europeo da MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italia.

Torna in alto