Nota:

Configurazione dei volumi logici RAID su Oracle Linux

Introduzione

Il RAID LVM è un metodo per creare un LV (Logical Volume) che utilizza più dispositivi fisici per migliorare le prestazioni o tollerare gli errori dei dispositivi. In LVM i dispositivi fisici sono volumi fisici (PV, Physical Volumes) in un singolo gruppo di volumi (VG).

Questa esercitazione utilizza le utility di Oracle Linux Volume Manager per creare un volume logico RAID e quindi per risolvere il problema di un guasto al disco.

Obiettivi

Prerequisiti

Qualsiasi sistema Oracle Linux 8 con le configurazioni seguenti:

Imposta ambiente laboratorio

Nota: quando si utilizza l'ambiente di laboratorio gratuito, vedere Oracle Linux Lab Basics per le connessioni e altre istruzioni d'uso.

  1. Se non è già connesso, aprire un terminale e connettersi tramite ssh a ciascuna istanza sopra indicata.

    ssh oracle@<ip_address_of_instance>
    
  2. Verificare che i volumi a blocchi esistano.

    sudo lsblk
    

    L'output dell'ambiente di laboratorio gratuito deve contenere /dev/sda per il file system esistente e i dischi disponibili /dev/sdb, /dev/sdc, /dev/sdd e /dev/sde. Sono inoltre disponibili due dischi aggiuntivi (/dev/sdf, /dev/sdg) che verranno utilizzati in un secondo momento.

Volume fisico (PV)

  1. Creare i volumi fisici (PV) utilizzando i dischi disponibili.

    sudo pvcreate -v /dev/sd[b-e]
    

    Eseguire il comando con l'opzione -v per ottenere informazioni descrittive.

  2. Verificare la creazione del PV.

    sudo pvs
    

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo pvs
      PV         VG        Fmt  Attr PSize  PFree 
      /dev/sda3  ocivolume lvm2 a--  45.47g     0 
      /dev/sdb             lvm2 ---  50.00g 50.00g
      /dev/sdc             lvm2 ---  50.00g 50.00g
      /dev/sdd             lvm2 ---  50.00g 50.00g
      /dev/sde             lvm2 ---  50.00g 50.00g
    

Gruppo di volumi (VG)

  1. Creare il gruppo di volumi (VG) utilizzando i volumi fisici appena creati.

    sudo vgcreate -v foo /dev/sd[b-e]
    
  2. Verificare la creazione del VG.

    sudo vgs
    

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo vgs
      VG             #PV #LV #SN Attr   VSize   VFree  
      foo              4   0   0 wz--n- 199.98g 199.98g
      ocivolume        1   2   0 wz--n-  45.47g      0 
    

Volume logico (LV)

  1. Creare il volume logico RAID (LV).

    sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
    
    • --type: impostare il livello RAID. LVM supporta i livelli RAID 0, 1, 4, 5, 6 e 10.
    • -i: impostare il numero (n) di stripe (dispositivi) per un volume logico RAID 4/5/6. Un LV raid5 richiede dispositivi n+1.
    • -L: dimensione totale dell'array RAID.
    • -n: nome dell'array RAID.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
      Using default stripesize 64.00 KiB.
      Rounding size 5.00 GiB (1280 extents) up to stripe boundary size 5.00 GiB (1281 extents).
      Logical volume "rr" created.
    

    Per ulteriori informazioni, vedere la pagina man lvmraid(7).

  2. Verificare la creazione del v. el.

    sudo lvdisplay foo
    

    L'output mostra tutti i volumi logici contenuti nel foo VG.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvdisplay foo
      --- Logical volume ---
      LV Path                /dev/foo/rr
      LV Name                rr
      VG Name                foo
      LV UUID                vghyRi-nKGM-3b9t-tB1I-biJX-10h6-UJWvm2
      LV Write Access        read/write
      LV Creation host, time ol-node01, 2022-05-19 01:23:46 +0000
      LV Status              available
      # open                 0
      LV Size                5.00 GiB
      Current LE             1281
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     1024
      Block device           252:10
    
  3. Visualizzare il tipo di LV.

    sudo lvs -o name,segtype foo/rr
    
    • Il comando lvs può assumere il percorso LV completo come opzione per limitare i risultati.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvs -o name,segtype /dev/foo/rr
      LV     Type 
      rr     raid5
    

