Pagina 1 di 2
Ripristinare GRUB [RISOLTO]
Inviato: mar 24 ott 2017, 18:25
da darkstaring
Buonasera, ho clonato il mio vecchio ssd su un nuovo pc che mi è arrivato oggi per riavere il mio vecchio sistema....
In pratica il disco è già clonato ed ho gia' modificato fstab
ma il problema e che non riesco a ripristinare grub...
premetto uso Arch e non Slackware...
il nuovo pc ha partizioni uefi con windows (che vorrei tenere in caso mi serva)
Il vecchio sistema invece aveva un disco mbr... con il passaggio a uefi credo di dover scrivere grub sulla partizione con flag di boot... il problema e che non ci riesco...
Avete qualche suggerimento ?
se volete chiarimenti sono qua'
Grazie mille
Re: Ripristinare GRUB
Inviato: mar 24 ott 2017, 18:53
da rik70
Devi reinstallare grub sulla partizione EFI e rigenerare il config.
Com'è il tuo schema partizioni?
Re: Ripristinare GRUB
Inviato: mar 24 ott 2017, 19:30
da darkstaring
Codice: Seleziona tutto
Dispositivo Start Fine Settori Size Tipo
/dev/sda1 2048 739327 737280 360M EFI System
/dev/sda2 739328 1001471 262144 128M Microsoft reserved
/dev/sda3 1001472 215261183 214259712 102,2G Microsoft basic data
/dev/sda4 454942720 456949759 2007040 980M Windows recovery environment
/dev/sda5 456949760 495912959 38963200 18,6G Microsoft basic data
/dev/sda6 495912960 500107263 4194304 2G Microsoft basic data
/dev/sda7 215261184 454942719 239681536 114,3G Linux filesystem
Arch sta su sda7... il config l'ho già rigenerato
ma non riesco a scrivere sulla partizione EFI...
Sai dirmi come dovrei fare?
Ora sono in live su ubuntu...
Grazie
Re: Ripristinare GRUB
Inviato: mar 24 ott 2017, 20:34
da rik70
Secomdo me ti conviene farlo da archlinux via chroot.
Esempio, dalla live di ubuntu avviata in modalità uefi:
Codice: Seleziona tutto
mkdir /mnt/arch
mount /dev/sda7 /mnt/arch
mount /dev/ --bind /mnt/arch/dev
chroot /mnt/arch /bin/bash
mount none -t proc /proc
mount none -t sysfs /sys
Poi devi montare la partizione EFI. Io per comodità di solito la monto su /boot/efi:
Infine installi grub:
Codice: Seleziona tutto
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=boot
Occhio che affinché l'installazione vada a buon fine mi sa che devi installare prima efibootmgr.
A questo punto in '/boot/efi/EFI/boot' dovresti avere un file 'grubx64.efi'. Rinominalo in 'bootx64.efi' e grub dovrebbe partire al prossimo riavvio. Occhio che di bootx64.efi ce ne potrebbe essere un altro - quello di Win - quindi prima backuppa, magari l'intera partizione EFI.
Re: Ripristinare GRUB
Inviato: mar 24 ott 2017, 21:04
da darkstaring
Grazie mille, ma ancora non funziona:
Codice: Seleziona tutto
[root@ubuntu /]# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=boot
Installazione per la piattaforma x86_64-efi.
EFI variables are not supported on this system.
EFI variables are not supported on this system.
Installazione completata, nessun errore segnalato.
[root@ubuntu /]# pacman -Ss efibootmgr
core/efibootmgr 15-1 [installato]
potrebbe essere perchè ubuntu è lanciato in modalità legacy ?
Re: Ripristinare GRUB
Inviato: mar 24 ott 2017, 21:17
da rik70
darkstaring ha scritto:Grazie mille, ma ancora non funziona:
potrebbe essere perchè ubuntu è lanciato in modalità legacy ?
Sì. Avvia in modalità UEFI.
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 0:17
da darkstaring
Dopo 1000 errori (risolti) legati alla scheda video
sto scrivendo dal mio vecchio sistema

