Sector 32 is already in use by the program FlexNet
Flexnet ed il relativo “warning”, che di solito si presenta come segue:
/usr/local/sbin/grub-bios-setup: avviso: Sector 32 is already in use by the program `FlexNet’; avoiding it. This software may cause boot or other problems in future. Please ask its authors not to store data in the boot track.
Questo messaggio si presenta solitamente nell’output generato dall’installazione di un sistema operativo Linux-based in sistemi dual-boot (fase dedicata al bootloader) oppure dopo aver impartito il comando grub-install /dev/sdX o il comando update-grub. Incredibile ma vero, generalmente un errore simile è scaturito da un’applicazione installata in Windows o addirittura da Windows stesso.
Cosa è FlexNet e perché dà problemi con GRUB?
Flexnet Publisher (conosciuto come FlexIM) è un software proprietario della Flexera Software, è un vero e proprio gestore di licenze, e si occupa in particolare di gestire determinati tipi di licenze multiple (ad es. le licenze aziendali) ed in alcuni casi si installa in un punto particolare del disco che solitamente è libero oppure, in sistemi multiboot/NFS e simili (con BIOS o in modalità EFI legacy), occupato dalle direttive d’avvio del sistema: stiamo parlando dello spazio che intercorre tra il master boot record del disco e l’inizio del primo settore della prima partizione del disco.
Un cilindro è composto da 63 settori, ed ogni settore è composto a sua volta da 512 byte di dati.
Calcoli alla mano, se nel cilindro 0 sono contenuti i settori da 0 a 62, nella prima partizione dell’hard disk si iniziano a scrivere dati a partire dal settore 63.
I precedenti 62 settori vengono quindi sprecati poiché non appartengono a nessuna partizione e, apparentemente, non riconosciuti dal sistema operativo? La risposta è no.
Un settore particolare è il settore 0 – il vero e proprio punto d’inizio dell’hard disk – che contiene il cosiddetto MBR (il Master Boot Record), ossia quella parte del disco in cui vengono definiti il codice d’avvio del sistema operativo (oppure del bootloader, dipende dai casi), la firma digitale del disco, la firma digitale dell’MBR stesso e, attenzione, l’importantissima tabella delle partizioni. In pratica, i 512 byte del settore 0 sono suddivisi in tale maniera:
byte da 0 a 439: codice d’avvio del sistema operativo/del bootloader (440 byte in totale);
byte da 440 a 443: firma digitale del disco (4 byte in totale);
byte da 444 a 445: bytes nulli (2 byte in totale, rappresentano un delimitatore);
byte da 446 a 509: tabella delle partizioni (64 byte in totale);
byte da 510 a 511: firma digitale dell’MBR (2 byte in totale).
I restanti settori del cilindro (da 1 a 62) sono inizialmente vuoti ma possono essere utilizzati da programmi quali – ad esempio – Grub2, FlexNet ed altri che richiedono spazio e direttive ad un livello ancora più basso rispetto al sistema operativo.
Tornando a noi, ecco il problema: guardando la suddivisione in alto noterete che al bootloader sono dedicati soltanto 440 byte, che oggi per GRUB2 non sono più sufficienti; per cui, quando il bootloader viene installato, il suo codice viene scritto anche in altri settori del cilindro 0 con criteri però non prevedibili (decisi a run-time), cosa che anche FlexNet fa. E’ per questo che il loader ed il gestore “litigano” scatenando il suddetto messaggio d’avviso. In caso GRUB non riesca a scrivere in un settore già occupato da FlexNet il computer potrebbe comunque funzionare, ma non è detto ciò accada.
Aggirare il problema FlexNet ed installare GRUB
Contrariamente a quanto si legge in rete, per riuscire ad installare GRUB senza problemi non è necessario formattare il disco ma semplicemente azzerare i primi 64 settori dell’hard disk o, in alternativa, soltanto il settore occupato da FlexNet e reinstallare GRUB immediatamente dopo.
Per procedere è necessario disporre di una distribuzione Linux funzionante (live o installata sul PC che contiene il disco problematico); in questo tutorial supponiamo che il disco “problematico” su cui bisogna installare GRUB ed azzerare il settore FlexNet sia /dev/sda; si raccomanda, pena la perdita completa dei dati, di non riavviare MAI il computer prima del termine della procedura.
Parte 1: il backup
Come già detto, la prima operazione in assoluto è quella di fare il backup dei primi 63 settori del disco (quelli contenenti la tavola delle partizioni e senza i quali i dati su disco saranno irrimediabilmente persi), da ripristinare all’occorrenza in caso di disastro. Per procedere, bisognerà digitare da terminale
sudo dd if=/dev/sda of=~/backup_settori bs=512 count=63
Spostate il file backup_settori che sarà creato nella home directory e spostatelo immediatamente in un posto sicuro, ad esempio su una chiavetta USB. Potrà tornare estremamente utile in caso di problemi.
Parte 2: la cancellazione
Come già accennato è possibile risolvere in due modi: riempiendo di zeri – e quindi eliminando – i settori da 1 a 62 del disco (rischiando così di compromettere eventualmente anche altri programmi oltre FlexNet) oppure eliminando soltanto il settore occupato da FlexNet (nel nostro esempio è il 32, ma viene comunque segnalato nel warning di GRUB).
Nel primo caso digitate da terminale
sudo dd if=/dev/zero of=/dev/sda bs=512 count=62 seek=1
Mentre, nel secondo caso, digitate
sudo dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=32
Il parametro seek serve a definire il punto del disco da cui iniziare l’operazione. Cambiate il 32 del comando precedente con il settore occupato da FlexNet.
Parte 3: reinstallare GRUB
Se NON avete utilizzato la distribuzione live ma un’installazione residente del sistema operativo, reinstallate (ed aggiornate) GRUB digitando
sudo grub-install
/dev/sda
sudo update-grub
Se invece avete utilizzato una distribuzione live dovrete creare un ambiente di installazione per GRUB chrootando (in pratica “spostando” l’ambiente di lavoro sull’installazione residente di Linux) in essa. Supponendo che Linux sia installato nella partizione /dev/sda2, dovrete digitare da terminale
cd ~
mkdir disco
sudo mount
/dev/sda1 disco
sudo mount -o bind /proc disco/proc
sudo mount -o bind /dev disco/dev
sudo mount -o bind /sys disco/sys
sudo chroot disco
sudo grub-install
/dev/sda
sudo update-grub
sudo umount
/dev/sda1
rm -rf disco
A questo punto GRUB sarà reinstallato e, finalmente, sarà possibile riavviare il PC.