Creare un file system

  1. Creare un file system XFS nell'LV RAID.

    sudo mkfs.xfs -f /dev/foo/rr
    
    • -f: forza la sovrascrittura di un file system esistente.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo mkfs.xfs -f /dev/foo/rr
    meta-data=/dev/foo/rr            isize=512    agcount=8, agsize=163952 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=1311616, imaxpct=25
             =                       sunit=16     swidth=48 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    

    Nota: il file system XFS non può ridurne le dimensioni dopo la creazione. Tuttavia, il comando xfs_growfs può ingrandirlo.

Attivare l'LV RAID

  1. Attivare il file system.

    sudo mkdir -p /u01
    sudo mount /dev/foo/rr /u01
    
  2. Segnala l'uso del disco del file system.

    df -h
    

    Output di esempio:

    [oracle@ol-node01 ~]$ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    ...
    /dev/mapper/foo-rr                 5.0G   69M  5.0G   2% /u01
    

Ridimensionare un LV RAID

Esistono diversi modi per ridimensionare un LV RAID:

Importante: la riduzione di un valore LV è rischiosa e potrebbe causare una perdita di dati. Quando si esegue un file system XFS sull'LV, evitare di ridurre l'LV in quanto XFS non consente di ridurre le dimensioni del file system.

Aumentare la capacità LV RAID

  1. Utilizzando lo spazio libero disponibile nel VG, aumentare la dimensione LV RAID a 10G.

    sudo lvresize -L 10G foo/rr
    

    Per aumentare la dimensione di 10G, utilizzare l'opzione -L +10G.

  2. Verificare che il valore LV sia aumentato a 10G.

    sudo lvs foo/rr
    

    Nel file LSize dovrebbe essere visualizzato 10g.

  3. Aumentare il file system.

    sudo xfs_growfs /u01
    
  4. Segnala l'uso del disco del file system aggiornato.

    df -h
    
  5. Controllare lo stato di sincronizzazione RAID prima di procedere.

    Avvertenza: se si procede troppo rapidamente al passo successivo, potrebbe essere visualizzato un errore dovuto alla mancata sincronizzazione di foo/rr.

    Questo errore si verifica se la sincronizzazione non è stata completata dopo il ridimensionamento del valore LV RAID sopra riportato.

    Controllare il LV RAID con watch sudo lvs foo/rr e attendere che il campo Cpy%Sync raggiunga il 100%. Una volta che Cpy%Sync raggiunge il 100%, utilizzare ctrl-c per uscire dal comando watch.

Per ulteriori informazioni, vedere le pagine man lvresize(8), lvextend(8) e lvreduce(8).

Aumenta stripe su RAID LV

