Le scritture del disco rigido non sono supportate Che cosa fa scattare questo errore?

86

Questo messaggio si verifica quando si esce dal menu Grub e prima della schermata iniziale di Ubuntu.

Come posso risolvere il problema per cancellare il messaggio?

E che cosa significa?

error:  Diskfilter writes are not supported

Il sistema si avvia e sembra funzionare bene.

    
posta RCF 18.05.2014 - 01:14

2 risposte

143

È un BUG!

Questo è un bug che si verifica nella versione più recente di Ubuntu Server LTS (Ubuntu Server 14.04 LTS), quando si crea la partizione di avvio (o la partizione di root, quando la partizione di avvio non esiste) all'interno di un LVM o una partizione RAID.

Puoi ottenere maggiori informazioni su questo bug in Ubuntu Launchpad: Bug # 1274320 "Errore: diskfilter le scritture non sono supportate ".

Aggiornamento: questo bug è già stato risolto in Ubuntu Server 14.04 e alcune versioni più recenti di Ubuntu. Probabilmente, devi solo eseguire apt-get upgrade .

Perché si verifica questo errore?

Quando il sistema si avvia, GRUB legge ( load_env ) i dati in /boot/grub/grubenv . Questo file si chiama Blocco di ambiente GRUB .

Dal Manuale di GRUB:

% Bl0ck_qu0te%

Questo comportamento può essere fondato in /etc/grub.d/00_header ( update-grub usa questo file per generare il file /boot/grub/grub.cfg ):

if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi

Il problema è che l'istruzione save_env funziona solo in installazioni semplici (non è possibile eseguire save_env all'interno di un disco RAID o LVM). Dal manuale di GRUB:

% Bl0ck_qu0te%

La funzione GRUB recordfail utilizza l'istruzione save_env per aggiornare lo stato recordfail (vedi Guida di Ubuntu - Grub 2 , sezione "Ultimo avvio non riuscito o avvio in modalità di ripristino"). Tuttavia, in Ubuntu 14.04 (e nelle recenti versioni di Debian), l'istruzione save_env (all'interno della funzione recordfail) viene utilizzata anche se GRUB è installato in un LVM o RAID.

Vediamo le righe da 104 a 124 in /etc/grub.d/00_header :

if [ "$quick_boot" = 1 ]; then
    [...]
    case "$FS" in
      btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
    cat <<EOF
  # GRUB lacks write support for $FS, so recordfail support is disabled.
  [...]
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi

GRUB salta correttamente la funzione recordfail quando si utilizzano filesystem non supportati (btrfs, zfs, ecc.), ma non salta LVM e RAID in qualsiasi momento .

In che modo GRUB si protegge dalla scrittura all'interno di RAID e LVM?

Per leggere / scrivere correttamente in un filesystem, GRUB carica un modulo appropriato.

GRUB usa il modulo diskfilter ( insmod diskfilter ) nelle partizioni RAID e il modulo lvm nelle partizioni LVM.

Vediamo l'implementazione di lettura / scrittura del modulo diskfilter :

apt-get source grub2
vim grub2-2.02~beta2/grub-core/disk/diskfilter.c

Sto incollando il codice qui (linee da 808 a 823). L'avvertimento mostrato in questa domanda appare alla riga 821:

static grub_err_t
grub_diskfilter_read (grub_disk_t disk, grub_disk_addr_t sector,
                  grub_size_t size, char *buf)
{
  return read_lv (disk->data, sector, size, buf);
}

static grub_err_t
grub_diskfilter_write (grub_disk_t disk __attribute ((unused)),
             grub_disk_addr_t sector __attribute ((unused)),
             grub_size_t size __attribute ((unused)),
             const char *buf __attribute ((unused)))
{
  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                 "diskfilter writes are not supported");
}

La funzione grub_diskfilter_read è implementata (e GRUB può leggere i filesystem RAID). Tuttavia, la funzione grub_diskfilter_write genera un errore GRUB_ERR_NOT_IMPLEMENTED_YET .

Perché utilizzare quick_boot=0 risolve il problema? E perché è la soluzione sbagliata?

Se guardi ancora una volta il codice /etc/grub.d/00_header , vedrai che il recordfail in primo piano viene utilizzato solo quando quick_boot=1 . Pertanto, la modifica di quick_boot da 1 a 0 disabilita la funzione recordfail e disabilita le scritture nella partizione RAID / LVM.

Tuttavia, disabiliterà anche molte altre funzionalità (esegui grep \$quick_boot /etc/grub.d/* e vedrai). Inoltre, se un giorno cambi la tua directory /boot/grub all'esterno del RAID / LVM, la funzione recordfail sarà ancora disattivata.

In sintesi, questa soluzione disabilita inutilmente le funzionalità e non è generica.

Qual è la soluzione corretta?

La soluzione corretta dovrebbe considerare di disabilitare le istruzioni save_env quando GRUB si trova all'interno delle partizioni LVM o RAID.

Una patch è stata proposta nel sistema Debian Bug Tracker per implementare questa soluzione. Può essere trovato in: link

L'idea alla base di questa patch è:

  • Esegui un comando grub-probe --target=abstraction "${grubdir}" per ottenere il tipo di moduli di astrazione che GRUB utilizza per leggere / scrivere file nella directory /boot/grub ;
  • Se GRUB usa il modulo diskfilter o lvm , salta l'istruzione% record save_env e scrivi un commento appropriato nel file /boot/grub/grub.cfg ;
    • Ad esempio, # GRUB lacks write support for /dev/md0, so recordfail support is disabled.

Come applicare la soluzione corretta?

Se non vuoi aspettare che questa patch venga applicata dai ragazzi di Ubuntu / Debian nel codice ufficiale, puoi usare la mia patch 00_header :

# Download
wget https://gist.githubusercontent.com/rarylson/da6b77ad6edde25529b2/raw/99f266a10e663e1829efc25eca6eddb9412c6fdc/00_header_patched
# Apply
mv /etc/grub.d/00_header /etc/grub.d/00_header.orig
mv 00_header_patched /etc/grub.d/00_header
# Disable the old script and enable the new one
chmod -x /etc/grub.d/00_header.orig
chmod +x /etc/grub.d/00_header
# Update Grub
update-grub
    
risposta data Rarylson Freitas 16.07.2014 - 00:42
33

Penso che questo errore si sia verificato a causa della incursione o LVM .

Per una soluzione temporanea per questo problema:

Modifica: /etc/grub.d/10_linux

Sostituisci 'quick_boot="1"' with 'quick_boot="0"'

Quindi:

sudo update-grub
    
risposta data nux 18.05.2014 - 02:14

Leggi altre domande sui tag