....
Solo una cosa, ho os-prober ma grub-mkconfig non trova windows...
Ho cercato in rete ma ancora non ho trovato la risposta....
Sai darmi qualche altra dritta???...
Grazie mille
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 8:42
da rik70
darkstaring ha scritto: ho os-prober ma grub-mkconfig non trova windows...
Strano... prova a controllare che '/etc/grub.d/30_os-prober' - o quello che è - abbia i permessi di esecuzione.
Altrimenti, creati un file "custom" - esempio: '/etc/grub.d/39_win' - dagli i permessi di esecuzione e piazzaci dentro il contenuto descritto
qui - occhio alla parte fondamentale relativa alle variabili '$fs_uuid' e '$hints_string'.
Infine, rigenera il config di grub.
Anch'io utilizzo quella procedura, perché os-prober mi da problemi, specie su sistemi con più dischi.
Edit
Dimenticavo: i miei file custom iniziano sempre con questo contenuto, come previsto negli esempi forniti col pacchetto grub:
Codice: Seleziona tutto
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
anche se nel link sopra non viene riportato. Ma sinceramente non so se sia necessario.
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 10:45
da darkstaring
ls -al /etc/grub.d/30_os-prober
-rwxr-xr-x 1 root root 11301 16 set 22.50 /etc/grub.d/30_os-prober
Il contenuto e' questo:
Codice: Seleziona tutto
#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
. "$pkgdatadir/grub-mkconfig_lib"
if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
exit 0
fi
if [ -z "`which os-prober 2> /dev/null`" ] || [ -z "`which linux-boot-prober 2> /dev/null`" ] ; then
# missing os-prober and/or linux-boot-prober
exit 0
fi
OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
# empty os-prober output, nothing doing
exit 0
fi
osx_entry() {
if [ x$2 = x32 ]; then
# TRANSLATORS: it refers to kernel architecture (32-bit)
bitstr="$(gettext "(32-bit)")"
else
# TRANSLATORS: it refers to kernel architecture (64-bit)
bitstr="$(gettext "(64-bit)")"
fi
# TRANSLATORS: it refers on the OS residing on device %s
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
cat << EOF
menuentry '$(echo "${LONGNAME} $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${DEVICE}")' {
EOF
save_default_entry | grub_add_tab
prepare_grub_to_access_device ${DEVICE} | grub_add_tab
cat << EOF
load_video
set do_resume=0
if [ /var/vm/sleepimage -nt10 / ]; then
if xnu_resume /var/vm/sleepimage; then
set do_resume=1
fi
fi
if [ \$do_resume = 0 ]; then
xnu_uuid ${OSXUUID} uuid
if [ -f /Extra/DSDT.aml ]; then
acpi -e /Extra/DSDT.aml
fi
if [ /kernelcache -nt /System/Library/Extensions ]; then
$1 /kernelcache boot-uuid=\${uuid} rd=*uuid
elif [ -f /System/Library/Kernels/kernel ]; then
$1 /System/Library/Kernels/kernel boot-uuid=\${uuid} rd=*uuid
xnu_kextdir /System/Library/Extensions
else
$1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
xnu_mkext /System/Library/Extensions.mkext
else
xnu_kextdir /System/Library/Extensions
fi
fi
if [ -f /Extra/Extensions.mkext ]; then
xnu_mkext /Extra/Extensions.mkext
fi
if [ -d /Extra/Extensions ]; then
xnu_kextdir /Extra/Extensions
fi
if [ -f /Extra/devprop.bin ]; then
xnu_devprop_load /Extra/devprop.bin
fi
if [ -f /Extra/splash.jpg ]; then
insmod jpeg
xnu_splash /Extra/splash.jpg
fi
if [ -f /Extra/splash.png ]; then
insmod png
xnu_splash /Extra/splash.png
fi
if [ -f /Extra/splash.tga ]; then
insmod tga
xnu_splash /Extra/splash.tga
fi
fi
}
EOF
}
used_osprober_linux_ids=
for OS in ${OSPROBED} ; do
DEVICE="`echo ${OS} | cut -d ':' -f 1`"
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
BOOT="`echo ${OS} | cut -d ':' -f 4`"
if UUID="`${grub_probe} --target=fs_uuid --device ${DEVICE%@*}`"; then
EXPUUID="$UUID"
if [ x"${DEVICE#*@}" != x ] ; then
EXPUUID="${EXPUUID}@${DEVICE#*@}"
fi
if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
continue
fi
fi
BTRFS="`echo ${OS} | cut -d ':' -f 5`"
if [ "x$BTRFS" = "xbtrfs" ]; then
BTRFSuuid="`echo ${OS} | cut -d ':' -f 6`"
BTRFSsubvol="`echo ${OS} | cut -d ':' -f 7`"
fi
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
# os-prober returns text string followed by optional counter
CLASS="--class $(echo "${LABEL}" | LC_ALL=C sed 's,[[:digit:]]*$,,' | cut -d' ' -f1 | tr 'A-Z' 'a-z' | LC_ALL=C sed 's,[^[:alnum:]_],_,g')"
gettext_printf "Found %s on %s\n" "${LONGNAME}" "${DEVICE}" >&2
case ${BOOT} in
chain)
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' {
EOF
save_default_entry | grub_add_tab
prepare_grub_to_access_device ${DEVICE} | grub_add_tab
if [ x"`${grub_probe} --device ${DEVICE} --target=partmap`" = xmsdos ]; then
cat << EOF
parttool \${root} hidden-
EOF
fi
case ${LONGNAME} in
Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
;;
*)
cat << EOF
drivemap -s (hd0) \${root}
EOF
;;
esac
cat <<EOF
chainloader +1
}
EOF
;;
efi)
EFIPATH=${DEVICE#*@}
DEVICE=${DEVICE%@*}
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' {
EOF
save_default_entry | sed -e "s/^/\t/"
prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
cat <<EOF
chainloader ${EFIPATH}
}
EOF
;;
linux)
if [ "x$BTRFS" = "xbtrfs" ]; then
LINUXPROBED="`linux-boot-prober btrfs ${BTRFSuuid} ${BTRFSsubvol} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
else
LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
fi
prepare_boot_cache=
boot_device_id=
is_top_level=true
title_correction_code=
OS="${LONGNAME}"
for LINUX in ${LINUXPROBED} ; do
LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"
if [ -z "${LLABEL}" ] ; then
LLABEL="${LONGNAME}"
fi
if [ "${LROOT}" != "${LBOOT}" ]; then
LKERNEL="${LKERNEL#/boot}"
LINITRD="${LINITRD#/boot}"
fi
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
recovery_params="$(echo "${LPARAMS}" | grep single)" || true
counter=1
while echo "$used_osprober_linux_ids" | grep 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id' > /dev/null; do
counter=$((counter+1));
done
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${DEVICE}")"
fi
used_osprober_linux_ids="$used_osprober_linux_ids 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id'"
if [ -z "${prepare_boot_cache}" ]; then
prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | grub_add_tab)"
fi
if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
cat << EOF
menuentry '$(echo "$OS $onstr" | grub_quote)' $CLASS --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-simple-$boot_device_id' {
EOF
save_default_entry | grub_add_tab
printf '%s\n' "${prepare_boot_cache}"
cat << EOF
linux ${LKERNEL} ${LPARAMS}
EOF
if [ -n "${LINITRD}" ] ; then
cat << EOF
initrd ${LINITRD}
EOF
fi
cat << EOF
}
EOF
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS} $onstr" | grub_quote)' \$menuentry_id_option 'osprober-gnulinux-advanced-$boot_device_id' {"
is_top_level=false
fi
title="${LLABEL} $onstr"
cat << EOF
menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {
EOF
save_default_entry | sed -e "s/^/$grub_tab$grub_tab/"
printf '%s\n' "${prepare_boot_cache}" | grub_add_tab
cat << EOF
linux ${LKERNEL} ${LPARAMS}
EOF
if [ -n "${LINITRD}" ] ; then
cat << EOF
initrd ${LINITRD}
EOF
fi
cat << EOF
}
EOF
if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
replacement_title="$(echo "Advanced options for ${OS} $onstr" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
fi
done
if [ x"$is_top_level" != xtrue ]; then
echo '}'
fi
echo "$title_correction_code"
;;
macosx)
if [ "${UUID}" ]; then
OSXUUID="${UUID}"
osx_entry xnu_kernel 32
osx_entry xnu_kernel64 64
fi
;;
hurd)
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
EOF
save_default_entry | grub_add_tab
prepare_grub_to_access_device ${DEVICE} | grub_add_tab
grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
case "${grub_fs}" in
*fs) hurd_fs="${grub_fs}" ;;
*) hurd_fs="${grub_fs}fs" ;;
esac
cat << EOF
multiboot /boot/gnumach.gz root=device:${mach_device}
module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
--multiboot-command-line='\${kernel-command-line}' \\
--host-priv-port='\${host-port}' \\
--device-master-port='\${device-port}' \\
--exec-server-task='\${exec-task}' -T typed '\${root}' \\
'\$(task-create)' '\$(task-resume)'
module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
}
EOF
;;
minix)
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" {
EOF
save_default_entry | sed -e "s/^/\t/"
prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
cat << EOF
multiboot /boot/image_latest
}
EOF
;;
*)
# TRANSLATORS: %s is replaced by OS name.
gettext_printf "%s is not yet supported by grub-mkconfig.\n" " ${LONGNAME}" >&2
;;
esac
done
I permessi di esecuzione ci sono...ho anche provato a rimuovere e rimettere os-prober... ma niente... provo a creare il file custom...
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 10:52
da darkstaring
Non riesco a capire cosa sia :
Codice: Seleziona tutto
grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi
&
Codice: Seleziona tutto
grub-probe --target=hints_string $esp/EFI/Microsoft/Boot/bootmgfw.efi
Dice:
These two commands assume the ESP Windows uses is mounted at $esp. There might be case differences in the path to Windows's EFI file, what with being Windows, and all.
Ho provato a montare la partizione di windows e settare la variabile $esp nel punto di mount, ma non funziona
Stavo leggendo questo:
https://wiki.archlinux.org/index.php/Du ... imitations
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 14:24
da rik70
darkstaring ha scritto:Ho provato a montare la partizione di windows e settare la variabile $esp nel punto di mount, ma non funziona
Spetta, devi montare la partizione EFI, non quella di Windows. Esempio:
Ora guarda dentro /boot/efi/EFI e individua dove sta il file indicato guida.
Dovrebbe essere:
Codice: Seleziona tutto
grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
Prova a dare uno sguardo.
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 14:47
da darkstaring
Codice: Seleziona tutto
mount | grep sda1
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
[francesco@Arch grub.d]$ sudo grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
grub-probe: errore: recupero del percorso canonico di "/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi" non riuscito.
Sembra non funzioni
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 15:02
da rik70
Uhm... allora qualcosa non va nel modo canonico. Che sia un'installazione di Win particolare?
Incolla se puoi il tree dell'intera partizione EFI (/boot/efi, in base allo chema che stiamo seguendo).
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 15:04
da darkstaring
/boot/efi/
└── EFI
├── arch
│ └── grubx64.efi
└── boot
└── grubx64.efi
Credo di aver sovrascitto la vecchia partizione di efi... l'installazione e' una windows 10 pro di fabbrica
Re: Ripristinare GRUB
Inviato: mer 25 ott 2017, 15:06
da rik70
darkstaring ha scritto:/boot/efi/
└── EFI
├── arch
│ └── grubx64.efi
└── boot
└── grubx64.efi
Credo di aver sovrascitto la vecchia partizione di efi... l'installazione e' una windows 10 pro di fabbrica
Eh sì, manca tutta la parte relativa al loader di Windows
Il che spiega perché os-prober non trova nulla.
Hai un backup?