La modifica del numero di stripe su un LV RAID aumenta la capacità complessiva ed è possibile su RAID4/5/6/10. Ogni striping aggiuntivo richiede un numero uguale di volumi fisici (dispositivi) non allocati all'interno del gruppo di volumi.

  1. Controllare i volumi fisici (PV) presenti nel foo VG.

    sudo pvs
    

    Gli output /dev/sdb, /dev/sdc, /dev/sdd e /dev/sde sono tutti associati al foo VG.

  2. Determinare se sono presenti volumi fisici non utilizzati.

    sudo pvdisplay -m /dev/sd[b-e]
    

    Output di esempio:

      --- Physical volume ---
      PV Name               /dev/sdb
      VG Name               foo
      PV Size               50.00 GiB / not usable 4.00 MiB
      Allocatable           yes 
      PE Size               4.00 MiB
      Total PE              12799
      Free PE               11944
      Allocated PE          855
      PV UUID               Q1uEMC-0zL1-dgrA-9rIT-1xrA-Vnfr-2E8tJT
       
      --- Physical Segments ---
      Physical extent 0 to 0:
        Logical volume	/dev/foo/rr_rmeta_0
        Logical extents	0 to 0
      Physical extent 1 to 854:
        Logical volume	/dev/foo/rr_rimage_0
        Logical extents	0 to 853
      Physical extent 855 to 12798:
        FREE
    ...
    

    Il comando pvdisplay con l'opzione -m mostra il mapping di estensioni fisiche a volumi logici ed estensioni logali. Il PV /dev/sdb nell'output di esempio mostra le estensioni fisiche associate al valore LV RAID. Lo stesso dovrebbe comparire per /dev/sdc, /dev/sdd e /dev/sde.

  3. Aggiungere un altro PV al VG.

    Poiché il valore LV RAID esistente utilizza tutti i volumi fisici esistenti, aggiungere /dev/sdf al foo PV.

    sudo vgextend foo /dev/sdf
    

    L'output mostra che il comando vgextend converte /dev/sdf in un PV prima di aggiungerlo al foo VG.

  4. Aggiungere una stripe al LV RAID.

    sudo lvconvert --stripes 4 foo/rr
    

    Rispondere con y al prompt.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvconvert --stripes 4 foo/rr
      Using default stripesize 64.00 KiB.
      WARNING: Adding stripes to active and open logical volume foo/rr will grow it from 2562 to 3416 extents!
      Run "lvresize -l2562 foo/rr" to shrink it or use the additional capacity.
    Are you sure you want to add 1 images to raid5 LV foo/rr? [y/n]: y
      Logical volume foo/rr successfully converted.
    
  5. Verificare la nuova dimensione LV.

    sudo lvs foo/rr
    

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvs foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      rr   foo rwi-aor--- 13.34g                                    2.24          
    

    La capacità (LSize) è aumentata da 3.34g e inizia la sincronizzazione (Cpy%Sync). La sincronizzazione è il processo che rende tutti i dispositivi in un LV RAID coerenti tra loro e una sincronizzazione completa diventa necessaria quando i dispositivi nel LV RAID vengono modificati o sostituiti.

  6. Controllare lo stato della sincronizzazione.

    Esegui il controllo fino a quando l'avanzamento non raggiunge il 100%.

    watch sudo lvs foo/rr
    

    Una volta che Cpy%Sync raggiunge il 100%, utilizzare ctrl-c per uscire dal comando watch.

    Di seguito sono riportati alcuni altri modi per utilizzare il comando watch.

    • Eseguire watch -n 5 sudo lvs foo/rr per aggiornare ogni 5 anziché i 2 predefiniti.
    • Eseguire timeout 60 watch -n 5 sudo lvs foo/rr per uscire automaticamente dopo gli anni '60.
  7. Visualizzare il nuovo intervallo di segmenti e il PV, che ora include /dev/sdf.

    sudo lvs -a -o lv_name,attr,segtype,seg_pe_ranges,dataoffset foo
    

Recupera un dispositivo RAID non riuscito in un LV

Gli array RAID possono continuare a essere eseguiti con dispositivi che presentano errori. La rimozione di un dispositivo per tipi RAID diversi da RAID1 implica la conversione in RAID di livello inferiore (da RAID5 a RAID0 in questo caso).

La funzionalità LVM consente di sostituire un dispositivo in cui si è verificato un errore in un volume RAID in una singola operazione grazie al comando lvconvert --repair per i dispositivi in cui si è verificato un errore anziché rimuovere un'unità in cui si è verificato il guasto e, eventualmente, aggiungere una sostituzione.

  1. Controllare il layout RAID LV corrente.

    sudo lvs --all --options name,copy_percent,devices foo
    
  2. Simulare un errore in /dev/sdd.

    echo 1 | sudo tee /sys/block/sdd/device/delete
    
  3. Dopo un errore, controllare di nuovo il layout RAID LV.

    sudo lvs --all --options name,copy_percent,devices foo
    

    Verificare i dispositivi [unknown].

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvs --all --options name,copy_percent,devices foo
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      LV            Cpy%Sync Devices                                                                   
      rr            100.00   rr_rimage_0(0),rr_rimage_1(0),rr_rimage_2(0),rr_rimage_3(0),rr_rimage_4(0)
      [rr_rimage_0]          /dev/sdb(855)                                                             
      [rr_rimage_0]          /dev/sdb(1)                                                               
      [rr_rimage_1]          /dev/sdc(855)                                                             
      [rr_rimage_1]          /dev/sdc(1)                                                               
      [rr_rimage_2]          [unknown](855)                                                            
      [rr_rimage_2]          [unknown](1)                                                              
      [rr_rimage_3]          /dev/sde(855)                                                             
      [rr_rimage_3]          /dev/sde(1)                                                               
      [rr_rimage_4]          /dev/sdf(855)                                                             
      [rr_rimage_4]          /dev/sdf(1)                                                               
      [rr_rmeta_0]           /dev/sdb(0)                                                               
      [rr_rmeta_1]           /dev/sdc(0)                                                               
      [rr_rmeta_2]           [unknown](0)                                                              
      [rr_rmeta_3]           /dev/sde(0)                                                               
      [rr_rmeta_4]           /dev/sdf(0)        
    
  4. Sostituire il dispositivo in cui si è verificato il guasto.

    sudo lvconvert --repair foo/rr
    

    Rispondere con y al prompt.

    Impossibile trovare spazio o dispositivo disponibile da utilizzare nel VG.

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvconvert --repair foo/rr
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
      Insufficient free space: 856 extents needed, but only 0 available
      Failed to replace faulty devices in foo/rr.
    

    Attenzione: se l'errore contiene un messaggio "Impossibile sostituire i dispositivi nel foo/rr mentre non è sincronizzato", verificare che RAID-LV sia sincronizzato eseguendo watch sudo lvs foo/rr e confermando che Cpy%Sync è 100%. Quindi, provare di nuovo il comando lvconvert.

  5. Aggiungere il dispositivo /dev/sdg al VG

    sudo vgextend foo /dev/sdg
    

    I messaggi AVVERTENZA nell'output sono dovuti a un'unità ancora mancante.

  6. Riprovare a sostituire l'unità guasta.

    sudo lvconvert --repair foo/rr
    

    Rispondere di nuovo con y al prompt.

    L'output mostra di nuovo i messaggi di AVVERTENZA relativi all'unità mancante, ma il comando ha sostituito correttamente il dispositivo difettoso nel VG.

  7. Esaminare il layout.

    sudo lvs --all --options name,copy_percent,devices foo
    

    /dev/sdg ha sostituito tutte le voci del dispositivo [unknown].

  8. Rimuovere il dispositivo non riuscito dal VG.

    Le utility LVM continueranno a segnalare che LVM non è in grado di trovare il dispositivo guasto fino a quando non verrà rimosso dal gateway.

    sudo vgreduce --removemissing foo
    

    I messaggi AVVERTENZA nell'output sono dovuti a un'unità ancora mancante.

  9. Controllare lo stato di sincronizzazione RAID prima di procedere.

    Avvertenza: se si continua troppo rapidamente nella sezione successiva, potrebbe essere visualizzato il seguente messaggio di errore:

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvchange --syncaction check foo/rr
      foo/rr state is currently "recover".  Unable to switch to "check".
    

    Questo errore si verifica se la sincronizzazione non è stata completata dopo l'aggiunta di stripe al LV RAID.

    Controllare il LV RAID con watch sudo lvs foo/rr e attendere che il campo Cpy%Sync raggiunga il 100%.

Verifica coerenza dati in LV RAID (Scrubbing)

LVM offre la possibilità di scrubbing per l'LV RAID, che legge tutti i dati e i blocchi di parità in un array e controlla la coerenza.

  1. Avviare uno scrubbing in modalità di controllo.

    sudo lvchange --syncaction check foo/rr
    
  2. Mostra lo stato dell'azione di scrubbing.

    watch sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
    

    Output di esempio:

    [oracle@ol-node01 ~]$ sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
      LV   SyncAction Cpy%Sync
      rr   check      30.08   
    
  3. Al termine dello scrubbing (sincronizzazione), visualizzare il numero di blocchi incoerenti trovati.

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    L'opzione raid_sync_action visualizza il campo SyncAction con uno dei seguenti valori:

    • idle: tutte le azioni sono state completate.
    • resync: inizializzazione o recupero dopo un errore del sistema.
    • recover: sostituzione di un dispositivo nell'array.
    • check: Alla ricerca delle differenze.
    • repair: Esame e riparazione delle differenze.

    Output di esempio:

    [oracle@ol-node01 ~]$ lvs -o +raid_sync_action,raid_mismatch_count foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
      rr   foo rwi-aor--- 13.34g                                    44.42            check               0
    

    L'output mostra 0 incoerenze (corrispondenze).

  4. (Facoltativo) Correggere le differenze nell'array.

    Questo passo è facoltativo perché è probabile che non esistano differenze in questo array di esempio.

    sudo lvchange --syncaction repair foo/rr
    
  5. (Facoltativo) Controllare lo stato della riparazione.

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    Il campo SyncAction è stato modificato in repair.

Per ulteriori informazioni, vedere le pagine man lvchange(8) e lvmraid(7).

Per ulteriori informazioni:

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi ad altri contenuti per la formazione gratuita sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione sul prodotto, visitare Oracle Help Center.