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.