Gestió de fallades
En aquest apartat, assumirem que el disc dur secundari /dev/nvme0n3 ha fallat. Aquest disc forma part del grup de volums vg_webapp i conté el volum lògic lv_data que emmagatzema les dades estàtiques de la web. La fallada del disc dur pot ser deguda a diversos factors, com ara errors de hardware, errors de software, o errors de configuració.
Preparació
- 
Utilitzeu la màquina virtual creada a l'apartat anterior amb el grup de volums vg_webappi el volum lògiclv_data.
- 
Escriviu dades aleatòries a l’arxiu /opt/webapp/dataper simular les dades del lloc web. Podeu utilitzar l’script següent:#!/bin/bash # Numero de gigabytes a escriure amountGB="$1" # Directori on escriure els arxius (per defecte /opt/webapp/data) dir="${2:-/opt/webapp/data}" for i in $(seq 1 "$amountGB"); do dd if=/dev/urandom of="$dir/file$i" bs=1M count=1024 done echo "S'han escrit $amountGB GB de dades a $dir"Executeu el script amb la següent comanda per escriure 5GB de dades a l'arxiu /opt/webapp/data:bash script.sh 5
Tasques
Anàlisi de la fallada
En primer lloc, analitzarem amb més detall utiltizant pvdisplay --maps i lvdisplay --maps per entendre com estan distribuïts els extens del grup de volums i del volum lògic.
    --- Physical volume ---
    PV Name               /dev/nvme0n2
    VG Name               vg_webapp
    PV Size               20.00 GiB / not usable 4.00 MiB
    Allocatable           yes (but full)
    PE Size               4.00 MiB
    Total PE              5119
    Free PE               0
    Allocated PE          5119
    PV UUID               7saOpX-fjg1-afmU-ZoEA-d945-mJzN-6oo0Tl
    --- Physical Segments ---
    Physical extent 0 to 255:
        Logical volume /dev/vg_webapp/lv_sources
        Logical extents 0 to 255
    Physical extent 256 to 2815:
        Logical volume /dev/vg_webapp/lv_data
        Logical extents 0 to 2559
    Physical extent 2816 to 3071:
        Logical volume /dev/vg_webapp/lv_run
        Logical extents 0 to 255
    Physical extent 3072 to 5118:
        Logical volume /dev/vg_webapp/lv_data
        Logical extents 2560 to 4606
    --- Physical volume ---
    PV Name               /dev/nvme0n3
    VG Name               vg_webapp
    PV Size               20.00 GiB / not usable 4.00 MiB
    Allocatable           yes
    PE Size               4.00 MiB
    Total PE              5119
    Free PE               4606
    Allocated PE          513
    PV UUID               4Exs4j-Japi-ab8p-pnYx-FPNY-tKdl-KTFkHq
    --- Physical Segments ---
    Physical extent 0 to 512:
        Logical volume /dev/vg_webapp/lv_data
        Logical extents 4607 to 5119
    Physical extent 513 to 5118:
        FREE
    ```
    ```bash
    --- Logical volume ---
    LV Path                /dev/vg_webapp/lv_sources
    LV Name                lv_sources
    VG Name                vg_webapp
    LV UUID                ElTnFj-nVJT-OwhB-dTmm-l1zR-LNht-Zk8QY1
    LV Write Access        read/write
    LV Creation host, time localhost.localdomain, 2024-07-12 20:42:20 +0200
    LV Status              available
    # open                 1
    LV Size                1.00 GiB
    Current LE             256
    Segments               1
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:2
    --- Segments ---
    Logical extents 0 to 255:
        Type    linear
        Physical volume /dev/nvme0n2
        Physical extents 0 to 255
    --- Logical volume ---
    LV Path                /dev/vg_webapp/lv_data
    LV Name                lv_data
    VG Name                vg_webapp
    LV UUID                Oliogr-YoKj-OeKh-V3jE-bcbe-i25B-fowxdT
    LV Write Access        read/write
    LV Creation host, time localhost.localdomain, 2024-07-12 20:42:25 +0200
    LV Status              available
    # open                 1
    LV Size                20.00 GiB
    Current LE             5120
    Segments               3
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:3
    --- Segments ---
    Logical extents 0 to 2559:
        Type    linear
        Physical volume /dev/nvme0n2
        Physical extents 256 to 2815
    Logical extents 2560 to 4606:
        Type    linear
        Physical volume /dev/nvme0n2
        Physical extents    3072 to 5118
    Logical extents 4607 to 5119:
        Type    linear
        Physical volume /dev/nvme0n3
        Physical extents    0 to 512
    --- Logical volume ---
    LV Path                /dev/vg_webapp/lv_run
    LV Name                lv_run
    VG Name                vg_webapp
    LV UUID                YGKTJ2-HwMi-k9CG-uyM1-wyG5-t0Vh-vGiptU
    LV Write Access        read/write
    LV Creation host, time localhost.localdomain, 2024-07-12 20:42:30 +0200
    LV Status              available
    # open                 1
    LV Size                1.00 GiB
    Current LE             256
    Segments               1
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:4
    --- Segments ---
    Logical extents 0 to 255:
        Type    linear
        Physical volume /dev/nvme0n2
        Physical extents    2816 to 3071
