Skip to content

Instantly share code, notes, and snippets.

@mmenozzi
Last active April 17, 2020 14:52
Show Gist options
  • Save mmenozzi/5140954 to your computer and use it in GitHub Desktop.
Save mmenozzi/5140954 to your computer and use it in GitHub Desktop.
Sostituzione disco in RAID con grub install

Sostituzione disco in RAID con grub install

Si assume che il disco da sostituituire sia /dev/sda mentre il disco buono sia /dev/sdb.

Rimozione del disco dall array RAID

Innanzi tutto, se non ancora stato fatto, è necessario marcare come fallito e poi rimuovere il disco /dev/sda/ dall'array RAID.

# mdadm --manage /dev/md0 --fail /dev/sda1
# mdadm --manage /dev/md1 --fail /dev/sda2
# mdadm --manage /dev/md2 --fail /dev/sda3
# mdadm --manage /dev/md0 --remove /dev/sda1
# mdadm --manage /dev/md1 --remove /dev/sda2
# mdadm --manage /dev/md2 --remove /dev/sda3

A questo punto è possibile procedere con la sostituzione del disco.

Copia della tabella delle partizioni sul nuovo disco

Ora, occorre copiare la tabella delle partizioni da /dev/sdb su /dev/sda. Se il disco è in MBR è possibile usare il comando sfdisk:

# sfdisk -d /dev/sdb | sfdisk /dev/sda

Mentre se il disco è in GPT occorrerà utilizzare il comando sgdisk (attenzione: notare che il primo disco da specificare è quello del parametro -R ovvero quello di destinazione):

# sgdisk -R /dev/sda /dev/sdb
# sgdisk -G /dev/sda

Aggiunta del nuovo disco all'array RAID

Successivamente occorre aggiungere all'array le partizioni di /dev/sda:

# mdadm /dev/md0 -a /dev/sda1
# mdadm /dev/md1 -a /dev/sda2
# mdadm /dev/md2 -a /dev/sda3

Verificare che le partizioni siano stati montate con successo:

# cat /proc/mdstat
Personalities : [raid1]

md2 : active raid1 sdb3[1] sda3[0]
  	  1028096 blocks [2/2] [UU]
      [==========>..........]  resync =  50.0% (514048/1028096) finish=97.3min speed=65787K/sec

md1 : active raid1 sdb2[1] sda2[0]
      2104448 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      208768 blocks [2/2] [UU]

unused devices: <none>

Installazione grub su nuovo disco (se necessaria)

A volte il sistema con il nuovo disco sostituito non parte per mancanza del boot loader. In questo caso le operazioni saranno fatte da una versione live di Linux avviata per emergenza. Per installare il boot loader sul nuovo disco e far ripartire la macchina, occorre montare da qualche parte (ad esempio in /mnt) tutto il filesystem / (che solitamente è /dev/md2). Inoltre, occorre montare /dev/md1 in /boot del filesystem montato ed infine lanciare il grub-install su /dev/sda dopo il chroot. Quindi:

# mount /dev/md2 /mnt
# mount /dev/md1 /mnt/boot
# mount --bind /dev/ /mnt/dev/
# mount -t proc none /mnt/proc
# chroot /mnt /bin/bash
# grub-install /dev/sda

Infine CTRL+D per uscire da chroot e poi reboot.

Ricostruzione della device map (se necessaria)

A volte capita che la devicemap su cui si basa il grub-install non sia valida o aggiornata. In questo caso il grub-install fallisce dicendo che non è presente un filesystem valido su /dev/md1. Per risolvere basta ricostruire la devicemap.

mv /boot/grub/device.map /boot/grub/device.map.old
grub-mkdevicemap

In questo modo il grub-install dovrebbe riuscire.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment