|  | 

emFile RAID 1


RAID 1 – Teoria del funzionamento

Il RAID 1 utilizza il “mirroring” per consentire il recupero dei dati. Una copia di tutti i dati presenti sulla partizione master viene mantenuta su una partizione separata chiamata mirror. Il master e il mirror possono risiedere sullo stesso dispositivo di memorizzazione o su dispositivi separati. In caso di difetto hardware o guasto sulla partizione master, i dati possono essere recuperati dalla partizione mirror.

  • Scrittura: Su una richiesta di scrittura del file system, i dati del settore vengono scritti contemporaneamente sia sul master che sul mirror.
  • Lettura: Su una richiesta di lettura, l’add-on RAID 1 legge i dati dal master. In caso di errore di lettura, i dati vengono prelevati dalla partizione mirror. Il dato viene così recuperato e non viene segnalato alcun errore al file system.

Il RAID 1 può essere configurato per archiviare i dati su un unico dispositivo o su due distinti. Se si utilizza un singolo dispositivo, la prima metà viene usata come partizione master. Quando si usano due dispositivi diversi, le dimensioni dei volumi non devono necessariamente corrispondere: il numero di settori disponibili per il file system sarà pari a quello del dispositivo più piccolo. È tuttavia richiesto che la dimensione del settore sia identica per entrambi i dispositivi.


Recupero errori NAND flash

Il driver Universal NAND può utilizzare l’add-on RAID 1 per evitare la perdita di dati quando si verifica un errore di bit non correggibile durante un’operazione di lettura. In questo caso, il driver richiede all’add-on RAID 1 di fornire i dati del settore corretti dalla partizione mirror. Questa procedura si applica sia alle richieste di lettura provenienti dal file system, sia alle operazioni di lettura interne eseguite dal driver Universal NAND (ad esempio quando i dati di un blocco NAND vengono copiati in un’altra posizione).


Sincronizzazione dei settori

Un reset imprevisto che interrompe un’operazione di scrittura può portare a un’incoerenza dei dati. È possibile che i dati dell’ultimo settore scritto siano memorizzati solo sul master e non sul mirror. Dopo il riavvio, il file system continuerà a funzionare correttamente, ma in caso di un errore di lettura che colpisca esattamente quel settore, verrebbero letti dati obsoleti dal mirror, causando una corruzione dei dati.

Questa situazione può essere evitata sincronizzando tutti i settori del volume RAID. L’applicazione può eseguire la sincronizzazione chiamando la funzione API FS_STORAGE_SyncSectors(). Ad esempio, un task a bassa priorità può chiamare questa funzione in parallelo ad altre attività del file system.


Esempio di configurazione

Il seguente frammento di codice mostra come configurare l’add-on RAID per utilizzare due dispositivi di memoria NAND rispettivamente come partizione master e mirror.

/*********************************************************************
*
* Definizioni configurabili
*
**********************************************************************
*/
#define ALLOC_SIZE      0x8000              // Dimensione del memory pool in byte

/*********************************************************************
*
* Dati statici
*
**********************************************************************
*/
static U32 _aMemBlock[ALLOC_SIZE / 4];      // Pool di memoria usato per 
                                            // l'allocazione semi-dinamica.

/*********************************************************************
*
* FS_X_AddDevices
*
* Descrizione funzione
* Questa funzione viene chiamata dal file system durante FS_Init().
* Serve ad aggiungere tutti i dispositivi, usando principalmente FS_AddDevice().
*/
void FS_X_AddDevices(void) {
  //
  // Fornisce memoria al file system per il suo funzionamento.
  //
  FS_AssignMemory(&_aMemBlock[0], sizeof(_aMemBlock));
  
  //
  // Imposta la dimensione massima del settore del file system.
  //
  FS_SetMaxSectorSize(2048);
  
  //
  // Aggiunge e configura il driver NAND per lo storage master (Indice 0).
  //
  FS_AddDevice(&FS_NAND_UNI_Driver);
  FS_NAND_UNI_SetPhyType(0, &FS_NAND_PHY_ONFI);
  FS_NAND_UNI_SetECCHook(0, &FS_NAND_ECC_HW_NULL);
  
  //
  // Aggiunge e configura il driver NAND per lo storage mirror (Indice 1).
  //
  FS_AddDevice(&FS_NAND_UNI_Driver);
  FS_NAND_UNI_SetPhyType(1, &FS_NAND_PHY_ONFI);
  FS_NAND_UNI_SetECCHook(1, &FS_NAND_ECC_HW_NULL);
  
  //
  // Aggiunge e configura il driver RAID.
  // I parametri indicano: (Unità RAID, Driver Master, Indice Master, Driver Mirror, Indice Mirror).
  //
  FS_AddDevice(&FS_RAID1_Driver);
  FS_RAID1_Configure(0, &FS_NAND_UNI_Driver, 0, &FS_NAND_UNI_Driver, 1);
}

Articoli simili

  •  |  | 

    Segger SystemView

    Panoramica SystemView è uno strumento di testing embedded progettato per analizzare e profilare il comportamento dei sistemi real-time. Offre approfondimenti dettagliati sul comportamento a runtime, superando le capacità dei debugger tradizionali. Ideale per sistemi complessi con thread multipli e interrupt, SystemView aiuta gli sviluppatori di software embedded a garantire che i propri sistemi funzionino come…

  •  |  | 

    Segger emWin

    emWin è la libreria grafica per sistemi embedded di SEGGER. Fornisce strumenti e API per la creazione di interfacce grafiche (GUI) su piattaforme microcontrollore, consentendo anche a sistemi con risorse limitate di eseguire interfacce utente interattive di alta qualità. Supporta display sia semplici che complessi ad alta risoluzione, è progettata specificamente per il mondo embedded…

  •  | 

    Segger emCompress

    La riduzione delle dimensioni dei dati per l’archiviazione e il trasferimento è estremamente preziosa nei sistemi embedded. Ridurre l’ingombro dell’archiviazione minimizza la complessità e i costi dei sistemi, mantenendo bassi i requisiti di memoria. Ridurre le dimensioni del trasferimento permette di superare i limiti della larghezza di banda disponibile per l’invio e la ricezione dei…

  •  |  |  | 

    Segger emUSB Host

    Panoramica Il software emUSB-Host consente alle periferiche USB di funzionare con i dispositivi embedded. Fornisce funzionalità complete di host USB, inclusi il supporto per hub esterni e driver di classe (opzionali). Il software è conforme alle specifiche standard stabilite dall’USB Implementors Forum e supporta tutte le modalità di trasferimento (control, bulk, interrupt e isochronous) a…

  •  | 

    Segger emDropbox

    emDropbox di SEGGER è una libreria software che consente alla tua applicazione di accedere facilmente a un account Dropbox utilizzando qualsiasi stack TLS (come emSSL) e qualsiasi stack TCP/IP (come emNet) che supporti i socket. Ciò permette alla tua applicazione di condividere file tra diversi dispositivi o di pubblicare file, come aggiornamenti per i tuoi…