Triplo salto mortale
Il mio vecchio server aveva bisogno di un upgrade, da Debian 12 a 13 ma dopo un primo test fallito ho scoperto che per Debian 13 trixie la versione i386 è scomparsa, poi scopro che le partizioni hanno spazio insufficente per l’upgrade.
La mia storia con Debian è partita da Sarge 3.1 stable ed è passata alla terza macchina con aggiornamenti costanti nel tempo ma è rimasto a 32 bit.
La prima macchina un AthlonXP 2500 con 2 Gb di RAM e dischi IDE per finire con un i5, 8 Gb di RAM e 2 dischi sata in raid mirror con mdadm.
#cat /var/log/installer/lsb-release DISTRIB_ID=Debian DISTRIB_DESCRIPTION="Debian GNU/Linux installer" DISTRIB_RELEASE="3.1 (installer build 20060304)"
La situazione non è facile perché le vecchie partizioni (raid1 mdadm) ora stanno strette e necessitano di una revisione prima di fare qualsiasi cosa.
Mi metto all’opera provando prima in virtuale con virtulabox e dai test estraggo i comandi necessari per effettuare il triplo upgrade.
• Manipolare partizioni : estensione partizioni RAID1 mdadm
• Crossgrading : passaggio da i386 a amd64
• Debian upgrade : passaggio da bookworms a trixie 12→13
Manipolare partizioni
Questa fase nelle battute iniziali è comune a operazioni simili, cambia solo nella parte finale, in pratica posso copiare raid→raid oppure trasformare da standard→raid o raid→standard.
Cominciamo prendendo il disco sorgente hda-source e il nuovo disco hdb-destination, su a abbiamo il nostro sistema operativo e su b un bel disco pulito formattato per bene.
Installiamo i due dischi sul PC e avviamo usando un live CD dedicato, per queste operazione il mio preferito è Parted Magic perché ha tutti i tools e riconosce da subito il raid.
Il mio partizionamento era un poco anziano, quando è nato avevo solo hd ide da 80GB mentre ora il sata più piccolo è da 250GB così dalla situazione iniziale decido di estendere le partizioni cominciando a dargli forma sul nuovo hd-b, avvio gparted e affetto il disco a piacimento.
PS. la formattazione ora non è fondamentale per me perché poi dovrò eseguirla ancora sugli array.
Di seguito riporto lo schema sintetico, a sinistra la situazione attuale e a destra quella finale:
• root / sda1 (MD0) 12GB → 33GB sdb1
• /home sda2 (MD1) 8GB → 12GB sdb2
• swap sda3 (MD3) 4GB-→ 8GB sdb3
• extended sda4 20GB → 40GB sdb4
• /data sda5 (MD4) 12GB → 24GB sdb5
Nel mio caso il trasferimento è da raid a raid quindi ora occorre creare le partizioni nuove in raid, da console aiutiamoci con i comandi fondamentali per capire la struttura degli hd , blkid e fdisk -l, io mi sono aiutato scrivendo i risultati su un foglio.
mdadm --create /dev/md120 --level 1 --raid-devices=2 missing /dev/sdb1
eseguire per quanti array si vuole fare, l’opzione missing fa in modo che durante le operazioni sono si generino log per la ricerca di una partizione che ancora non c’è.
Passiamo alla formattazione degli array raid creati
mkfs.ext4 /dev/md120
e per tutti gli altri array con stessa formattazione
mkswap /dev/md123
questo solo per raid swap
Andiamo ora a creare i punti di mount necessari per trasferire i dati
mkdir /mnt/data
e
/mnt/new
montiamo le partizioni facendo attenzione a source e target usiamo blkid e fdisk -l se serve.
mount /dev/md0 /mnt/data mount /dev/md120 /mnt/new rsync -a -v --progress /mnt/data/ /mnt/new
! attenzione ! in /mnt/data/ serve la / altrimenti viene copiata la dir /data dentro md120
dopo aver fatto la copia smontiamo le partizioni
umount /mnt/data umount /mnt/new
Ora dobbiamo ripetere queste operazioni quante sono le partizioni da copiare, facendo il mount corretto e dopo la copia fare umount.
Se dovevo passare da standard a raid avrei fatto la stessa cosa solo che per la copia montavo sda1 invece di MD0.
Se dovevo passare da raid a standard non creavo le partizioni raid ma copiavo da MD0 a sdb1.
Adesso la copia dell’hard disk rispecchia le mie esigenze, ho tutti i dati copiati ma il sistema non è avviabile, in questo caso chroot ci viene in aiuto, se non facciamo confusione con i dischi possiamo continuare oppure per sicurezza spegniamo il PC e riavviamolo con solo il nuovo hd-b sempre da live CD.
mkdir /media/k mount /dev/md120 /media/k mount --rbind /dev /media/k/dev mount --rbind /sys /media/k/sys mount --rbind /proc /media/k/proc chroot /media/k /bin/bash --login
Siamo nel sistema, verifichiamo che /etc/fstab e /etc/mdadm/mdadm.conf abbiano gli stessi valori di blkid per i vari array raid.
update-initramfs -u
possibile errore con swap perché non la trova ma non è un problema.
Installiamo GRUB selezionando il disco giusto.
dpkg-reconfigure grub-pc
A questo punto il nostro sistema è avviabile o almeno si spera.
Se dovevo passare da standard a raid avrei prima installato mdadm (apt install mdadm) e poi eseguito le stesse operazioni.
Se dovevo passare da raid a standard avrei rimosso mdadm (apt purge mdadm) e eseguito le stesse operazioni.
Riavviamo il PC da HDB e verifichiamo, se tutto è OK passiamo alla seconda parte, il passaggio da i386 a amd64.
In alternativa se il nostro scopo è stato realizzato potremmo anche completare gli array del raid1 con il secondo HD, nel mio caso verrà eseguita alla fine di tutti i passaggi.
Riporto le operazioni principali.
Avviamo il PC con i due hard drvive per il raid1, il nostro sda già in raid è funzionante e sdb che è un hard disk vergine.
Copiamo il partizionamento da sda a sdb
sfdisk -d /dev/sda | sfdisk /dev/sdb
una verifica con blkid e fdisk -l è sempre un valido aiuto
ora andiamo a ricostruire il raid1 seguendo lo schema di partizioni
mdadm /dev/md120 --add /dev/sdb1
eseguiamo l’operazione per tutti gli array, su un altro terminale è possibile verificarne l’avanzamento
cat /proc/mdstat
se vogliamo mantenere la visuale di aggiornamento
watch cat /proc/mdstat
Al termine installiamo GRUB anche sul nuovo disco con :
dpkg-reconfigure grub-pc