Si analitzem les dades anteriors, podem veure que el volum lògic lv_data està distribuït entre els discs durs /dev/nvme0n2 i /dev/nvme0n3. Això significa que si el disc dur /dev/nvme0n3 falla, les dades emmagatzemades en aquest disc dur es perdran. Si us centreu en /dev/vg_webapp/lv_data veureu que els LEs 0-2559 i 2560-4606 estan en el disc dur /dev/nvme0n2 i equivalenen als PE 256-2815 i 3072-5118. Mentre que els LEs 4607-5119 estan en el disc dur /dev/nvme0n3 i equivalen als PE 0-512. Si fem les operacions assumint que la mida dels PE és de 4MiB i que la mida del volum lògic és de 20GB, podem veure que el disc dur /dev/nvme0n2 conté 18GB i el disc dur /dev/nvme0n3 conté 2GB. La traducció es pot fer utilitzant les següents operacions: $18GB = 4606 * 4MiB$ i $2GB = 512 * 4MiB$.
Simulació de la fallada
- 
Hi ha moltes maneres de simular una fallada de disc, una d'elles es corrompre la secció de metadades lvm del disc /dev/nvme0n3. Per fer-ho, podeu utilitzar la comandaddper sobreescriure els primeres 10MB del disc dur amb zeros:dd if=/dev/zero of=/dev/nvme0n3 bs=1M count=10Alternativament, podeu utilitzar la comanda wipefsper eliminar les signatures del disc dur/dev/nvme0n3:wipefs --all --backup -f /dev/nvme0n3
- 
Un cop hàgiu simulat la fallada del disc dur /dev/nvme0n3, comproveu l'estat del grup de volumsvg_webappi del volum lògiclv_data:vgdisplay vg_webapp lvdisplay /dev/vg_webapp/lv_dataDevice /dev/nvme0n3 has no PVID (devices file 4Exs4jJapiab8ppnYxFPNYtKdlKTFkHq) WARNING: Couldn't find device with uuid 4Exs4j-Japi-ab8p-pnYx-FPNY-tKdl-KTFkHq. WARNING: VG vg_webapp is missing PV 4Exs4j-Japi-ab8p-pnYx-FPNY-tKdl-KTFkHq (last written to /dev/nvme0n3). WARNING: Couldn't find all devices for LV vg_webapp/lv_data while checking used and assumed devices.A partir de la sortida anterior, podem veure que el disc dur /dev/nvme0n3ha fallat i que el grup de volumsvg_webappi el volum lògiclv_datatenen problemes.Si utilitzeu ls -la /opt/webapp/dataodf -hobservareu que encara podeu accedir a les dades. Recordeu que les primeres 18GB estan emmagatzemades al disc dur/dev/nvme0n2. Amb la comanadapvdisplay --mapsilvdisplay --mapspodeu comprovar-ho veient que únicament els LEs corresponents al disc dur/dev/nvme0n3estan marcats com a unknown.
- 
Ara anem a omplir el disc dur /dev/nvme0n2per simular una fallada imminent. Per fer-ho, podeu utilitzar la comandaddper escriure 19GB de dades aleatòries a l'arxiu/opt/webapp/data:bash script.sh 19Com ha pogut guardar 19GB si el disc dur /dev/nvme0n3ha fallat i el disc dur/dev/nvme0n2només té 18GB? Això és degut a que les dades s'estan guardant en el disc dur/dev/nvme0n2però no s'estan actualitzant les metadades de LVM. Això pot ser un problema greu, ja que si el disc dur/dev/nvme0n2falla, les dades es perdran.Aquest fet el podeu posar de manifest intentant guardar dades al següent LE del disc dur /dev/nvme0n2i veureu que no es pot fer. Ja que el 1GB que ell tenia reservat s'ha omplert amb el 1GB restant de la còpia anterior.bash script.sh 1 /opt/webapp/rundd: error writing '/opt/webapp/run/file1': No space left on device
Solucionant la fallada
Per solucionar la fallada del disc dur /dev/nvme0n3, seguirem els següents passos:
- 
Utilitzeu l'eina pvckper comprovar la integritat del disc dur/dev/nvme0n3:pvck /dev/nvme0n3WARNING: Device for PV 4Exs4j-Japi-ab8p-pnYx-FPNY-tKdl-KTFkHq not found or rejected by a filter.A partir de la sortida anterior, podem veure que el disc dur /dev/nvme0n3no es pot trobar. Això és degut a que hem corromput les metadades de LVM del disc dur/dev/nvme0n3.
- 
Utilitzeu l'eina pvckamb l'opció--repairper intentar reparar el disc dur/dev/nvme0n3:pvck --repair -f /etc/lvm/backup/vg_webapp /dev/nvme0n3CHECK: label_header.crc expected 0x5bd06dba CHECK: label_header.type expected LVM2 001 WARNING: No LVM label found on /dev/nvme0n3. It may not be an LVM device. Writing label_header.crc 0xc9fb4741 pv_header uuid Tqyb8i0hyzOyb2AFlgMQJ4bNW6kDiOsJ device_size 21474836480 Writing data_offset 1048576 mda1_offset 4096 mda1_size 1044480 mda2_offset 0 mda2_size 0 Write new LVM header to /dev/nvme0n3? y Writing metadata at 4608 length 2190 crc 0x38751a64 mda1 Writing mda_header at 4096 mda1 Write new LVM metadata to /dev/nvme0n3? yEn aquest punt, hem intentat reparar el disc dur /dev/nvme0n3i hem escrit noves metadades de LVM al disc dur. El problema és que les noves metadades de LVM no coincideixen amb les metadades de LVM del grup de volumsvg_webapp. Ho podeu comprovar amb la comandapvs -o+uuid:pvs -o+uuid WARNING: scan of VG vg_webapp from /dev/nvme0n3 mda1 found mda_checksum 38751a64 mda_size 2190 vs d5280ec2 2174 WARNING: Scanning /dev/nvme0n3 mda1 found mismatch with other metadata. WARNING: scan failed to get metadata summary from /dev/nvme0n3 PVID Tqyb8i0hyzOyb2AFlgMQJ4bNW6kDiOsJ Device /dev/nvme0n3 has PVID Tqyb8i0hyzOyb2AFlgMQJ4bNW6kDiOsJ (devices file none) WARNING: scan of VG vg_webapp from /dev/nvme0n3 mda1 found mda_checksum 38751a64 mda_size 2190 vs d5280ec2 2174 WARNING: Scanning /dev/nvme0n3 mda1 found mismatch with other metadata. WARNING: scan failed to get metadata summary from /dev/nvme0n3 PVID Tqyb8i0hyzOyb2AFlgMQJ4bNW6kDiOsJ PV VG Fmt Attr PSize PFree PV UUID /dev/nvme0n1p3 almalinux lvm2 a-- 18.41g 0 59JST0-TYqg-3nyz-p4ek-MaEk-pJX6-cgGf96 /dev/nvme0n2 vg_webapp lvm2 a-- <20.00g 17.99g 7saOpX-fjg1-afmU-ZoEA-d945-mJzN-6oo0Tl /dev/nvme0n3 vg_webapp lvm2 a-- <20.00g 0 Tqyb8i-0hyz-Oyb2-AFlg-MQJ4-bNW6-kDiOsJ
- 
Actualitzeu les metadades del grup de volums vg_webapp:vgcfgrestore vg_webappEn aquest punt encara observareu WARNINGS, per mismatch de les metadades. Igual es pot omitir. 
- 
Actualitzeu les metadades del grup de volums vg_webapp:vgck --updatemetadata vg_webappAmb aquesta comanda actualitzarem les metadades del grup de volums vg_webappamb les noves metadades del disc dur/dev/nvme0n3. Ara ja no hauríeu de veure cap warning en la sortida depvs -o+uuid.
Canviant el disc
- 
Ara que hem reparat el grup de volums vg_webapp, procedirem a canviar el disc dur/dev/nvme0n3per un de nou. En aquest cas, assumirem que el nou disc dur és/dev/nvme0n4.
- 
Utilitzeu la comanda pvcreateper inicialitzar el disc dur/dev/nvme0n4:pvcreate /dev/nvme0n4
- 
Utilitzeu la comanda vgextendper afegir el disc dur/dev/nvme0n4al grup de volumsvg_webapp:vgextend vg_webapp /dev/nvme0n4
- 
Utilitzeu pvmove per moure les dades del disc dur /dev/nvme0n3al disc dur/dev/nvme0n4:pvmove /dev/nvme0n3 /dev/nvme0n4Aquesta comanda mou les dades del disc dur /dev/nvme0n3al disc dur/dev/nvme0n4. Aquest procés pot trigar una estona depenent de la quantitat de dades a moure.
- 
Utilitzeu la comanda vgreduceper eliminar el disc dur/dev/nvme0n3del grup de volumsvg_webapp:vgreduce vg_webapp /dev/nvme0n3
- 
Utilitzeu la comanda pvremoveper eliminar el disc dur/dev/nvme0n3del grup de volumsvg_webapp:pvremove /dev/nvme0n3
Anàlisi de la situació
Creus que hi ha alguna manera de recuperar les dades del disc dur /dev/nvme0n3? Si la corrupció es fa a nivell de LEs en comptes de metadades. Investigar quines eines podrien ser útils per recuperar les dades del disc dur /dev/nvme0n3.