#151 Le 15/03/2017, à 06:08
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
le bash recup-fstab
#!/bin/bash
# V1 récupère le contenu des fichiers fstab qui peuvent exister sur la machine
# comment ?
# récupération des dev existant par blkid
# pour les partitions déjà montées (via mount)
# lecture et traitement de <partition>/etc/fstab
# et pour chacune des autres partitions
# montage
# lecture et traitement de <point de montage>/etc/fstab
# démontage
# le traitement consiste à écrire dans le fichier DevSd_UBoot_UPart.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSd="/dev/sdxx" UPart="uuid de la partition avec boot" UBoot="uuid du boot"
# le traitement consiste à écrire dans le fichier DevSd_Uboot_Upart-date.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSD="/dev/sdxx" UBoot="uuid du boot" UPart="uuid de la partition avec boot"
# V2 création fichier UBoot_UPart contenant les uuid d'un système avec boot séparé
# format uuid1-uuid2 et uuid2-uuid1 servira lors du traitement modif-grub
function OK {
# à cause de problème d'affichage
reponse=""
while [[ $reponse != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="
(remarque : il manque des soulignés dans le nom des fichiers !!!)
le but principal de ce sous programme est de créer le fichier
$fich_fstab_conc
qui contiendra les uuid des sysèmes avec boot séparé
il crée aussi (pour info d analyse) le fichier
DevSd_UBoot_UPart-$num.txt
qui contiendra entre autre le fichier /etc/fsab des partitions présentes
le fichier
"$fich_fstab_court"
qui contient pour chaque partition
DevSd=\"/dev/sdxx\" UPart=\"uuid de la partition avec boot\" UBoot=\"uuid du boot\"
et le fichier
"$fich_fstab_long"
comment ? partie délicate
récupération des dev existants par sudo blkid
pour les partitions déjà montées (via mount)
lecture et traitement de <partition>/etc/fstab
et pour chacune des autres partitions
montage
lecture et traitement de <point de montage>$fich_recup
démontage
SOUS-PROGRAMME DE MODIF GRUB
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYnN S.V.P." ;;
esac
done
}
function rech_uuid_dev { # si $1 est dans dev[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${dev[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function rech_uuid_label { # si $1 est dans label[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${label[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function ecrit_uuid1_uuid2 { # recoit $1 $2 sous la fore UUID= ou LABEL= ou /dev/sdxx
# écrit uuid1-uuid2 et uuid2-uuid1 dans $fich_fstab_conc
# en remplacant le label ou le /dev/sdxx par l'uuid correspondant
# et en enlevant UUID= et LABEL=
uuid1=""
uuid2=""
echo "fonction ecrit_uuid1_uuid2 $1 $2"
#pour le premier paramètre
debut=`echo "$1" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$1" # /dev/sdxx on recherche l'uuid correspondant
uuid1="$uuid"
;;
UUID\= )
uuid1=`echo "$1" | cut -c6-` # si UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$1" | cut -c7-` # si LABEL on prend ce qui se trouve après =
uuid1="$uuid" # et on recherche l'uuid correspondant
;;
esac
#même chose pour le deuxième paramètre
debut=`echo "$2" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$2" # /dev/sdxx on recherche l'uuid correspondant
uuid2="$uuid"
;;
UUID\= )
uuid2=`echo "$2" | cut -c6-` # UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$2" | cut -c7-` # LABEL on prend ce qui se trouve après =
uuid2="$uuid" # et on recherche l'uuid corespondant
;;
esac
if [[ -n $uuid1 ]] && [[ -n $uuid2 ]]
then
# on écrit les deux combinaisons possibles , plus simple à traiter ensuite
echo $uuid1-$uuid2 >> $fich_fstab_conc
echo $uuid2-$uuid1 >> $fich_fstab_conc
fi
echo "fin de fonction ecrit_uuid1 uuid2 =1=>$uuid1<=== =2=>$uuid2<==="
}
function ecrit_ligne_court { # ecrit $1 $2 $3 formatés dans un fichier
# et si $3 (UBoot) non vide
# uuid1-uuid2 dans UBoot_UPart
printf "DevSd=%-18s UPart=%-36s UBoot=%-36s\n" "$1" "$2" "$3" >> $fich_fstab_court
if [[ -n "$3" ]] # si uboot non vide
then
ecrit_uuid1_uuid2 "$2" "$3" # envoie uuid de partition et uuid de boot
fi
}
function trans_ligne_fstab { # récupère les champs d'une ligne
# champ1 champ2 champn mais on ne s'intérese qu'aux champs 1 et 2
# champ1 : UUID=uuid ou LABEL=label ou le dev [non traités : PARTUUID= PARTLABEL=]
# champ2 : le point de montage
champ1=`echo "$1"|awk -F" " '{printf ("%s",$1)}'` # bloc spécial ou système de fichiers distant à monter
champ2=`echo "$1"|awk -F" " '{printf ("%s",$2)}'` # c'est le point de montage
case "$champ2" in
\/ )
dev_part=$champ1 # si champ2 est / on positionne dev_part sur champ1
;;
\/boot )
dev_boot=$champ1 # si champ2 est /boot on positionne dev_boot sur champ1
;;
esac
}
# début du programme #####################################################################################
# variables
res_blkid="blkid-res.txt" # le fichier contenant le résultat de sudo blkid
#########################################################
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
fich_fstab_long="DevSd_UBoot_UPart-$num.txt" # fichier résultant commenté
fich_fstab_court="DevSd_UBoot_UPart.txt" # fichier résultant court DevSd=...U1...U2
fich_fstab_conc="UBoot_UPart.txt" # fichier résultant concaténé UUID1-UUID2
fich_fstab_conc_num="UBoot_UPart-$num.txt" # conserve les données , ménage à faire manuellement
rep_mnt=/mnt/jpb-$num # répertoire pour montages/démontages
fich_recup=/etc/fstab # le fichier à récupérer dans les partitions
rm $fich_fstab_court
echo "# $num : couples uuid-boot - uuid-systeme des menuentry en boot séparé" > $fich_fstab_conc
OK # présentation du programme / sortie ou non
reponse=""
while [[ $reponse != [oOyYnNaAcC] ]]
do
titre="récupération des UUID et LABEL des partitions des disques"
texte="
Récupération des infos dans les fichiers $fich_recup des partitions
ce programme travaille avec sudo pour
récupérer les dev (blkid)
effectuer des montages/démontages
il vous demandera donc votre mot de passe d'administration
répondez par
(oOyY) pour lancer la commande sudo blkid ( remise à jour du fichier)
(aA) pour arrêter ce programme
O pour récupérer les devices via SUDO
A Arrêter
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) sudo blkid > $res_blkid ;;
[aA] ) echo "arrêt du programme" ; exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYaA S.V.P." ;;
esac
done
# récupératon des dev label et UUID
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset bmont # point de montage à cause du boot séparé
unset btype #le type de la partition
maxuuid=-1
while read ligne # lecture et traitement du fichier généré par sudo blkid
do
# c'est le même script que dans modif-grub
# certaine lignes sont inutiles mais je les ai laissées
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
#le dev est le premier champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 1
# init variables d'indice maxuuid
dev[maxuuid]=$tmp # le dev de la ligne blkid
label[maxuuid]="" # le label de la ligne blkid
uuid[maxuuid]="" # l'uuid de la ligne blkid
btype[maxuuid]="" # le type de la ligne blkid
mnt_dev[maxuuid]="1" # modifié par mount : 0 si le dev est monté
p_dev[maxuuid]="" # modifié par mount : point de montage
echo ${tableau[@]}
# positionnemnt des variables d'indice maxuuid en fonction de la ligne blkid
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done <$res_blkid
#récupération des partitions déjà montées
mount | grep '^\/dev' > tmp.txt
# 1 2 3 4 5 6
# /dev/sda11 on /media/SH type ext4 (rw,relatime,data=ordered)
# remarque :
# awk -F" " '{printf ("%s ",$1)}' tmp.txt
# donne
# tous les dev séparés par une espace grace à "%s "
# awk -F" " '{printf ("%s ",$3)}' tmp.txt
# donne
# tous les points de montage séparés par une espace grace à "%s "
mdev=(`awk -F" " '{printf ("%s ",$1)}' tmp.txt`) # les dev montés dans un tableau
mont=(`awk -F" " '{printf ("%s ",$3)}' tmp.txt`) # les points de montage dans un tableau
# positionnement montée ou non de chaque dev
for i in ${!dev[@]} # pour tous les indices des dev
do
for j in ${!mdev[@]} # pour tous les indices des partitions montées
do
if [[ "${dev[$i]}" = "${mdev[$j]}" ]]
then
mnt_dev[i]="0" # 0 indique que le dev est montée
p_dev[i]=${mont[$j]} # le point de montage du dev
break
fi
done
done
# sortie des uuid label pour info
rm tmp_u_l.txt
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" # && [[ -z "$aff_dev" ]] && aff_dev="_"
aff_mnt_dev="${mnt_dev[$p]}" # && [[ -z "$aff_mnt_dev" ]] && aff_mnt_dev="_"
aff_p_dev="${p_dev[$p]}" # && [[ -z "$aff_p_dev" ]] && aff_p_dev="_"
# avec en plus modif d'affichage
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="_"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="_"
case $aff_mnt_dev in # si monté il y a p_dev sinon il n'y a pas !
0)
printf "%02s %-10s %-36s LABEL %-20s sur %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_p_dev $aff_btype | tee -a tmp_u_l.txt
;;
1)
printf "%02s %-10s %-36s LABEL %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp_u_l.txt
;;
esac
((p++))
done
reponse=""
titre="concordances dev<=>LABEL<=>UUID<=>point de montage (de blkid) Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
if [[ $code -eq 0 ]]
then
echo "OK je continue"
else
echo ; echo "Annulation demandée" ; echo ; exit 1
fi
##################################################
# pour cette partie il est absolument nécessaire d'avoir une liste des dev corrects
# d'où le sudo blkid effectué plus haut !
##################################################
echo "récupération des fstab de toutes les partitions" > $fich_fstab_long
echo >> $fich_fstab_long
############################################################
echo "pour les partitions déjà montées :" >> $fich_fstab_long
echo ${!dev[@]}
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]} ${mnt_dev[$i]}
[[ ${mnt_dev[$i]} = "1" ]] && continue # non monté suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
# on pourrait en ajouter d'autres
echo >> $fich_fstab_long
echo ${dev[$i]} "montée sur" ${p_dev[$i]} >> $fich_fstab_long
#pour chaque dev monté on récupére les infos de fstab
fich=${p_dev[$i]}$fich_recup
fich=`sed 's/\/\//\//g' <<< $fich` # supprime les doubles // (à cause de //etc/fstab)
echo $fich #soit /etc/fstab soit /xxx/xxx/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo "$fich de ${dev[$i]}" >> $fich_fstab_long
# on ne garde que les lignes non commentées et non vide
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
#si tmp n est pas vide , elle commence par #
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
done
echo >> $fich_fstab_long
##############################################################
echo "pour les partitions non montées :" >> $fich_fstab_long
if [[ -e "/mnt" ]]
then
echo "réperoire /mnt présent"
else
echo "le répertoire /mnt n'existe pas !!!"
exit 1
fi
rep_mnt_tmp="/mnt/jpb-$num"
echo "création du répertoire $rep_mnt_tmp pour monter les partitions"
sudo mkdir $rep_mnt_tmp
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]}
[[ ${mnt_dev[$i]} = "0" ]] && continue # montée suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
echo
echo "traitement de $i ${dev[$i]} (${btype[$i]})"
echo "montage de ${dev[$i]} sur $rep_mnt_tmp"
sudo mount ${dev[$i]} $rep_mnt_tmp
code=$?
echo "code de retour montage de ${dev[$i]} sur $rep_mnt_tmp : $code"
if [[ $code = 0 ]] # si le montage est réussi
#################### montage réussi ####################
then
fich=$rep_mnt_tmp/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo ${dev[$i]} montée sur $rep_mnt_tmp >> $fich_fstab_long
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
# si ne commence pas par # , tmp est vide
# et si la ligne n'est pas vide on l'écrit
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
# puis on le démonte avec boucle sinon le démontage ne se fait pas toujours
boucle=0
code=1
while [[ $code -ne 0 ]]
do
sudo umount "$rep_mnt_tmp"
code=$?
echo "boucle $boucle : ${dev[$i]} code de retour de umount $code"
if [[ $code = 0 ]]
then
echo
echo "boucle $boucle : ${dev[$i]} démontage effectué (code retour $code)"
ls -ails $rep_mnt_tmp
else
echo
echo "boucle $boucle : ${dev[$i]} non démonté (code retour $code)"
sleep 1 # attente en cas de non démontage
((boucle++))
if [[ $boucle -ge 10 ]]
then
echo "problème de démontage de ${dev[$i]}"
exit 1
fi
fi
done # boucle while
############################ échec de montage ###################
else
echo >> $fich_fstab_long
echo "impossible de monter ${dev[$i]} code echec de montage :$code" >> $fich_fstab_long
fi
done # boucle for i dev
echo ; echo
echo "fin de récupération des données de /etc/fstab des partitions présentes sur la machine"
echo ; echo
# sauvegarde de UBoot_UPart pour une utilisation personnelle
cp "$fich_fstab_conc" "$fich_fstab_conc_num"
echo "suppression du répertoire $rep_mnt_tmp en cours"
sudo rmdir $rep_mnt_tmp
code=$?
if [[ $code -ne 0 ]]
then
#rmdir: échec de suppression de '/mnt/jpb-2017:03:11-12:02:43': Périphérique ou ressource occupé
echo
ls -ails /mnt/jpb*
echo "vérifier le contenu du répertoire /mnt/jpb"
echo "faire le ménage dans ce répertoire"
exit 1
fi
echo "supression réussie"
echo "fin normale du programme $0"
exit 0
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#152 Le 15/03/2017, à 06:10
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
la version modif_grub_V35
###########################################################################
EDIT 16-03-2017 : ajout de # en ligne 40
le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
devient
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
dans le même paragraphe
remplacer
read ligne < $fich_source
par
read ligne < "$fich_source"
et
return1
par
exit 1
dans la fonction trier_fichier , mettre la ligne
ne_commence_pas_par_begin
après les lignes echo , deb= , fin=
FIN d'EDIT
############################################################################
#!/bin/bash
# V24 2017-03-06
#V25
# chaine_linux="linux.*\/vmlinu" pour prise en compte de "linux /@/boot/vmlinuz"
#V26 function sort_info_transforme donne des traces
# V28 2017-03-08
# présentation de concordances UUID-LABEL
# un ligne menuentry et submenu peut comporter des blank après }
# variable fin_submenu pour prise en compte des lignes menuentry se terminant par } }
# V29 2017-03-09
# correction due à l'utilisation de ${#uuid[*]} dans la construction concordance label-uuid
# remplacement de tous les while ${#menu[*]} par for ${!menu[@]}
# V30 idem V29 sans les commentaires superflus
# si boot séparé on sort !!!!
# V33 ajout du sous programme recup_fstab_V2 ( étude système à boot séparé)
# V34 suite à V33 , suppression de certaines fonctions devenue inutiles
# réorganisation de certaines fonctions
# V35 le programme ne traite plus que les lignes comprises entre
# ### BEGIN /etc/grub.d/10_linux ###
# et
# ### BEGIN /etc/grub.d/40_custom ###
#
# le fichier à traiter doit commencer par un #
# la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
# si la ligne ### BEGIN /etc/grub.d/40_custom ### est absente
# le programme traitera le fichier jusqu'à la fin
function ne_commence_pas_par_begin {
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
read ligne < "$fich_source"
if [[ $ligne =~ ^"$deb" ]]
then
echo "désolé"
echo "le fichier source à traiter ( $fich_source )"
echo "doit bien commencer par un commentaire"
echo "et en plus"
echo "ne doit pas commencer par"
echo "$deb"
exit 1
fi
}
function trier_fichier {
echo $fich_source
deb="### BEGIN /etc/grub.d/10_linux ###"
fin="### BEGIN /etc/grub.d/40_custom ###"
ne_commence_pas_par_begin
# création de 3 fichiers tmp0-<date>.txt tmp1-<date>.txt tmp3-<date>.txt
fich_source_0=tmp0_$num.txt # lignes du fichier à traiter de 1 à 10_linux
fich_source_1=tmp1_$num.txt # lignes du fichier à traiter de 10_linux à 40_custom
fich_source_2=tmp2_$num.txt # lignes du fichier à traiter de 40_custom à la fin
[[ -e "$fich_source_0" ]] && rm "$fich_source_0" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_1" ]] && rm "$fich_source_1" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_2" ]] && rm "$fich_source_2" # inutile mais évite message d'erreur rm
fich="$fich_source_0"
presence_10_linux=1
while read ligne
do
case "$ligne" in
$deb ) fich="$fich_source_1" ; presence_10_linux=0 ;;
$fin ) fich="$fich_source_2" ;;
esac
echo $ligne >> $fich
done < $fich_source
if [[ $presence_10_linux -eq 1 ]]
then
echo "la présence de la ligne $deb est obligatoire"
echo "le traitement ne commence qu'à partir de cette ligne"
echo "ajouter cette ligne au fichier"
exit 0
fi
}
function verifier_presence_dev { # dans le cas d'utilisation d'un blkid personnel
echo
# mettre les dev de "blkid-res.txt" dans un tableau
dev1=(`awk -F" " '{printf("%s ",$1)}' "blkid-res.txt"`)
# mettre les dev de $res_blkid dans un tableau
dev2=(`awk -F" " '{printf("%s ",$1)}' "$res_blkid"`)
manque=""
for d1 in ${dev1[@]} # /dev/sdxy: /dev/sdzt: de blkid
do
res=`grep $d1 <<< ${dev2[@]}`
[[ -z $res ]] && manque="$manque $d1" # si non trouvé , ajout
done
if [[ -n $manque ]]
then
echo "dans le fichier $res_blkid il manque"
echo ; echo $manque ; echo
echo "tous les dev présents sur la machine doivent être déclarés dans ce fichier"
echo "veuillez éditer ce fichier"
echo "format habituel dev/sdxx: LABEL=\"xxxx\" UUID=\"xxxx\""
exit 0
fi
}
function modif_ligne1_grub { # récupère la première ligne et modifie en y mettant la date
res=`echo "$1" | grep "^ * *#"`
if [[ -n $res ]] # la ligne est bien un commentaire (commence par #)
then
trans="#### $num : $fich_source modifié par $0 ####"
echo $trans > "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
sort_info_transforme "$1" "première ligne modifiée en" "$trans"
else
echo "la première ligne du fichier est "
echo $1
echo
echo "mais il faut que la première ligne du fichier"
echo "$fich_source"
echo "commence par un #"
echo "ajouter cette ligne de commentaire au début de ce fichier"
echo "arrêt du programme"
exit 0
fi #[[ -n $res ]]
}
function OK {
rep=""
while [[ $rep != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="cette partie de programme supprime des lignes supposées inutiles de grub
( paragraphes contenant ......$rech_dev.....$rech_dev........... AVANT la chaine $rech_class )
( menuentry n'ayant pas des UUID égaux dans la ligne search et la ligne linux)
(à partir de V34 les menuentry sur boot séparé devraient être conservés)
le programme demande le nom du fichier à traiter ..
en réel ce devrait être <partition>/boot/gub/grub.cfg ..
et créera un fichier grub-OK-date qui pourra être utilisé pour remplacer le fichier grub
il utilise aussi le label des partitions ou du fichier de référence
pour informer plus précisement la ligne menuentry de grub
on peut utiliser un fichier de référence uuid label (au format blkid)
remarque :pour des essais , on peut traiter n'importe quel fichier ayant un format grub
si le fichier à traiter n'est pas au format grub , il ne fonctionnera pas correctement
et en réel il serait préférable de lancer ce programme après avoir lancé un update-grub
trois fichiers peuvent être créés :
grub-OK-<aaaa:mm:dd-hh:mm:ss>.txt (le grub récupérable)
grub-sup-<aaaa:mm:dd-hh:mm:ss>.txt (les menuentry qui ont été supprimés)
fich_transforme-<aaaa:mm:dd-hh:mm:ss>.txt (les lignes modifiées)
vous pourrez analyser ces fichiers pour voir ce qui s'est passé
avant de remplacer le grub
(en fin de traitement répondez alors non à la demande de remplacement
et faites le remplacement manuellement)
lors du traitement .....
les x qui défilent indiquent des lignes de menu qui seront supprimées
les c qui défilent indiquent les lignes de menu qui seront conservées
les . qui défilent indiquent les autres lignes (qui seront conservées)
un S indique un début de submenu
un M indique un début de menuentry
un m indique la suite de menuentry
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "utilisez seulement oOyYaA S.V.P." ;;
esac
done
}
function choix_fichier_blkid { # retourne 0 si fichier blkid choisi
fich_source=""
titre="$0 Sélectionnez le fichier contenant UUID et LABEL des partitions"
#fich_source=`zenity --file-selection --filename="../blkid/*" --title="$titre"`
fich_source=`zenity --file-selection --title="$titre"`
case $? in #$? est le code de retour de zenity
0) res_blkid="$fich_source" ;;
1) echo "Aucun fichier UUID-LABEL sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
}
function critere_suppression_2 { # se fait après une initialisation de menu[0 ...n]
##### attention les codes de retour ont changé
# 0 si ligne search et ligne linux et uuid égaux (menu conservé + label dans menu[0])
# 1 si pas de ligne search ou linux (menu conservé intégralement)
# ligne search et linux trouvées
# 3 aucun UUID trouvé dans fichier UUID-LABEL
# 2 si uuid différents (menu supprimé à revoir?)
uuid_search="x"
uuid_linux="y"
ligne_search=""
ligne_linux=""
# recherche dans le tableau menu[1..n] de la ligne search
#TEST
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
res=`grep "$chaine_search" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_search="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_search" ]]
then
return 1 # pas de chaine search => on conservera le menu intégralement
fi
# recherche dans le tableau menu[] de la ligne linux
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
tmp=`sed 's/[[:blank:]]//g' <<< "${menu[i]}"` #suppression des blank de menu
res=`grep "$chaine_linux" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_linux="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_linux" ]]
then
return 1 # pas de chaine linux => menu conservé sans modif
fi
#uuid ligne search présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_search
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_search"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_search=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# uuid ligne linux présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_linux
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_linux"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_linux=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# analyse des résultats
if [[ ${uuid_search}${uuid_linux} = "xy" ]]
then
return 3 # aucun des uuid n'a été trouvé dans blkid ( peuvent être égaux ou non )
fi
####################################################################################
# on peut avoir uuid_search uuid_linux
# x 1ea0.... : n'existe pas , existe : code retour 2
# a04f... y : existe , n'existe pas : code retour 2
# bcde... fghi.... : uuids existants et différents: code retour 2
# 1234... 1234.... : uuids existants et égaux : code retour 0
#####################################################################################
# si $uuid_search-$uuid_linux est dans UBoot on renvoie 4
# ce menu correspond à une partition avec boot séparée
for i in ${!UBoot[@]} # pour tous les indices 0..n
do
[[ $uuid_search-$uuid_linux = ${UBoot[$i]} ]] && return 4
done
if [[ "$uuid_search" != "$uuid_linux" ]]
then
return 2 # uuid différents on supprimera ce menu
else
return 0 # uuid egaux on conservera ce menu après modif de menu[0]
fi
} # fin function critere_suppression_2
function ajout_label_menuentry { # ajoute un label à menu[0] (search ou linux)
rech_uuid_label_menuentry "$1" # retour 0 si label trouvé , pas zéro sinon
code=$?
if [[ $code -eq 0 ]]
then # on a un label
tmp=${menu[0]}
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi #[[ $tmp != ${menu[0]} ]]
fi # [[ $code -eq 0 ]]
}
function memorise_menuentry { # mémorise menuentry de submenu pour écriture ultérieure
for p in ${!menu[@]} # pour tous les indices de menu[]
do
((i_s++))
ligne_sousmenu[i_s]=${menu[$p]} # mémorise menu[0 ..n]
((nb_lignes_menu_cons++)) # stat
done
}
function ecrire_lignes_memorisees { # écrit les lignes dans sauv
for p in ${!ligne_sousmenu[@]} # pour tous les indices de ligne_sousmenu[]
do
echo "${ligne_sousmenu[$p]}" >> "$fich_sauv" # écriture l_s[0..n]
((nb_lignes_cons++)) # stat
done
}
function traite_ligne_submenu { # reçoit $1 (ligne submenu '.......{
fin_submenu=1 # sera mise à 0 si un menuentry se termine par } }
submenu="$1" #mise en mémoire de cette ligne
# j'utilise la mémorisation label_submenu du label d'un menuentry précédent
if [[ -n $label_submenu ]]
then
# ajout du label et suppression double label
submenu=`sed "s/submenu '/submenu '${label_submenu} : /" <<< $submenu`
submenu=`sed "s/submenu \"/submenu \"${label_submenu} : /" <<< $submenu`
submenu=`sed "s/${label_submenu} *:* *${label_submenu}/${label_submenu}/" <<<$submenu`
fi
i_s=0
unset ligne_sousmenu
ligne_sousmenu[0]="$submenu" # mémorisation pour sortie finale
((nb_lignes_hors_menu++)) # ligne considérée comme hors menu
# lire les lignes qui suivent submenu jusquà trouver ligne ......} hors menuentry)
while read ligne
do
((nb_lignes_lues++))
# si on trouve .... } hors menuentry on est au bout du submenu
# il faut sauvegarder la ligne submenu , les lignes intermédiaires et menuentry
# je ne traite pas du cas où on trouverait une ligne menuentry terminée par } }
# V28 et suivante ce cas est traité
# une ligne menuentry terminée par } } provoque la fin du submenu ($fin_submenu 0)
# on sort de la boucle si on trouve } en fin de ligne hors menuentry
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # supprime les blancs de la ligne
if [[ "$tmp" =~ }$ || "$fin_submenu" = 0 ]] ### on est en fin de submenu ###
# pas tout à fait exact
# si on peut avoir { ...... } hors menuentry
then
((i_s++))
ligne_sousmenu[i_s]="$ligne" # mémoriser cette ligne
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
ecrire_lignes_memorisees # écriture de ces lignes de submenu
label_submenu=""
return # fin de traitement de submenu
fi # [[ "$tmp" =~ }$ ]]
# V28 élargissement aux blancs de grep après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
if [[ -n $mem ]]
then
res="" # si on trouve la chaine Memory pas intéressant on force res à vide
fi
if [[ -z $res ]]
then # ni menuentry ..{ ni memory ...{
((i_s++)) #
ligne_sousmenu[i_s]="$ligne" # mise en mémoire pour écriture ultérieure
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
else
lire_menuentry # menu[0..n] et ((nb_lignes_lues++))
trt_menu2 "${menu[0]}" # 1 si contient dev dev
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # 1 la ligne contient /dev /dev
then
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # suppression de ce menu
((nb_menu_sup++)) # stat
else # pas 1 : ne contient pas dev dev
critere_suppression_2
code_crit2=$? # 0 1 2 3
case $code_crit2 in
0) # les uuid sont égaux modifier menu[0]
ajout_label_menuentry "$chaine_search"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
1) # pas de search ni de linux on garde sans modif
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé (sans search ou linux)"
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents"
((nb_menu_sup++)) # stat non prévu
;;
3) # uuid non trouvé (search et linux existent)
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé : uuid (search-linux) non trouvé"
((nb_menu_cons++)) # stat non prévu
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
# revoir pour le label
ajout_label_menuentry "$chaine_linux"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi # [[ -z $res ]]
done
# si on arrive ici il y a erreur de traitement quelque part
echo
echo " ligne bach $LINENO"
echo " erreur de format ? dans le fichier $fich_source !!!!!!!!!!"
echo " dernière ligne de menu lue :"
echo
echo ${menu[0]}
echo
echo " dernière ligne lue : $nb_lignes_lues"
echo " $ligne"
sleep 100
exit 0
}
function rech_uuid_label_ligne { # recherche uuid et label de $1 dans uuid[0..n]
# renvoie 0 uuid trouvé et label trouvé uuid_trouve=xxx label_trouve="yyy"
# renvoie 1 uuid trouvé et label vide uuid_trouve=xxx label_trouve=""
# renvoie 2 uuid non trouvé uuid_trouve="" label_trouve=""
uuid_trouve=""
label_trouve=""
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # uuid suivant
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< $1` # $1 est une ligne de menu
if [[ -n $res ]]
then
uuid_trouve=${uuid[$n]}
if [[ -n ${label[$n]} ]]
then
label_trouve=${label[$n]} # si label non vide positionne label_trouve
return 0 # uuid trouvé / label non vide trouvé
else
return 1 # uuid trouvé / label ""
fi
fi
fi
done
return 2 # uuid non trouvé
}
function rech_uuid_label_menuentry { # recherche uuid et label dans la ligne $1 de menu[1 ..n]
for p in ${!menu[@]} # pour tous les indices du tableau 0..n
do
[[ $p = 0 ]] && continue # mais pas dans menu[0]
res=`echo ${menu[$p]} | grep "$1"`
if [[ -n $res ]]
then
rech_uuid_label_ligne ${menu[$p]} # donne uuid_trouve / label_trouve
return $? # 0 uuid égaux
# 1 uuid trouvé , label vide
# 2 pas d'uuid dans search
fi
done
return 3 # pas de search trouvé , (donc pas d'uuid , et donc pas de label) !!!
}
function transforme_ligne_menuentry { # modifie la première ligne d'un menuentry conservé
# recherche l'UUID dans la ligne search --no-floppy --fs-uuid --set=root
# si trouvé , on récupère le label
# si label vide on ne fait rien
# sinon on rajoute avec : en tête après menuentry ' ou menuentry "
#
label_trouve=""
uuid_trouve=""
tmp=${menu[0]} # servira de test pour sortie si modifié
rech_uuid_label_menuentry "$1" # positionne le label à la bonne valeur
code=$? # retour de la fonction
case $code in
0) # UUID trouvé : $uuid_trouve LABEL trouvé : $label_trouve
if [[ $label_submenu = "" ]] # servira dans traitement d'un submenu éventuel
then # on memorise le premier label menuentry trouvé
label_submenu="$label_trouve"
fi
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
#suppression double labels dans cette ligne
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then #TEST
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi
;;
1) # LABEL vide #TEST
sort_info_transforme "$tmp" "pas de label pour $uuid_trouve"
;;
2) #LABEL vide uuid non trouvé #TEST
sort_info_transforme "$tmp" "uuid de ligne search non trouvé"
;;
3) # pas de ligne search trouvée dans menuentry v
sort_info_transforme "$tmp" "ligne search non trouvée"
;;
*) # ???? #TEST
sort_info_transforme "$tmp" "code inconnu : $code"
;;
esac
return $code
}
function lire_menuentry { # met dans tableau menu[n] jusqu'à trouvé } seul sur la ligne
unset menu
i=0
menu[0]="$ligne" # menu[0] est la première ligne
echo -e "M\c" # trace début de menuentry
while read ligne # ligne suivante
do
((i++))
((nb_lignes_lues++))
menu[$i]="$ligne" # mémorisée dans menu [1 .. n]
echo -e "m\c" # trace écran
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # suppression des blancs pour test
if [[ "$tmp" =~ }}$ ]]
then
fin_submenu=0 # termine par } } fin de submenu !!!
fi
if [[ "$tmp" =~ }$ ]] # la ligne se termine par } ?
then
return # oui fin de menuentry
fi
# et si pas de ... } on ira jusqu'en fin de fichier !!!!
# c'est un critère de format de grub
done
}
function sort_menu_0 { # écrit menu[0..n] dans le fichier de sauvegarde
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sauv" # écriture menu[0..n]
((nb_lignes_cons++)) # stat
((nb_lignes_menu_cons++)) # stat
echo -e "c\c" # suivi écran
done
}
function sort_menu_1 { # écrit menu[0..n] dans le fichier suppression
#écriture des paramètres reçus dans fich_sup
echo "#########################" >> $fich_sup
for arg in "$@" # prends $1 $2 ... $n
do
echo $arg >> $fich_sup
#echo >> $fich_sup
done
# écriture du menu dans fichier sup
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sup" # écriture menu[0..n]
((nb_lignes_sup++)) # stat
echo -e "x\c" # suivi écran
done
}
function sort_info_transforme { # écrit les paramètres reçus fich_transforme
echo "#########################" >> $fich_transforme
for arg in "$@" # ( $1 $2 ... $n )
do
echo $arg >> $fich_transforme
#echo >> $fich_transforme
done
}
function trt_menu2 { # analyse le paramètre $1
# renvoie 1 si $1 contient plus d'une fois /dev/sd avant --class (suppresion)
# renvoie 0 sinon
IFS=" " # il faut l'espace comme délimiteur
tableau=($1) # mise en tableau de la ligne
IFS="~" # peut-être utile pour la suite ?
nbdevsd=0 # nombre de fois que l'on trouve /dev/sd (avant --class)
for n in ${!tableau[@]} # de 0 1 2 .... x
do
r_class=`echo ${tableau[$n]} | grep "$rech_class"` # test présence --class
if [[ -n $r_class ]] # --class ou pas ?
then
break # --class est trouvé, sort de la boucle for
else
r_dev=`echo ${tableau[$n]} | grep "$rech_dev"` # test présence /dev/sd
if [[ -n $r_dev ]]
then
((nbdevsd++)) # incrémente si on a /dev/sd
if [[ $nbdevsd -gt 1 ]] # si plus d une fois /dev/sd
then
return 1 # on sort en renvoyant 1
fi #[[ $nbdevsd -gt 1 ]]
fi #[[ -n $r_dev ]]
fi #[[ -n $r_class ]]
done
if [[ $nbdevsd -gt 1 ]] # test nombre
then
return 1 # 1 si plus d'une fois /dev/sd
else
return 0 # 0 sinon
fi
}
# début du programme ##################################################################################
######### variables ###################################
rech_class="\-\-class" # jusqu'à trouver la chaine --class dans menuentry
rech_dev="\/dev\/sd" # la présence de la chaine /dev/sd dans menuentry
res_blkid="blkid-res.txt" # le fichier contenant le résultat de sudo blkid
chaine_search="search \-\-no\-floppy \-\-fs\-uuid \-\-set=root"
# protection des tirets pour les recherche par \ d'où les \-
chaine_linux="linux.*\/vmlinu" # + général "linux......./vmlinu"
label_submenu="" # label valide du menuentry précédent
fich_fstab_conc="UBoot_UPart.txt" # créé par recup-fstab contient les uuid ayant boot séparé
#########################################################
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
fich_sauv=grub-OK-$num.txt
fich_sup=grub-sup-$num.txt
fich_transforme=fich_transforme-$num.txt
fich_fstab=fich_fstab-$num.txt
##### pour les stat #####################################
nb_menu_cons=0
nb_menu_boot_cons=0
nb_menu_sup=0
nb_menu_sans_uuid=0
nb_lignes_sup=0
nb_lignes_cons=0
nb_lignes_lues=0
nb_lignes_hors_menu=0
nb_lignes_menus_cons=0
#########################################################
prg="./recup_fstab_V2" # création de $fich_fstab_conc (UBoot_UPart.txt)
echo "lancement du programme $prg"
#si le programme n'existe pas on sort
! [[ -e "$prg" ]] && echo "il manque le fichier $prg de récupération de infos de fstab" && exit 0
# créé le fichier UBoot_UPart.txt contenant uuid1-uuid2 des systèmes boot séparés
code=0 # permet des essais sans lancer prg , en diésant seulement la ligne qui suit
./$prg # pour des essais mettre #./$prg
code=$?
if [[ $code -ne 0 ]]
then
echo " il y a eu un problème de traitement du programme $prg"
echo " si l'arrêt n'est pas volontaire"
echo " vérifier que le répertoire /mnt/jpb ne comporte pas des résidus de fichiers"
echo " éventuellement faire le ménage dans ce répertoire"
exit 0
fi
echo "suite du programme $0"
if ! [[ -e $fich_fstab_conc ]] # normalement il a été créé par recup_fstab
then
echo "le fichier $fich_fstab_conc est introuvable"
echo "il faut d'abord exécuter recup_fstab"
exit 0
else
echo ; echo
echo " vérification des uuid correspondants à des systèmes sur boot séparés"
echo " remarque : il existe deux lignes par couple"
echo " une ligne uuid1-uuid2 et une ligne uuid2-uuid1"
echo ; echo
echo "#############################################"
cat $fich_fstab_conc
echo "#############################################"
echo ; echo
echo " vérifier visuellement le contenu des lignes comprises entre les ###"
echo tapez sur entrée pour continuer
read g
fi
# lecture et mise en mémoire des infos donnée par le fichier $fich_fstab_conc ("UBoot_UPart.txt")
max_boot=-1
while read l_boot
do
[[ -z $l_boot ]] && echo "ligne vide je passe" && continue # si ligne vide ou commentée
[[ $l_boot =~ ^[[:blank:]]*# ]] && echo "ligne commentée $l_boot je passe" && continue
((max_boot++))
echo $l_boot
UBoot[$max_boot]=$l_boot # format uuid1-uuid2 à la suite
done <$fich_fstab_conc
OK # présentation du programme
rep=""
while [[ $rep != [oOyYaAcC] ]]
do
titre=" Utilisation des UUID et LABEL des partitions des disques"
texte="
Choix du fichier de références LABEL et UUID
répondez par
(aA) pour arrêter ce programme
(oOyY) si vous voulez ré-utiliser le fichier $res_blkid existant
ce fichier a été créé précédemment
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés sur la partition)
(cC) permet de choisir un fichier de référence UUID LABEL
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés dans ce fichier de référence)
!!!!! à partir de V31 ce fichier devra aussi comporter le champ /dev
chaque partition doit être déclarée
le champ UUID est OBLIGATOIRE pour un traitement correct
le champ type est conseillé
ce choix peut servir si vous ne voulez pas labelliser les
partitions mais mettre quand même un label dans grub
ou bien effctuer des essais
(ce choix un peu tordu est un peu difficile à comprendre ?)
le champ /dev/sdxx en premier
le champ LABEL="xxxxxx"
le champ UUID="xxxxxx"
le champ TYPE="xxxxx"
une ligne sera donc de la forme
/dev/sdxx LABEL=\"un label correct\" UUID=\"un uuid correct\" TYPE=\"le type correspondant\"
!!!! en cas de doute utilisez le choix oOyY
puis Valider
si vous répondez non , ce sera le fichier $res_blkid qui sera
utilisé pour mettre à jour le titre des menus et sous menus
dans le fichier traité (surtout utile pour des essais)
O pour réutilisation du fichier blkid
C pour choisir un fichier de référence UUID LABEL
A Arrêter
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) echo "réutilisation du fichier $res_blkid créé précédemment" ;;
[aA] ) echo "arrêt du programme" ; exit 0 ;;
[cC] ) echo "choix du fichier des uuid" ; choix_fichier_blkid ;;
* ) echo "utilisez seulement oO yY aA cC S.V.P." ;;
esac
done
# si le fichier de concordance n'existe pas sortie
! [[ -e "$res_blkid" ]] && echo " $0 fichier UUID-LABEL $res_blkid inexistant" && read g && exit 0
# récupératon dev label UUID dans des tableaux
unset dev
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset btype #le type de la partition
unset bmont # point de montage à cause du boot séparé
############## récupération dev label uuid btype dans le fichier choisi ###################
maxuuid=-1
while read ligne
do
#TEST simplification par continue
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # supprime les : donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 0
dev[maxuuid]=$tmp #récupération du dev de la ligne
label[maxuuid]=""
uuid[maxuuid]=""
btype[maxuuid]=""
echo ${tableau[@]}
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done < $res_blkid
##############################################################################
if [[ "$res_blkid" != "blkid-res.txt" ]]
then
verifier_presence_dev # vérifie que tous les dev du fichier choisi sont bien déclarés
fi
###############################################################################
# sortie des uuid label pour info
rm tmp_u_l.txt
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" && [[ -z "$aff_dev" ]] && aff_dev="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="___"
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="___"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="___"
# car si l'un des $ est "" , il y a erreur d'affichage
printf "%02s %-10s UUID %-36s LABEL: %-20s TYPE : %-10s\n" \
$p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp_u_l.txt
((p++))
done
titre="Affichage des concordances LABEL <=> UUID Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
if [[ $code -ne 0 ]]
then
echo $code
exit 0 #sortie si on ne valide pas
else
echo $code
fi
################ début de traitement du fichier GRUB ###############################
# Quel fichier grub traiter ?
titre="$0 Sélectionnez le fichier GRUB à traiter"
fich_source=`zenity --file-selection --filename="../fichier-grub/*" --title="$titre"`
case $? in # $? est le code de retour de zenity
0) : ;;
1) echo "Aucun fichier sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
#### lecture et traitement du fichier GRUB #######
trier_fichier # création des 3 fichiers de 1 à 10 linux 10 linux à 40 custom 40 custom à la fin
################# traitement jusqu'à 10_linux #####################
prem=0
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]]
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
echo $ligne >> "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
fi
done < "$fich_source_0"
################# traitement de 10_linux à 40_custom
IFS="~"
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]] # pourrait être supprimé depuis V34
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
# entre les crochets on a tab et espace élargisement après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
# res est vide s'il n'y a pas menuentry {
# mem est non vide si on a Memory test -ne pas traiter menuentry 'Memory test
if [[ -n $mem ]]
then # si Memory test on force res à vide
res=""
fi
if [[ -z $res ]]
then # pas menuentry
subm=`echo "$ligne" | grep "^[ ]*submenu.*{[ ]*$"`
if [[ -z $subm ]]
then # pas menuentry pas submenu
echo "$ligne" >> $fich_sauv # écriture de cette ligne dans sauv
((nb_lignes_cons++)) # stat
((nb_lignes_hors_menu++)) # stat
echo -e ".\c" # trace écran
else # contient submenu
echo -e "S\c" # trace
traite_ligne_submenu "$ligne" # traitement de submenu
fi
else # on a menuentry
lire_menuentry # mettre en mémoire dans menu[0..n]
trt_menu2 "${menu[0]}" # rem : 1 si /dev/sd /dev/sd
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # si 1 on supprime
then # le bloc menuentry contient /dev /dev
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # fich_sup
((nb_menu_sup++))
else # menuentry ne contient pas /dev/sd /dev/sd
critere_suppression_2 # analyse des uuid et recherche de label
code_crit2=$?
case $code_crit2 in
0) # les uuid sont égaux
transforme_ligne_menuentry "$chaine_search" # mettre un label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat
;;
1) # menu sans modif (ni search ni linux)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé (sans search ou linux)"
((nb_menu_cons++)) # stat
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents" # écrire dans fich_sup
((nb_menu_sup++)) # stat
;;
3) # uuid non trouvé (search et linux existent)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé : UUID search-linux non trouvé"
((nb_menu_cons++)) # ce menu étant conservé
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
transforme_ligne_menuentry "$chaine_linux" # met label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi #[[ -z $res ]]
fi #[[ $prem -eq 0 ]]
#done < "$fich_source"
done < "$fich_source_1"
echo $nb_lignes_lues
################# traitement 40_custom à fin #####################
if [[ -e "$fich_source_2" ]] # en cas d'essai sans ligne 40_custom
then
while read ligne
do
((nb_lignes_lues++))
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
echo $ligne >> "$fich_sauv"
done < "$fich_source_2"
fi
#################################################################
echo $nb_lignes_lues
# fin présentation des résultats sur l'écran
echo
echo
printf "%-40s %s %s\n" "fichier traité" " : " "$fich_source"
printf "%-40s %s %s\n" "le résultat se trouve dans" " : " "$fich_sauv"
echo
printf "%-39s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues"
printf "%-40s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons"
printf "%-40s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup"
if [[ $nb_lignes_sup -gt 0 ]]
then
printf "%-40s %s %s\n" "fichier des lignes supprimées" " : " "$fich_sup"
echo
fi
printf "%-40s %s %5d\n" "nombre de menus conservés" " : " "$nb_menu_cons"
printf "%-40s %s %5d\n" "nombre de menus supprimés" " : " "$nb_menu_sup"
printf "%-40s %s %5d\n" "nombre de menus avec boot conservés" " : " "$nb_menu_boot_cons"
if [[ $nb_menu_sans_uuid -gt 0 ]]
then
printf "%-40s %s %5d\n" "nombre de menus sans uuid trouvé" " : " "$nb_menu_sans_uuid"
fi
echo
printf "%-40s %s %5d\n" "lignes conservées (hors menu)" " : " "$nb_lignes_hors_menu"
printf "%-40s %s %5d\n" "lignes conservées (menu)" " : " "$nb_lignes_menu_cons"
echo "après avoir vérifié manuellement le fichier"
echo "$fich_sauv"
echo "vous pourrez remplacer grub.cfg par celui-ci à vos risques et périls"
echo
rep=""
while [[ $rep != [oOyYnN] ]]
do
################ mise à jour du fichier traité ou non ###########################
titre=" remplacement de GRUB"
texte="Voulez-vous remplacer le grub original par le nouveau fichier généré (oOyYnN)
mais par précaution si vous répondez oui le fichier
$fich_source (fichier original choisi)
sera sauvegardé dans
$fich_source-$num
Attention
$fich_source
sera remplacé par le contenu du fichier
$fich_sauv (le résultat OK obtenu)
donc si avez choisi de traiter /boot/grub
/boot/grub sera remplacé par le fichier résultant ... prenez vos précautions
personnellement si je traite le fichier réel je réponds N
pour vérifier le contenu du fichier créé
puis j'effectue manuellement la copie
répondez par (oOyYnN)"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) # sauvegarde de "grub" , je conserve $num
echo "OK je sauvegarde le fichier original $fich_source dans $fich_source-$num"
sudo cp "$fich_source" "$fich_source-$num"
#et fich_sauv remplace grub
echo "et je remplace $fich_source par $fich_sauv"
sudo mv "$fich_sauv" "$fich_source"
;;
[nN] )
echo ; echo "grub non remplacé"
echo " mais le fichier $fich_sauv est à disposition"
;;
* ) echo "utilisez seulement oOyYnN S.V.P."
;;
esac
done
echo "taper entrée pour terminer"
read g #pour attendre
exit 0
Dernière modification par ar barzh paour (Le 17/03/2017, à 08:56)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#153 Le 15/03/2017, à 11:30
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonjour.
@ ar barzh paour.
Je n'ai pas trop pigé ce qu'il faut faire avec les scripts.
Depuis l'Os de tests avec partition /boot séparée.
Il faut passer le deux scripts recup_fstabV2, en laissant en place les fichiers créés par ce script. Puis le modif_grub_V35 ?.
Ou directement le modif_grub_V35?.
Édit;
OK, je pense avoir pigé en relisant tes posts et les scripts recup-fstabV2 et modif_grub_v35 .
Après nettoyage de tous les fichiers de travail des tests précédents.
Il faut mettre les deux scripts dans le même répertoire, chez moi dans mon dossier perso. Le script modif_grub_V35 lance le script recup-fstabV2 puisque présent dans le répertoire.
Je teste çà dans la soirée.
@+. Babdu89 .
Dernière modification par Babdu89 (Le 15/03/2017, à 11:51)
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#154 Le 15/03/2017, à 17:52
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
@Babdu
oui
j'ai édité mon post 150
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#155 Le 16/03/2017, à 01:31
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonsoir.
@ar barzh paour.
Test fait depuis, l'Os avec partition /boot séparée.
seule partition système de la config montée, celle du deuxième Os de tests de la clé de tests.
Lancement modif_grub_V35.sh
./recup_fstab_V2 fait bien son travail. Si besoin je posterais les fichiers créés.
Souci dans le fonctionnement du script; modif_grub_V35.sh
Il s'arrête lorsque j'indique et valide le chemin d'accès fichier grub.cfg à traiter.
/boot/grub/tests-modif_grub_V35 et recup_fstab_V2/grub(avec-boot-separe) (copie).cfg
Il ne change rien dans le fichier grub.cfg à traiter.
Retour terminal lancement du script modif_grub_V35.sh
bernard@bernard-System-Product-Name:~$ sudo bash modif_grub_V35.sh
[sudo] Mot de passe de bernard :
lancement du programme ./recup_fstab_V2
rm: impossible de supprimer 'DevSd_UBoot_UPart.txt': Aucun fichier ou dossier de ce type
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
/dev/sda1: LABEL="XP-MASSY" UUID="B664A19764A16ABF" TYPE="ntfs" PARTUUID="00000001-01"
/dev/sda5: LABEL="DONNEES_WD" UUID="3336D5F95125508C" TYPE="ntfs" PARTUUID="00000001-05"
/dev/sda6: UUID="0b82c97d-d077-4191-ae87-de7f2787ba44" TYPE="swap" PARTUUID="00000001-06"
/dev/sda7: LABEL="xubuntu-14-sys-m" UUID="5ed81f97-295e-4246-8aa1-7ae54d6c9e7c" TYPE="ext4" PARTUUID="00000001-07"
/dev/sda8: LABEL="xubuntu-14-hom-m" UUID="08201295-445e-4de7-a95b-a56990a0a9dd" TYPE="ext4" PARTUUID="00000001-08"
/dev/sda9: LABEL="fusion-12-hom-m" UUID="878a2332-9b22-4ca6-b125-d09c3821cf80" TYPE="ext4" PARTUUID="00000001-09"
/dev/sda10: LABEL="ubu-mate-16.04-m" UUID="ea999dc0-aaad-46bb-84ab-6e510bd28348" TYPE="ext4" PARTUUID="00000001-0a"
/dev/sda11: LABEL="fusion-12-sys-m" UUID="aec00812-bb57-4bbe-a5ed-90228e770e48" TYPE="ext4" PARTUUID="00000001-0b"
/dev/sda12: LABEL="voyager16.04.1.1" UUID="2f5e2fc1-c492-408e-956b-1d56a72eb7d3" TYPE="ext4" PARTUUID="00000001-0c"
/dev/sda13: LABEL="fusion-14-massy" UUID="29e5afbd-d25d-4050-816c-e2c8bc7984a2" TYPE="ext4" PARTUUID="00000001-0d"
/dev/sda14: LABEL="xubuntu-16-sys-m" UUID="75df6dda-088e-42e0-bb24-0558de998d09" TYPE="ext4" PARTUUID="00000001-0e"
/dev/sdb1: LABEL="hyb-systemback" UUID="1aced9e1-d845-46bb-a6e2-448666be4a21" TYPE="ext4" PARTUUID="00006711-01"
/dev/sdb2: UUID="5147bb57-b517-4a46-9344-c690575331e1" TYPE="swap" PARTUUID="00006711-02"
/dev/sdb3: LABEL="SB@boot" UUID="13e83c99-8624-4136-a61d-10e67e670ba3" TYPE="ext4" PARTUUID="00006711-03"
/dev/sdb4: LABEL="SB@" UUID="2ffbf271-02fa-4d6f-a8e6-dee7a63894e5" TYPE="ext4" PARTUUID="00006711-04"
rm: impossible de supprimer 'tmp_u_l.txt': Aucun fichier ou dossier de ce type
0 /dev/sda1 B664A19764A16ABF LABEL XP-MASSY TYPE : ntfs
1 /dev/sda5 3336D5F95125508C LABEL DONNEES_WD TYPE : ntfs
2 /dev/sda6 0b82c97d-d077-4191-ae87-de7f2787ba44 LABEL _ TYPE : swap
3 /dev/sda7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c LABEL xubuntu-14-sys-m TYPE : ext4
4 /dev/sda8 08201295-445e-4de7-a95b-a56990a0a9dd LABEL xubuntu-14-hom-m TYPE : ext4
5 /dev/sda9 878a2332-9b22-4ca6-b125-d09c3821cf80 LABEL fusion-12-hom-m TYPE : ext4
6 /dev/sda10 ea999dc0-aaad-46bb-84ab-6e510bd28348 LABEL ubu-mate-16.04-m TYPE : ext4
7 /dev/sda11 aec00812-bb57-4bbe-a5ed-90228e770e48 LABEL fusion-12-sys-m TYPE : ext4
8 /dev/sda12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3 LABEL voyager16.04.1.1 TYPE : ext4
9 /dev/sda13 29e5afbd-d25d-4050-816c-e2c8bc7984a2 LABEL fusion-14-massy TYPE : ext4
10 /dev/sda14 75df6dda-088e-42e0-bb24-0558de998d09 LABEL xubuntu-16-sys-m TYPE : ext4
11 /dev/sdb1 1aced9e1-d845-46bb-a6e2-448666be4a21 LABEL hyb-systemback sur /media/bernard/hyb-systemback TYPE : ext4
12 /dev/sdb2 5147bb57-b517-4a46-9344-c690575331e1 LABEL _ TYPE : swap
13 /dev/sdb3 13e83c99-8624-4136-a61d-10e67e670ba3 LABEL SB@boot sur /boot TYPE : ext4
14 /dev/sdb4 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 LABEL SB@ sur / TYPE : ext4
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
OK je continue
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 /dev/sda1 1
1 /dev/sda5 1
2 /dev/sda6 1
3 /dev/sda7 1
4 /dev/sda8 1
5 /dev/sda9 1
6 /dev/sda10 1
7 /dev/sda11 1
8 /dev/sda12 1
9 /dev/sda13 1
10 /dev/sda14 1
11 /dev/sdb1 0
/media/bernard/hyb-systemback/etc/fstab
12 /dev/sdb2 1
13 /dev/sdb3 0
/boot/etc/fstab
14 /dev/sdb4 0
/etc/fstab
fonction ecrit_uuid1_uuid2 UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 UUID=13e83c99-8624-4136-a61d-10e67e670ba3
fin de fonction ecrit_uuid1 uuid2 =1=>2ffbf271-02fa-4d6f-a8e6-dee7a63894e5<=== =2=>13e83c99-8624-4136-a61d-10e67e670ba3<===
réperoire /mnt présent
création du répertoire /mnt/jpb-2017:03:16-00:40:22 pour monter les partitions
0 /dev/sda1
1 /dev/sda5
2 /dev/sda6
3 /dev/sda7
traitement de 3 /dev/sda7 (ext4)
montage de /dev/sda7 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda7 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda7 code de retour de umount 0
boucle 0 : /dev/sda7 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
4 /dev/sda8
traitement de 4 /dev/sda8 (ext4)
montage de /dev/sda8 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda8 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda8 code de retour de umount 0
boucle 0 : /dev/sda8 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
5 /dev/sda9
traitement de 5 /dev/sda9 (ext4)
montage de /dev/sda9 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda9 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda9 code de retour de umount 0
boucle 0 : /dev/sda9 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
6 /dev/sda10
traitement de 6 /dev/sda10 (ext4)
montage de /dev/sda10 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda10 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda10 code de retour de umount 0
boucle 0 : /dev/sda10 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
7 /dev/sda11
traitement de 7 /dev/sda11 (ext4)
montage de /dev/sda11 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda11 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda11 code de retour de umount 0
boucle 0 : /dev/sda11 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
8 /dev/sda12
traitement de 8 /dev/sda12 (ext4)
montage de /dev/sda12 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda12 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda12 code de retour de umount 0
boucle 0 : /dev/sda12 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
9 /dev/sda13
traitement de 9 /dev/sda13 (ext4)
montage de /dev/sda13 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda13 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda13 code de retour de umount 0
boucle 0 : /dev/sda13 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
10 /dev/sda14
traitement de 10 /dev/sda14 (ext4)
montage de /dev/sda14 sur /mnt/jpb-2017:03:16-00:40:22
code de retour montage de /dev/sda14 sur /mnt/jpb-2017:03:16-00:40:22 : 0
boucle 0 : /dev/sda14 code de retour de umount 0
boucle 0 : /dev/sda14 démontage effectué (code retour 0)
total 8
268622 4 drwxr-xr-x 2 root root 4096 mars 16 00:41 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 00:41 ..
11 /dev/sdb1
12 /dev/sdb2
13 /dev/sdb3
14 /dev/sdb4
fin de récupération des données de /etc/fstab des partitions présentes sur la machine
suppression du répertoire /mnt/jpb-2017:03:16-00:40:22 en cours
supression réussie
fin normale du programme ././recup_fstab_V2
suite du programme modif_grub_V35.sh
vérification des uuid correspondants à des systèmes sur boot séparés
remarque : il existe deux lignes par couple
une ligne uuid1-uuid2 et une ligne uuid2-uuid1
#############################################
# 2017:03:16-00:40:22 : couples uuid-boot - uuid-systeme des menuentry en boot séparé
2ffbf271-02fa-4d6f-a8e6-dee7a63894e5-13e83c99-8624-4136-a61d-10e67e670ba3
13e83c99-8624-4136-a61d-10e67e670ba3-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
#############################################
vérifier visuellement le contenu des lignes comprises entre les ###
tapez sur entrée pour continuer
ligne commentée # 2017:03:16-00:40:22 : couples uuid-boot - uuid-systeme des menuentry en boot séparé je passe
2ffbf271-02fa-4d6f-a8e6-dee7a63894e5-13e83c99-8624-4136-a61d-10e67e670ba3
13e83c99-8624-4136-a61d-10e67e670ba3-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
réutilisation du fichier blkid-res.txt créé précédemment
/dev/sda1: LABEL="XP-MASSY" UUID="B664A19764A16ABF" TYPE="ntfs" PARTUUID="00000001-01"
/dev/sda5: LABEL="DONNEES_WD" UUID="3336D5F95125508C" TYPE="ntfs" PARTUUID="00000001-05"
/dev/sda6: UUID="0b82c97d-d077-4191-ae87-de7f2787ba44" TYPE="swap" PARTUUID="00000001-06"
/dev/sda7: LABEL="xubuntu-14-sys-m" UUID="5ed81f97-295e-4246-8aa1-7ae54d6c9e7c" TYPE="ext4" PARTUUID="00000001-07"
/dev/sda8: LABEL="xubuntu-14-hom-m" UUID="08201295-445e-4de7-a95b-a56990a0a9dd" TYPE="ext4" PARTUUID="00000001-08"
/dev/sda9: LABEL="fusion-12-hom-m" UUID="878a2332-9b22-4ca6-b125-d09c3821cf80" TYPE="ext4" PARTUUID="00000001-09"
/dev/sda10: LABEL="ubu-mate-16.04-m" UUID="ea999dc0-aaad-46bb-84ab-6e510bd28348" TYPE="ext4" PARTUUID="00000001-0a"
/dev/sda11: LABEL="fusion-12-sys-m" UUID="aec00812-bb57-4bbe-a5ed-90228e770e48" TYPE="ext4" PARTUUID="00000001-0b"
/dev/sda12: LABEL="voyager16.04.1.1" UUID="2f5e2fc1-c492-408e-956b-1d56a72eb7d3" TYPE="ext4" PARTUUID="00000001-0c"
/dev/sda13: LABEL="fusion-14-massy" UUID="29e5afbd-d25d-4050-816c-e2c8bc7984a2" TYPE="ext4" PARTUUID="00000001-0d"
/dev/sda14: LABEL="xubuntu-16-sys-m" UUID="75df6dda-088e-42e0-bb24-0558de998d09" TYPE="ext4" PARTUUID="00000001-0e"
/dev/sdb1: LABEL="hyb-systemback" UUID="1aced9e1-d845-46bb-a6e2-448666be4a21" TYPE="ext4" PARTUUID="00006711-01"
/dev/sdb2: UUID="5147bb57-b517-4a46-9344-c690575331e1" TYPE="swap" PARTUUID="00006711-02"
/dev/sdb3: LABEL="SB@boot" UUID="13e83c99-8624-4136-a61d-10e67e670ba3" TYPE="ext4" PARTUUID="00006711-03"
/dev/sdb4: LABEL="SB@" UUID="2ffbf271-02fa-4d6f-a8e6-dee7a63894e5" TYPE="ext4" PARTUUID="00006711-04"
0 /dev/sda1 UUID B664A19764A16ABF LABEL: XP-MASSY TYPE : ntfs
1 /dev/sda5 UUID 3336D5F95125508C LABEL: DONNEES_WD TYPE : ntfs
2 /dev/sda6 UUID 0b82c97d-d077-4191-ae87-de7f2787ba44 LABEL: ___ TYPE : swap
3 /dev/sda7 UUID 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c LABEL: xubuntu-14-sys-m TYPE : ext4
4 /dev/sda8 UUID 08201295-445e-4de7-a95b-a56990a0a9dd LABEL: xubuntu-14-hom-m TYPE : ext4
5 /dev/sda9 UUID 878a2332-9b22-4ca6-b125-d09c3821cf80 LABEL: fusion-12-hom-m TYPE : ext4
6 /dev/sda10 UUID ea999dc0-aaad-46bb-84ab-6e510bd28348 LABEL: ubu-mate-16.04-m TYPE : ext4
7 /dev/sda11 UUID aec00812-bb57-4bbe-a5ed-90228e770e48 LABEL: fusion-12-sys-m TYPE : ext4
8 /dev/sda12 UUID 2f5e2fc1-c492-408e-956b-1d56a72eb7d3 LABEL: voyager16.04.1.1 TYPE : ext4
9 /dev/sda13 UUID 29e5afbd-d25d-4050-816c-e2c8bc7984a2 LABEL: fusion-14-massy TYPE : ext4
10 /dev/sda14 UUID 75df6dda-088e-42e0-bb24-0558de998d09 LABEL: xubuntu-16-sys-m TYPE : ext4
11 /dev/sdb1 UUID 1aced9e1-d845-46bb-a6e2-448666be4a21 LABEL: hyb-systemback TYPE : ext4
12 /dev/sdb2 UUID 5147bb57-b517-4a46-9344-c690575331e1 LABEL: ___ TYPE : swap
13 /dev/sdb3 UUID 13e83c99-8624-4136-a61d-10e67e670ba3 LABEL: SB@boot TYPE : ext4
14 /dev/sdb4 UUID 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 LABEL: SB@ TYPE : ext4
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
0
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
modif_grub_V35.sh: ligne 36: le : commande introuvable
modif_grub_V35.sh: ligne 37: $fich_source : redirection ambiguë
/boot/grub/tests-modif_grub_V35 et recup_fstab_V2/grub(avec-boot-separe) (copie).cfg
rm: impossible de supprimer 'tmp0_2017:03:16-00:40:22.txt': Aucun fichier ou dossier de ce type
rm: impossible de supprimer 'tmp1_2017:03:16-00:40:22.txt': Aucun fichier ou dossier de ce type
rm: impossible de supprimer 'tmp2_2017:03:16-00:40:22.txt': Aucun fichier ou dossier de ce type
modif_grub_V35.sh: ligne 54: $fich_source : redirection ambiguë
la présence de la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
le traitement ne commence qu'à partir de cette ligne
ajouter cette ligne au fichier
bernard@bernard-System-Product-Name:~$
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#156 Le 16/03/2017, à 15:56
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
fin normale du programme ././recup_fstab_V2
déjà ce programme s'est bien déroulé ......
modif_grub_V35.sh: ligne 36: le : commande introuvable
le numéro de ligne est bizarre normalement ce devrait être 40
en plus c'est une ligne de commentaire que j'ai du ajouter après mon test
il faut ajouter un # devant cette ligne !!!!!!!!!!!
j'édite la ligne dans le post
remplacement de
le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
par
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
pour le message
modif_grub_V35.sh: ligne 37: $fich_source : redirection ambiguë
il faut effectuer le remplacement suivant dans la ligne qui suit (ligne 41)
read ligne < $fich_source
par
read ligne < "$fich_source"
cela n'a pas généré d'erreur mais
en ligne 50
il faut remplacer return 1 par exit 1
pour le message
la présence de la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
IL FAUT que tu ajoutes cette ligne dans ton fichier et AVANT les lignes que tu veux traiter
si cette ligne n'est pas présente le programme ne modifiera rien !!!!
le programme est prévu comme ça !!!
donc
soit tu fais les modifs dans le fichier modif-grub que tu as récupéré soit tu recharges le fichier au post 150
(j'ai fais quelques autres modifs mineures)
un petit truc qui t'évitera de d'avoir à relancer recup-ftsab
(le fichier UBoot_UPart.txt doit exister dans le répertoire de lancement)
vers les lignes 780
au lieu de
./$prg
code=$?
mets
code=0
# ./$prg
code=$?
dans le fichier du post 150 il suffit de diésé la ligne ./$prg
ne pas oublié après les essais de remettre la ligne ./$prg sans dièse
Dernière modification par ar barzh paour (Le 16/03/2017, à 19:04)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#157 Le 16/03/2017, à 22:48
- Babdu89
Re : [Projet terminé] correction anomalie de grub
J'ai recopier le contenu du script modif_grub_V35 que tu as corrigé.
en ligne 50
il faut remplacer return 1 par exit 1
Dans ta correction, on a exit1 manque un espace, non? j 'ai corrigé. (exit 1)
Le contenu du fichier grub.cfg à traiter.
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_msdos
insmod ext2
set root='hd1,msdos4'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos4 --hint-efi=hd1,msdos4 --hint-baremetal=ahci1,msdos4 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
else
search --no-floppy --fs-uuid --set=root 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
fi
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=fr_FR
insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
set timeout=30
else
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=10
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=10
fi
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 60,59,55; then
clear
fi
color_normal=light-gray/black
if [ -e ${prefix}/themes/ubuntu-mate/theme.txt ]; then
insmod png
theme=${prefix}/themes/ubuntu-mate/theme.txt
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
set gfxpayload="${1}"
if [ "${1}" = "keep" ]; then
set vt_handoff=vt.handoff=7
else
set vt_handoff=
fi
}
if [ "${recordfail}" != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
linux /vmlinuz-4.4.0-66-generic root=UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 ro quiet splash $vt_handoff
initrd /initrd.img-4.4.0-66-generic
}
submenu 'Options avancées pour Ubuntu' $menuentry_id_option 'gnulinux-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
menuentry 'Ubuntu, avec Linux 4.4.0-66-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
echo 'Chargement de Linux 4.4.0-66-generic…'
linux /vmlinuz-4.4.0-66-generic root=UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 ro quiet splash $vt_handoff
echo 'Chargement du disque mémoire initial…'
initrd /initrd.img-4.4.0-66-generic
}
menuentry 'Ubuntu, with Linux 4.4.0-66-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-recovery-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
echo 'Chargement de Linux 4.4.0-66-generic…'
linux /vmlinuz-4.4.0-66-generic root=UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 ro recovery nomodeset
echo 'Chargement du disque mémoire initial…'
initrd /initrd.img-4.4.0-66-generic
}
menuentry 'Ubuntu, avec Linux 4.4.0-64-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
echo 'Chargement de Linux 4.4.0-64-generic…'
linux /vmlinuz-4.4.0-64-generic root=UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 ro quiet splash $vt_handoff
echo 'Chargement du disque mémoire initial…'
initrd /initrd.img-4.4.0-64-generic
}
menuentry 'Ubuntu, with Linux 4.4.0-64-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-recovery-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5' {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
echo 'Chargement de Linux 4.4.0-64-generic…'
linux /vmlinuz-4.4.0-64-generic root=UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 ro recovery nomodeset
echo 'Chargement du disque mémoire initial…'
initrd /initrd.img-4.4.0-64-generic
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry 'Memory test (memtest86+)' {
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
knetbsd /memtest86+.elf
}
menuentry 'Memory test (memtest86+, serial console 115200)' {
insmod part_msdos
insmod ext2
set root='hd1,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos3 --hint-efi=hd1,msdos3 --hint-baremetal=ahci1,msdos3 13e83c99-8624-4136-a61d-10e67e670ba3
else
search --no-floppy --fs-uuid --set=root 13e83c99-8624-4136-a61d-10e67e670ba3
fi
linux16 /memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Start XP Massy GRUB4DOS Essayer-Installer des iso Linux lancees en live (sur /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-B664A19764A16ABF' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 B664A19764A16ABF
else
search --no-floppy --fs-uuid --set=root B664A19764A16ABF
fi
parttool ${root} hidden-
drivemap -s (hd0) ${root}
chainloader +1
}
menuentry 'Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-66-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-66-generic
}
submenu 'Options avancées pour Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda10)' $menuentry_id_option 'osprober-gnulinux-advanced-ea999dc0-aaad-46bb-84ab-6e510bd28348' {
menuentry 'PT-UBUNTU-MATE XENIAL GNU/Linux (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-66-generic--ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-66-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-66-generic
}
menuentry 'PT-UBUNTU-MATE XENIAL GNU/Linux, avec Linux 4.4.0-66-generic (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-66-generic--ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-66-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-66-generic
}
menuentry 'PT-UBUNTU-MATE XENIAL GNU/Linux, with Linux 4.4.0-66-generic (recovery mode) (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-66-generic-root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro recovery nomodeset-ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-66-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-66-generic
}
menuentry 'PT-UBUNTU-MATE XENIAL GNU/Linux, avec Linux 4.4.0-64-generic (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-UBUNTU-MATE XENIAL GNU/Linux, with Linux 4.4.0-64-generic (recovery mode) (sur /dev/sda10)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic-root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro recovery nomodeset-ea999dc0-aaad-46bb-84ab-6e510bd28348' {
insmod part_msdos
insmod ext2
set root='hd0,msdos10'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos10 --hint-efi=hd0,msdos10 --hint-baremetal=ahci0,msdos10 ea999dc0-aaad-46bb-84ab-6e510bd28348
else
search --no-floppy --fs-uuid --set=root ea999dc0-aaad-46bb-84ab-6e510bd28348
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=ea999dc0-aaad-46bb-84ab-6e510bd28348 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-64-generic
}
}
menuentry 'Ubuntu 12.04.5 LTS (12.04) (sur /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-aec00812-bb57-4bbe-a5ed-90228e770e48' {
insmod part_msdos
insmod ext2
set root='hd0,msdos11'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos11 --hint-efi=hd0,msdos11 --hint-baremetal=ahci0,msdos11 aec00812-bb57-4bbe-a5ed-90228e770e48
else
search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
fi
linux /boot/vmlinuz-3.13.0-77-generic root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-77-generic
}
submenu 'Options avancées pour Ubuntu 12.04.5 LTS (12.04) (sur /dev/sda11)' $menuentry_id_option 'osprober-gnulinux-advanced-aec00812-bb57-4bbe-a5ed-90228e770e48' {
menuentry 'HYBRYDE FUSION 12.04_PART11, avec Linux 3.13.0-77-generic (sur /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-77-generic--aec00812-bb57-4bbe-a5ed-90228e770e48' {
insmod part_msdos
insmod ext2
set root='hd0,msdos11'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos11 --hint-efi=hd0,msdos11 --hint-baremetal=ahci0,msdos11 aec00812-bb57-4bbe-a5ed-90228e770e48
else
search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
fi
linux /boot/vmlinuz-3.13.0-77-generic root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-77-generic
}
menuentry 'HYBRYDE FUSION 12.04_PART11, with Linux 3.13.0-77-generic (recovery mode) (sur /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-77-generic-root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro recovery nomodeset-aec00812-bb57-4bbe-a5ed-90228e770e48' {
insmod part_msdos
insmod ext2
set root='hd0,msdos11'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos11 --hint-efi=hd0,msdos11 --hint-baremetal=ahci0,msdos11 aec00812-bb57-4bbe-a5ed-90228e770e48
else
search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
fi
linux /boot/vmlinuz-3.13.0-77-generic root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-77-generic
}
menuentry 'HYBRYDE FUSION 12.04_PART11, avec Linux 3.13.0-76-generic (sur /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-76-generic--aec00812-bb57-4bbe-a5ed-90228e770e48' {
insmod part_msdos
insmod ext2
set root='hd0,msdos11'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos11 --hint-efi=hd0,msdos11 --hint-baremetal=ahci0,msdos11 aec00812-bb57-4bbe-a5ed-90228e770e48
else
search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
fi
linux /boot/vmlinuz-3.13.0-76-generic root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-76-generic
}
menuentry 'HYBRYDE FUSION 12.04_PART11, with Linux 3.13.0-76-generic (recovery mode) (sur /dev/sda11)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-76-generic-root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro recovery nomodeset-aec00812-bb57-4bbe-a5ed-90228e770e48' {
insmod part_msdos
insmod ext2
set root='hd0,msdos11'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos11 --hint-efi=hd0,msdos11 --hint-baremetal=ahci0,msdos11 aec00812-bb57-4bbe-a5ed-90228e770e48
else
search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
fi
linux /boot/vmlinuz-3.13.0-76-generic root=UUID=aec00812-bb57-4bbe-a5ed-90228e770e48 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-76-generic
}
}
menuentry 'Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
submenu 'Options avancées pour Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda12)' $menuentry_id_option 'osprober-gnulinux-advanced-2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, avec Linux 4.4.0-64-generic (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, with Linux 4.4.0-64-generic (upstart) (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff init=/sbin/upstart
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, with Linux 4.4.0-64-generic (recovery mode) (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic-root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro recovery nomodeset-2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, avec Linux 4.4.0-63-generic (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic--2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-63-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, with Linux 4.4.0-63-generic (upstart) (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic--2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro quiet splash $vt_handoff init=/sbin/upstart
initrd /boot/initrd.img-4.4.0-63-generic
}
menuentry 'PT-VOYAGER-16.04.1.1_Massy GNU/Linux, with Linux 4.4.0-63-generic (recovery mode) (sur /dev/sda12)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic-root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro recovery nomodeset-2f5e2fc1-c492-408e-956b-1d56a72eb7d3' {
insmod part_msdos
insmod ext2
set root='hd0,msdos12'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos12 --hint-efi=hd0,msdos12 --hint-baremetal=ahci0,msdos12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
else
search --no-floppy --fs-uuid --set=root 2f5e2fc1-c492-408e-956b-1d56a72eb7d3
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=2f5e2fc1-c492-408e-956b-1d56a72eb7d3 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-63-generic
}
}
menuentry 'Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
submenu 'Options avancées pour Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda13)' $menuentry_id_option 'osprober-gnulinux-advanced-29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-110-generic (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-110-generic (recovery mode) (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic-root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset-29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-109-generic (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic--29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-109-generic (recovery mode) (sur /dev/sda13)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic-root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset-29e5afbd-d25d-4050-816c-e2c8bc7984a2' {
insmod part_msdos
insmod ext2
set root='hd0,msdos13'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos13 --hint-efi=hd0,msdos13 --hint-baremetal=ahci0,msdos13 29e5afbd-d25d-4050-816c-e2c8bc7984a2
else
search --no-floppy --fs-uuid --set=root 29e5afbd-d25d-4050-816c-e2c8bc7984a2
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-109-generic
}
}
menuentry 'Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
submenu 'Options avancées pour Ubuntu 16.04.2 LTS (16.04) (sur /dev/sda14)' $menuentry_id_option 'osprober-gnulinux-advanced-75df6dda-088e-42e0-bb24-0558de998d09' {
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, avec Linux 4.4.0-64-generic (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, with Linux 4.4.0-64-generic (upstart) (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic--75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff init=/sbin/upstart
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, with Linux 4.4.0-64-generic (recovery mode) (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-64-generic-root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro recovery nomodeset-75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-64-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-64-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, avec Linux 4.4.0-63-generic (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic--75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-63-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, with Linux 4.4.0-63-generic (upstart) (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic--75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro quiet splash $vt_handoff init=/sbin/upstart
initrd /boot/initrd.img-4.4.0-63-generic
}
menuentry 'PT-Xubuntu-16.04.1 GNU/Linux, with Linux 4.4.0-63-generic (recovery mode) (sur /dev/sda14)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.4.0-63-generic-root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro recovery nomodeset-75df6dda-088e-42e0-bb24-0558de998d09' {
insmod part_msdos
insmod ext2
set root='hd0,msdos14'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos14 --hint-efi=hd0,msdos14 --hint-baremetal=ahci0,msdos14 75df6dda-088e-42e0-bb24-0558de998d09
else
search --no-floppy --fs-uuid --set=root 75df6dda-088e-42e0-bb24-0558de998d09
fi
linux /boot/vmlinuz-4.4.0-63-generic root=UUID=75df6dda-088e-42e0-bb24-0558de998d09 ro recovery nomodeset
initrd /boot/initrd.img-4.4.0-63-generic
}
}
menuentry 'Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
submenu 'Options avancées pour Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda7)' $menuentry_id_option 'osprober-gnulinux-advanced-5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
menuentry 'PT-Xubuntu-14.04 GNU/Linux (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-110-generic (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-110-generic (recovery mode) (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic-root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset-5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-109-generic (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic--5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-109-generic (recovery mode) (sur /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic-root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset-5ed81f97-295e-4246-8aa1-7ae54d6c9e7c' {
insmod part_msdos
insmod ext2
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
else
search --no-floppy --fs-uuid --set=root 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-109-generic
}
}
menuentry 'Ubuntu 14.04.5 LTS (14.04) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
submenu 'Options avancées pour Ubuntu 14.04.5 LTS (14.04) (sur /dev/sdb1)' $menuentry_id_option 'osprober-gnulinux-advanced-1aced9e1-d845-46bb-a6e2-448666be4a21' {
menuentry 'PT-HYBRYDE FUSION 14.04_USB-Verbatim GNU/Linux (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_USB-Verbatim GNU/Linux, avec Linux 3.13.0-110-generic (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_USB-Verbatim GNU/Linux, with Linux 3.13.0-110-generic (recovery mode) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic-root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_USB-Verbatim GNU/Linux, avec Linux 3.13.0-109-generic (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_USB-Verbatim GNU/Linux, with Linux 3.13.0-109-generic (recovery mode) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic-root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=1aced9e1-d845-46bb-a6e2-448666be4a21 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-110-generic (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-110-generic (recovery mode) (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic-root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-109-generic (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-109-generic (recovery mode) (sur /dev/sda13) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic-root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=29e5afbd-d25d-4050-816c-e2c8bc7984a2 ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'Ubuntu 14.04.5 LTS (14.04) (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-110-generic (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-110-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-110-generic-root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-110-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-110-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-109-generic (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic--1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-109-generic
}
menuentry 'PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-109-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-109-generic-root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset-1aced9e1-d845-46bb-a6e2-448666be4a21' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 1aced9e1-d845-46bb-a6e2-448666be4a21
else
search --no-floppy --fs-uuid --set=root 1aced9e1-d845-46bb-a6e2-448666be4a21
fi
linux /boot/vmlinuz-3.13.0-109-generic root=UUID=5ed81f97-295e-4246-8aa1-7ae54d6c9e7c ro recovery nomodeset
initrd /boot/initrd.img-3.13.0-109-generic
}
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# 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.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
Dans ce fichier j'ai bien la ligne;
### BEGIN /etc/grub.d/10_linux ###
Çà coince encore à cet endroit là, retour terminal de lancement du script modif_grub_V35 .
bernard@bernard-System-Product-Name:~$ sudo bash modif_grub_V35.sh
[sudo] Mot de passe de bernard :
lancement du programme ./recup_fstab_V2
rm: impossible de supprimer 'DevSd_UBoot_UPart.txt': Aucun fichier ou dossier de ce type
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
/dev/sda1: LABEL="XP-MASSY" UUID="B664A19764A16ABF" TYPE="ntfs" PARTUUID="00000001-01"
/dev/sda5: LABEL="DONNEES_WD" UUID="3336D5F95125508C" TYPE="ntfs" PARTUUID="00000001-05"
/dev/sda6: UUID="0b82c97d-d077-4191-ae87-de7f2787ba44" TYPE="swap" PARTUUID="00000001-06"
/dev/sda7: LABEL="xubuntu-14-sys-m" UUID="5ed81f97-295e-4246-8aa1-7ae54d6c9e7c" TYPE="ext4" PARTUUID="00000001-07"
/dev/sda8: LABEL="xubuntu-14-hom-m" UUID="08201295-445e-4de7-a95b-a56990a0a9dd" TYPE="ext4" PARTUUID="00000001-08"
/dev/sda9: LABEL="fusion-12-hom-m" UUID="878a2332-9b22-4ca6-b125-d09c3821cf80" TYPE="ext4" PARTUUID="00000001-09"
/dev/sda10: LABEL="ubu-mate-16.04-m" UUID="ea999dc0-aaad-46bb-84ab-6e510bd28348" TYPE="ext4" PARTUUID="00000001-0a"
/dev/sda11: LABEL="fusion-12-sys-m" UUID="aec00812-bb57-4bbe-a5ed-90228e770e48" TYPE="ext4" PARTUUID="00000001-0b"
/dev/sda12: LABEL="voyager16.04.1.1" UUID="2f5e2fc1-c492-408e-956b-1d56a72eb7d3" TYPE="ext4" PARTUUID="00000001-0c"
/dev/sda13: LABEL="fusion-14-massy" UUID="29e5afbd-d25d-4050-816c-e2c8bc7984a2" TYPE="ext4" PARTUUID="00000001-0d"
/dev/sda14: LABEL="xubuntu-16-sys-m" UUID="75df6dda-088e-42e0-bb24-0558de998d09" TYPE="ext4" PARTUUID="00000001-0e"
/dev/sdb1: LABEL="hyb-systemback" UUID="1aced9e1-d845-46bb-a6e2-448666be4a21" TYPE="ext4" PARTUUID="00006711-01"
/dev/sdb2: UUID="5147bb57-b517-4a46-9344-c690575331e1" TYPE="swap" PARTUUID="00006711-02"
/dev/sdb3: LABEL="SB@boot" UUID="13e83c99-8624-4136-a61d-10e67e670ba3" TYPE="ext4" PARTUUID="00006711-03"
/dev/sdb4: LABEL="SB@" UUID="2ffbf271-02fa-4d6f-a8e6-dee7a63894e5" TYPE="ext4" PARTUUID="00006711-04"
rm: impossible de supprimer 'tmp_u_l.txt': Aucun fichier ou dossier de ce type
0 /dev/sda1 B664A19764A16ABF LABEL XP-MASSY TYPE : ntfs
1 /dev/sda5 3336D5F95125508C LABEL DONNEES_WD TYPE : ntfs
2 /dev/sda6 0b82c97d-d077-4191-ae87-de7f2787ba44 LABEL _ TYPE : swap
3 /dev/sda7 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c LABEL xubuntu-14-sys-m TYPE : ext4
4 /dev/sda8 08201295-445e-4de7-a95b-a56990a0a9dd LABEL xubuntu-14-hom-m TYPE : ext4
5 /dev/sda9 878a2332-9b22-4ca6-b125-d09c3821cf80 LABEL fusion-12-hom-m TYPE : ext4
6 /dev/sda10 ea999dc0-aaad-46bb-84ab-6e510bd28348 LABEL ubu-mate-16.04-m TYPE : ext4
7 /dev/sda11 aec00812-bb57-4bbe-a5ed-90228e770e48 LABEL fusion-12-sys-m TYPE : ext4
8 /dev/sda12 2f5e2fc1-c492-408e-956b-1d56a72eb7d3 LABEL voyager16.04.1.1 TYPE : ext4
9 /dev/sda13 29e5afbd-d25d-4050-816c-e2c8bc7984a2 LABEL fusion-14-massy TYPE : ext4
10 /dev/sda14 75df6dda-088e-42e0-bb24-0558de998d09 LABEL xubuntu-16-sys-m TYPE : ext4
11 /dev/sdb1 1aced9e1-d845-46bb-a6e2-448666be4a21 LABEL hyb-systemback sur /media/bernard/hyb-systemback TYPE : ext4
12 /dev/sdb2 5147bb57-b517-4a46-9344-c690575331e1 LABEL _ TYPE : swap
13 /dev/sdb3 13e83c99-8624-4136-a61d-10e67e670ba3 LABEL SB@boot sur /boot TYPE : ext4
14 /dev/sdb4 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 LABEL SB@ sur / TYPE : ext4
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
OK je continue
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 /dev/sda1 1
1 /dev/sda5 1
2 /dev/sda6 1
3 /dev/sda7 1
4 /dev/sda8 1
5 /dev/sda9 1
6 /dev/sda10 1
7 /dev/sda11 1
8 /dev/sda12 1
9 /dev/sda13 1
10 /dev/sda14 1
11 /dev/sdb1 0
/media/bernard/hyb-systemback/etc/fstab
12 /dev/sdb2 1
13 /dev/sdb3 0
/boot/etc/fstab
14 /dev/sdb4 0
/etc/fstab
fonction ecrit_uuid1_uuid2 UUID=2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 UUID=13e83c99-8624-4136-a61d-10e67e670ba3
fin de fonction ecrit_uuid1 uuid2 =1=>2ffbf271-02fa-4d6f-a8e6-dee7a63894e5<=== =2=>13e83c99-8624-4136-a61d-10e67e670ba3<===
réperoire /mnt présent
création du répertoire /mnt/jpb-2017:03:16-22:18:00 pour monter les partitions
0 /dev/sda1
1 /dev/sda5
2 /dev/sda6
3 /dev/sda7
traitement de 3 /dev/sda7 (ext4)
montage de /dev/sda7 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda7 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda7 code de retour de umount 0
boucle 0 : /dev/sda7 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
4 /dev/sda8
traitement de 4 /dev/sda8 (ext4)
montage de /dev/sda8 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda8 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda8 code de retour de umount 0
boucle 0 : /dev/sda8 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
5 /dev/sda9
traitement de 5 /dev/sda9 (ext4)
montage de /dev/sda9 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda9 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda9 code de retour de umount 0
boucle 0 : /dev/sda9 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
6 /dev/sda10
traitement de 6 /dev/sda10 (ext4)
montage de /dev/sda10 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda10 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda10 code de retour de umount 0
boucle 0 : /dev/sda10 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
7 /dev/sda11
traitement de 7 /dev/sda11 (ext4)
montage de /dev/sda11 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda11 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda11 code de retour de umount 0
boucle 0 : /dev/sda11 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
8 /dev/sda12
traitement de 8 /dev/sda12 (ext4)
montage de /dev/sda12 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda12 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda12 code de retour de umount 0
boucle 0 : /dev/sda12 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
9 /dev/sda13
traitement de 9 /dev/sda13 (ext4)
montage de /dev/sda13 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda13 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda13 code de retour de umount 0
boucle 0 : /dev/sda13 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
10 /dev/sda14
traitement de 10 /dev/sda14 (ext4)
montage de /dev/sda14 sur /mnt/jpb-2017:03:16-22:18:00
code de retour montage de /dev/sda14 sur /mnt/jpb-2017:03:16-22:18:00 : 0
boucle 0 : /dev/sda14 code de retour de umount 0
boucle 0 : /dev/sda14 démontage effectué (code retour 0)
total 8
309860 4 drwxr-xr-x 2 root root 4096 mars 16 22:18 .
260610 4 drwxr-xr-x 3 root root 4096 mars 16 22:18 ..
11 /dev/sdb1
12 /dev/sdb2
13 /dev/sdb3
14 /dev/sdb4
fin de récupération des données de /etc/fstab des partitions présentes sur la machine
suppression du répertoire /mnt/jpb-2017:03:16-22:18:00 en cours
supression réussie
fin normale du programme ././recup_fstab_V2
suite du programme modif_grub_V35.sh
vérification des uuid correspondants à des systèmes sur boot séparés
remarque : il existe deux lignes par couple
une ligne uuid1-uuid2 et une ligne uuid2-uuid1
#############################################
# 2017:03:16-22:18:00 : couples uuid-boot - uuid-systeme des menuentry en boot séparé
2ffbf271-02fa-4d6f-a8e6-dee7a63894e5-13e83c99-8624-4136-a61d-10e67e670ba3
13e83c99-8624-4136-a61d-10e67e670ba3-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
#############################################
vérifier visuellement le contenu des lignes comprises entre les ###
tapez sur entrée pour continuer
ligne commentée # 2017:03:16-22:18:00 : couples uuid-boot - uuid-systeme des menuentry en boot séparé je passe
2ffbf271-02fa-4d6f-a8e6-dee7a63894e5-13e83c99-8624-4136-a61d-10e67e670ba3
13e83c99-8624-4136-a61d-10e67e670ba3-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
réutilisation du fichier blkid-res.txt créé précédemment
/dev/sda1: LABEL="XP-MASSY" UUID="B664A19764A16ABF" TYPE="ntfs" PARTUUID="00000001-01"
/dev/sda5: LABEL="DONNEES_WD" UUID="3336D5F95125508C" TYPE="ntfs" PARTUUID="00000001-05"
/dev/sda6: UUID="0b82c97d-d077-4191-ae87-de7f2787ba44" TYPE="swap" PARTUUID="00000001-06"
/dev/sda7: LABEL="xubuntu-14-sys-m" UUID="5ed81f97-295e-4246-8aa1-7ae54d6c9e7c" TYPE="ext4" PARTUUID="00000001-07"
/dev/sda8: LABEL="xubuntu-14-hom-m" UUID="08201295-445e-4de7-a95b-a56990a0a9dd" TYPE="ext4" PARTUUID="00000001-08"
/dev/sda9: LABEL="fusion-12-hom-m" UUID="878a2332-9b22-4ca6-b125-d09c3821cf80" TYPE="ext4" PARTUUID="00000001-09"
/dev/sda10: LABEL="ubu-mate-16.04-m" UUID="ea999dc0-aaad-46bb-84ab-6e510bd28348" TYPE="ext4" PARTUUID="00000001-0a"
/dev/sda11: LABEL="fusion-12-sys-m" UUID="aec00812-bb57-4bbe-a5ed-90228e770e48" TYPE="ext4" PARTUUID="00000001-0b"
/dev/sda12: LABEL="voyager16.04.1.1" UUID="2f5e2fc1-c492-408e-956b-1d56a72eb7d3" TYPE="ext4" PARTUUID="00000001-0c"
/dev/sda13: LABEL="fusion-14-massy" UUID="29e5afbd-d25d-4050-816c-e2c8bc7984a2" TYPE="ext4" PARTUUID="00000001-0d"
/dev/sda14: LABEL="xubuntu-16-sys-m" UUID="75df6dda-088e-42e0-bb24-0558de998d09" TYPE="ext4" PARTUUID="00000001-0e"
/dev/sdb1: LABEL="hyb-systemback" UUID="1aced9e1-d845-46bb-a6e2-448666be4a21" TYPE="ext4" PARTUUID="00006711-01"
/dev/sdb2: UUID="5147bb57-b517-4a46-9344-c690575331e1" TYPE="swap" PARTUUID="00006711-02"
/dev/sdb3: LABEL="SB@boot" UUID="13e83c99-8624-4136-a61d-10e67e670ba3" TYPE="ext4" PARTUUID="00006711-03"
/dev/sdb4: LABEL="SB@" UUID="2ffbf271-02fa-4d6f-a8e6-dee7a63894e5" TYPE="ext4" PARTUUID="00006711-04"
0 /dev/sda1 UUID B664A19764A16ABF LABEL: XP-MASSY TYPE : ntfs
1 /dev/sda5 UUID 3336D5F95125508C LABEL: DONNEES_WD TYPE : ntfs
2 /dev/sda6 UUID 0b82c97d-d077-4191-ae87-de7f2787ba44 LABEL: ___ TYPE : swap
3 /dev/sda7 UUID 5ed81f97-295e-4246-8aa1-7ae54d6c9e7c LABEL: xubuntu-14-sys-m TYPE : ext4
4 /dev/sda8 UUID 08201295-445e-4de7-a95b-a56990a0a9dd LABEL: xubuntu-14-hom-m TYPE : ext4
5 /dev/sda9 UUID 878a2332-9b22-4ca6-b125-d09c3821cf80 LABEL: fusion-12-hom-m TYPE : ext4
6 /dev/sda10 UUID ea999dc0-aaad-46bb-84ab-6e510bd28348 LABEL: ubu-mate-16.04-m TYPE : ext4
7 /dev/sda11 UUID aec00812-bb57-4bbe-a5ed-90228e770e48 LABEL: fusion-12-sys-m TYPE : ext4
8 /dev/sda12 UUID 2f5e2fc1-c492-408e-956b-1d56a72eb7d3 LABEL: voyager16.04.1.1 TYPE : ext4
9 /dev/sda13 UUID 29e5afbd-d25d-4050-816c-e2c8bc7984a2 LABEL: fusion-14-massy TYPE : ext4
10 /dev/sda14 UUID 75df6dda-088e-42e0-bb24-0558de998d09 LABEL: xubuntu-16-sys-m TYPE : ext4
11 /dev/sdb1 UUID 1aced9e1-d845-46bb-a6e2-448666be4a21 LABEL: hyb-systemback TYPE : ext4
12 /dev/sdb2 UUID 5147bb57-b517-4a46-9344-c690575331e1 LABEL: ___ TYPE : swap
13 /dev/sdb3 UUID 13e83c99-8624-4136-a61d-10e67e670ba3 LABEL: SB@boot TYPE : ext4
14 /dev/sdb4 UUID 2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 LABEL: SB@ TYPE : ext4
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
0
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
/boot/grub/tests-modif_grub_V35 et recup_fstab_V2/grub(avec-boot-separe) (copie).cfg
modif_grub_V35.sh: ligne 58: $fich_source : redirection ambiguë
la présence de la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
le traitement ne commence qu'à partir de cette ligne
ajouter cette ligne au fichier
bernard@bernard-System-Product-Name:~$
Je n'ai pas trop compris dans le script.
Le début de la rubrique /grub.d/10_linux , c'est ### BEGIN /etc/grub.d/10_linux ###
La fin de la rubrique, c'est ; ### END /etc/grub.d/10_linux ###
Tu veux traiter tout ce qu'il y a depuis la Ligne ### BEGIN /etc/grub.d/10_linux ###
jusqu'à la ligne ; ### BEGIN /etc/grub.d/40_custom ### ??.
Pour info.
Je vais être absent pour quelques jours, retour à la campagne. Je retrouverai une autre machine là-bas.
@+. Babdu89 .
Dernière modification par Babdu89 (Le 16/03/2017, à 23:11)
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#158 Le 17/03/2017, à 09:07
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
je suis pris tout le week-end je n'aurais pas le temps de regarder
oui c'est bien exit 1 avec une espace !! , ( j'ai édité directement dans le forum )
je chercherais pourquoi on a toujours
modif_grub_V35.sh: ligne 58: $fich_source : redirection ambiguë
Tu veux traiter tout ce qu'il y a depuis la Ligne ### BEGIN /etc/grub.d/10_linux ###
jusqu'à la ligne ; ### BEGIN /etc/grub.d/40_custom ### ??.
oui , il me semble que cela avait été demandé dans l'un des post
le fichier à traiter doit être de la forme
#
ligne 2
.......
ligne n
### BEGIN /etc/grub.d/10_linux ### (ligne obligatoire)
ligne p
.....
ligne p+x
### BEGIN /etc/grub.d/40_custom ### (cette ligne n'est pas obligatoire)
ligne q
..
ligne q+t
fin de fichier
si 40 custom est présent , le programme traitera de 10 à 40
si 40 custom n'est pas présente le programme traitera de 10 à la fin (valable pour les essais , puisqu'en réel cette ligne est présente
Dernière modification par ar barzh paour (Le 21/03/2017, à 08:53)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#159 Le 17/03/2017, à 19:55
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
nouvelle version modif_grub_V37
et recup_fstab_V3
le fichier généré fonctionne sur ma machine
#!/bin/bash
# V24 2017-03-06
#V25
# chaine_linux="linux.*\/vmlinu" pour prise en compte de "linux /@/boot/vmlinuz"
#V26 function sort_info_transforme donne des traces
# V28 2017-03-08
# présentation de concordances UUID-LABEL
# un ligne menuentry et submenu peut comporter des blank après }
# variable fin_submenu pour prise en compte des lignes menuentry se terminant par } }
# V29 2017-03-09
# correction due à l'utilisation de ${#uuid[*]} dans la construction concordance label-uuid
# remplacement de tous les while ${#menu[*]} par for ${!menu[@]}
# V30 idem V29 sans les commentaires superflus
# si boot séparé on sort !!!!
# V33 ajout du sous programme recup_fstab_V2 ( étude système à boot séparé)
# V34 suite à V33 , suppression de certaines fonctions devenue inutiles
# réorganisation de certaines fonctions
# V35 le programme ne traite plus que les lignes comprises entre
# ### BEGIN /etc/grub.d/10_linux ###
# et
# ### BEGIN /etc/grub.d/40_custom ###
# le fichier à traiter doit commencer par un #
# la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
# mais ne doit pas commencer le fichier
# si la ligne ### BEGIN /etc/grub.d/40_custom ### est absente
# le programme traitera le fichier jusqu'à la fin
#V37 ajout de l'option --sansfstab
# ( permet de ne pas lancer la récupération des fichiers fstab
# la création du fichier de concordance UUID-Part-UUIDBoot ne sera pas faite
# le fichier
function ne_commence_pas_par_begin {
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
read ligne < "$fich_source"
if [[ "$ligne" =~ ^"$deb" ]]
then
echo ; echo
echo "désolé"
echo "si le fichier grub à traiter ( $fich_source )"
echo "n'a pas le droit de commencer par la ligne"
echo "$deb"
echo "rappel :"
echo " 1- cette ligne"
echo " $deb"
echo " DOIT apparaître plus loin dans le fichier"
echo " même pour un fichier grub d'essai"
echo
echo " 2- le fichier à traiter DOIT commencer par une ligne de commentaire"
echo " (car cette première ligne sera modifiée)"
echo
echo " 3- en réel le fichier grub commence par #"
exit 1 # au lieu de return 1
fi
}
function trier_fichier {
echo ; echo
echo "fichier grub choisi : $fich_source"
deb="### BEGIN /etc/grub.d/10_linux ###"
fin="### BEGIN /etc/grub.d/40_custom ###"
ne_commence_pas_par_begin
# création de 3 fichiers tmp0-<date>.txt tmp1-<date>.txt tmp3-<date>.txt
fich_source_0=tmp0_$num.txt # lignes du fichier à traiter de 1 à 10_linux
fich_source_1=tmp1_$num.txt # lignes du fichier à traiter de 10_linux à 40_custom
fich_source_2=tmp2_$num.txt # lignes du fichier à traiter de 40_custom à la fin
[[ -e "$fich_source_0" ]] && rm "$fich_source_0" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_1" ]] && rm "$fich_source_1" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_2" ]] && rm "$fich_source_2" # inutile mais évite message d'erreur rm
fich="$fich_source_0"
presence_10_linux=1
IFS="~"
while read ligne
do
case "$ligne" in
$deb ) fich="$fich_source_1" ; presence_10_linux=0 ;;
$fin ) fich="$fich_source_2" ;;
esac
echo "$ligne" >> $fich
done < "$fich_source"
# après lecture du fichier on a du renconter le ligne 10_linux sinon
if [[ $presence_10_linux -eq 1 ]]
then
echo "la présence de la ligne $deb est obligatoire"
echo "le traitement ne commence qu'à partir de cette ligne"
echo "ajouter cette ligne au fichier"
exit 0
fi
}
function verifier_presence_dev { # dans le cas d'utilisation d'un blkid personnel
echo
# mettre les dev de "blkid-res.txt" dans un tableau
dev1=(`awk -F" " '{printf("%s ",$1)}' "blkid-res.txt"`)
# mettre les dev de $res_blkid dans un tableau
dev2=(`awk -F" " '{printf("%s ",$1)}' "$res_blkid"`)
manque=""
for d1 in ${dev1[@]} # /dev/sdxy: /dev/sdzt: de blkid
do
res=`grep $d1 <<< ${dev2[@]}`
[[ -z $res ]] && manque="$manque $d1" # si non trouvé , ajout
done
if [[ -n $manque ]]
then
echo "dans le fichier $res_blkid il manque"
echo ; echo $manque ; echo
echo "tous les dev présents sur la machine doivent être déclarés dans ce fichier"
echo "veuillez éditer ce fichier"
echo "format habituel dev/sdxx: LABEL=\"xxxx\" UUID=\"xxxx\""
exit 0
fi
}
function modif_ligne1_grub { # récupère la première ligne et modifie en y mettant la date
res=`echo "$1" | grep "^ * *#"`
if [[ -n $res ]] # la ligne est bien un commentaire (commence par #)
then
trans="#### $num : $fich_source modifié par $0 ####"
echo $trans > "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
sort_info_transforme "$1" "première ligne modifiée en" "$trans"
else
echo "la première ligne du fichier est "
echo $1
echo
echo "mais il faut que la première ligne du fichier"
echo "$fich_source"
echo "commence par un #"
echo "ajouter cette ligne de commentaire au début de ce fichier"
echo "arrêt du programme"
exit 0
fi #[[ -n $res ]]
}
function OK {
rep=""
while [[ $rep != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="cette partie de programme supprime des lignes supposées inutiles de grub
( paragraphes contenant ......$rech_dev.....$rech_dev........... AVANT la chaine $rech_class )
( menuentry n'ayant pas des UUID égaux dans la ligne search et la ligne linux)
(à partir de V34 les menuentry sur boot séparé devraient être conservés)
le programme demande le nom du fichier à traiter ..
en réel ce devrait être <partition>/boot/gub/grub.cfg ..
et créera un fichier grub-OK-date qui pourra être utilisé pour remplacer le fichier grub
il utilise aussi le label des partitions ou du fichier de référence
pour informer plus précisement la ligne menuentry de grub
on peut utiliser un fichier de référence uuid label (au format blkid)
remarque :pour des essais , on peut traiter n'importe quel fichier ayant un format grub
si le fichier à traiter n'est pas au format grub , il ne fonctionnera pas correctement
et en réel il serait préférable de lancer ce programme après avoir lancé un update-grub
trois fichiers peuvent être créés :
grub-OK-<aaaa:mm:dd-hh:mm:ss>.txt (le grub récupérable)
grub-sup-<aaaa:mm:dd-hh:mm:ss>.txt (les menuentry qui ont été supprimés)
fich_transforme-<aaaa:mm:dd-hh:mm:ss>.txt (les lignes modifiées)
vous pourrez analyser ces fichiers pour voir ce qui s'est passé
avant de remplacer le grub
(en fin de traitement répondez alors non à la demande de remplacement
et faites le remplacement manuellement)
lors du traitement .....
les x qui défilent indiquent des lignes de menu qui seront supprimées
les c qui défilent indiquent les lignes de menu qui seront conservées
les . qui défilent indiquent les autres lignes (qui seront conservées)
un S indique un début de submenu
un M indique un début de menuentry
un m indique la suite de menuentry
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "utilisez seulement oOyYaA S.V.P." ;;
esac
done
}
function choix_fichier_blkid { # retourne 0 si fichier blkid choisi
fich_source=""
titre="$0 Sélectionnez le fichier contenant UUID et LABEL des partitions"
#fich_source=`zenity --file-selection --filename="../blkid/*" --title="$titre"`
fich_source=`zenity --file-selection --title="$titre"`
case $? in #$? est le code de retour de zenity
0) res_blkid="$fich_source" ;;
1) echo "Aucun fichier UUID-LABEL sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
}
function critere_suppression_2 { # se fait après une initialisation de menu[0 ...n]
##### attention les codes de retour ont changé
# 0 si ligne search et ligne linux et uuid égaux (menu conservé + label dans menu[0])
# 1 si pas de ligne search ou linux (menu conservé intégralement)
# ligne search et linux trouvées
# 3 aucun UUID trouvé dans fichier UUID-LABEL
# 2 si uuid différents (menu supprimé à revoir?)
uuid_search="x"
uuid_linux="y"
ligne_search=""
ligne_linux=""
# recherche dans le tableau menu[1..n] de la ligne search
#TEST
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
res=`grep "$chaine_search" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_search="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_search" ]]
then
return 1 # pas de chaine search => on conservera le menu intégralement
fi
# recherche dans le tableau menu[] de la ligne linux
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
tmp=`sed 's/[[:blank:]]//g' <<< "${menu[i]}"` #suppression des blank de menu
res=`grep "$chaine_linux" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_linux="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_linux" ]]
then
return 1 # pas de chaine linux => menu conservé sans modif
fi
#uuid ligne search présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_search
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_search"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_search=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# uuid ligne linux présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_linux
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_linux"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_linux=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# analyse des résultats
if [[ ${uuid_search}${uuid_linux} = "xy" ]]
then
return 3 # aucun des uuid n'a été trouvé dans blkid ( peuvent être égaux ou non )
fi
####################################################################################
# on peut avoir uuid_search uuid_linux
# x 1ea0.... : n'existe pas , existe : code retour 2
# a04f... y : existe , n'existe pas : code retour 2
# bcde... fghi.... : uuids existants et différents: code retour 2
# 1234... 1234.... : uuids existants et égaux : code retour 0
#####################################################################################
# si $uuid_search-$uuid_linux est dans UBoot on renvoie 4
# ce menu correspond à une partition avec boot séparée
for i in ${!UBoot[@]} # pour tous les indices 0..n
do
[[ $uuid_search-$uuid_linux = ${UBoot[$i]} ]] && return 4
done
if [[ "$uuid_search" != "$uuid_linux" ]]
then
return 2 # uuid différents on supprimera ce menu
else
return 0 # uuid egaux on conservera ce menu après modif de menu[0]
fi
} # fin function critere_suppression_2
function ajout_label_menuentry { # ajoute un label à menu[0] (search ou linux)
rech_uuid_label_menuentry "$1" # retour 0 si label trouvé , pas zéro sinon
code=$?
if [[ $code -eq 0 ]]
then # on a un label
tmp=${menu[0]}
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi #[[ $tmp != ${menu[0]} ]]
fi # [[ $code -eq 0 ]]
}
function memorise_menuentry { # mémorise menuentry de submenu pour écriture ultérieure
for p in ${!menu[@]} # pour tous les indices de menu[]
do
((i_s++))
ligne_sousmenu[i_s]=${menu[$p]} # mémorise menu[0 ..n]
((nb_lignes_menu_cons++)) # stat
done
}
function ecrire_lignes_memorisees { # écrit les lignes dans sauv
for p in ${!ligne_sousmenu[@]} # pour tous les indices de ligne_sousmenu[]
do
echo "${ligne_sousmenu[$p]}" >> "$fich_sauv" # écriture l_s[0..n]
((nb_lignes_cons++)) # stat
done
}
function traite_ligne_submenu { # reçoit $1 (ligne submenu '.......{
fin_submenu=1 # sera mise à 0 si un menuentry se termine par } }
submenu="$1" #mise en mémoire de cette ligne
# j'utilise la mémorisation label_submenu du label d'un menuentry précédent
if [[ -n $label_submenu ]]
then
# ajout du label et suppression double label
submenu=`sed "s/submenu '/submenu '${label_submenu} : /" <<< $submenu`
submenu=`sed "s/submenu \"/submenu \"${label_submenu} : /" <<< $submenu`
submenu=`sed "s/${label_submenu} *:* *${label_submenu}/${label_submenu}/" <<<$submenu`
fi
i_s=0
unset ligne_sousmenu
ligne_sousmenu[0]="$submenu" # mémorisation pour sortie finale
((nb_lignes_hors_menu++)) # ligne considérée comme hors menu
# lire les lignes qui suivent submenu jusquà trouver ligne ......} hors menuentry)
while read ligne
do
((nb_lignes_lues++))
# si on trouve .... } hors menuentry on est au bout du submenu
# il faut sauvegarder la ligne submenu , les lignes intermédiaires et menuentry
# je ne traite pas du cas où on trouverait une ligne menuentry terminée par } }
# V28 et suivante ce cas est traité
# une ligne menuentry terminée par } } provoque la fin du submenu ($fin_submenu 0)
# on sort de la boucle si on trouve } en fin de ligne hors menuentry
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # supprime les blancs de la ligne
if [[ "$tmp" =~ }$ || "$fin_submenu" = 0 ]] ### on est en fin de submenu ###
# pas tout à fait exact
# si on peut avoir { ...... } hors menuentry
then
((i_s++))
ligne_sousmenu[i_s]="$ligne" # mémoriser cette ligne
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
ecrire_lignes_memorisees # écriture de ces lignes de submenu
label_submenu=""
return # fin de traitement de submenu
fi # [[ "$tmp" =~ }$ ]]
# V28 élargissement aux blancs de grep après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
if [[ -n $mem ]]
then
res="" # si on trouve la chaine Memory pas intéressant on force res à vide
fi
if [[ -z $res ]]
then # ni menuentry ..{ ni memory ...{
((i_s++)) #
ligne_sousmenu[i_s]="$ligne" # mise en mémoire pour écriture ultérieure
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
else
lire_menuentry # menu[0..n] et ((nb_lignes_lues++))
trt_menu2 "${menu[0]}" # 1 si contient dev dev
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # 1 la ligne contient /dev /dev
then
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # suppression de ce menu
((nb_menu_sup++)) # stat
else # pas 1 : ne contient pas dev dev
critere_suppression_2
code_crit2=$? # 0 1 2 3
case $code_crit2 in
0) # les uuid sont égaux modifier menu[0]
ajout_label_menuentry "$chaine_search"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
1) # pas de search ni de linux on garde sans modif
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé (sans search ou linux)"
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents"
((nb_menu_sup++)) # stat non prévu
;;
3) # uuid non trouvé (search et linux existent)
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé : uuid (search-linux) non trouvé"
((nb_menu_cons++)) # stat non prévu
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
# revoir pour le label
ajout_label_menuentry "$chaine_linux"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi # [[ -z $res ]]
done
# si on arrive ici il y a erreur de traitement quelque part
echo
echo " ligne bach $LINENO"
echo " erreur de format ? dans le fichier $fich_source !!!!!!!!!!"
echo " dernière ligne de menu lue :"
echo
echo ${menu[0]}
echo
echo " dernière ligne lue : $nb_lignes_lues"
echo " $ligne"
sleep 100
exit 0
}
function rech_uuid_label_ligne { # recherche uuid et label de $1 dans uuid[0..n]
# renvoie 0 uuid trouvé et label trouvé uuid_trouve=xxx label_trouve="yyy"
# renvoie 1 uuid trouvé et label vide uuid_trouve=xxx label_trouve=""
# renvoie 2 uuid non trouvé uuid_trouve="" label_trouve=""
uuid_trouve=""
label_trouve=""
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # uuid suivant
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< $1` # $1 est une ligne de menu
if [[ -n $res ]]
then
uuid_trouve=${uuid[$n]}
if [[ -n ${label[$n]} ]]
then
label_trouve=${label[$n]} # si label non vide positionne label_trouve
return 0 # uuid trouvé / label non vide trouvé
else
return 1 # uuid trouvé / label ""
fi
fi
fi
done
return 2 # uuid non trouvé
}
function rech_uuid_label_menuentry { # recherche uuid et label dans la ligne $1 de menu[1 ..n]
for p in ${!menu[@]} # pour tous les indices du tableau 0..n
do
[[ $p = 0 ]] && continue # mais pas dans menu[0]
res=`echo ${menu[$p]} | grep "$1"`
if [[ -n $res ]]
then
rech_uuid_label_ligne ${menu[$p]} # donne uuid_trouve / label_trouve
return $? # 0 uuid égaux
# 1 uuid trouvé , label vide
# 2 pas d'uuid dans search
fi
done
return 3 # pas de search trouvé , (donc pas d'uuid , et donc pas de label) !!!
}
function transforme_ligne_menuentry { # modifie la première ligne d'un menuentry conservé
# recherche l'UUID dans la ligne search --no-floppy --fs-uuid --set=root
# si trouvé , on récupère le label
# si label vide on ne fait rien
# sinon on rajoute avec : en tête après menuentry ' ou menuentry "
#
label_trouve=""
uuid_trouve=""
tmp=${menu[0]} # servira de test pour sortie si modifié
rech_uuid_label_menuentry "$1" # positionne le label à la bonne valeur
code=$? # retour de la fonction
case $code in
0) # UUID trouvé : $uuid_trouve LABEL trouvé : $label_trouve
if [[ $label_submenu = "" ]] # servira dans traitement d'un submenu éventuel
then # on memorise le premier label menuentry trouvé
label_submenu="$label_trouve"
fi
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
#suppression double labels dans cette ligne
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then #TEST
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi
;;
1) # LABEL vide #TEST
sort_info_transforme "$tmp" "pas de label pour $uuid_trouve"
;;
2) #LABEL vide uuid non trouvé #TEST
sort_info_transforme "$tmp" "uuid de ligne search non trouvé"
;;
3) # pas de ligne search trouvée dans menuentry v
sort_info_transforme "$tmp" "ligne search non trouvée"
;;
*) # ???? #TEST
sort_info_transforme "$tmp" "code inconnu : $code"
;;
esac
return $code
}
function lire_menuentry { # met dans tableau menu[n] jusqu'à trouvé } seul sur la ligne
unset menu
i=0
menu[0]="$ligne" # menu[0] est la première ligne
echo -e "M\c" # trace début de menuentry
while read ligne # ligne suivante
do
((i++))
((nb_lignes_lues++))
menu[$i]="$ligne" # mémorisée dans menu [1 .. n]
echo -e "m\c" # trace écran
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # suppression des blancs pour test
if [[ "$tmp" =~ }}$ ]]
then
fin_submenu=0 # termine par } } fin de submenu !!!
fi
if [[ "$tmp" =~ }$ ]] # la ligne se termine par } ?
then
return # oui fin de menuentry
fi
# et si pas de ... } on ira jusqu'en fin de fichier !!!!
# c'est un critère de format de grub
done
}
function sort_menu_0 { # écrit menu[0..n] dans le fichier de sauvegarde
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sauv" # écriture menu[0..n]
((nb_lignes_cons++)) # stat
((nb_lignes_menu_cons++)) # stat
echo -e "c\c" # suivi écran
done
}
function sort_menu_1 { # écrit menu[0..n] dans le fichier suppression
#écriture des paramètres reçus dans fich_sup
echo "#########################" >> $fich_sup
for arg in "$@" # prends $1 $2 ... $n
do
echo $arg >> $fich_sup
#echo >> $fich_sup
done
# écriture du menu dans fichier sup
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sup" # écriture menu[0..n]
((nb_lignes_sup++)) # stat
echo -e "x\c" # suivi écran
done
}
function sort_info_transforme { # écrit les paramètres reçus fich_transforme
echo "#########################" >> $fich_transforme
for arg in "$@" # ( $1 $2 ... $n )
do
echo $arg >> $fich_transforme
#echo >> $fich_transforme
done
}
function trt_menu2 { # analyse le paramètre $1
# renvoie 1 si $1 contient plus d'une fois /dev/sd avant --class (suppresion)
# renvoie 0 sinon
IFS=" " # il faut l'espace comme délimiteur
tableau=($1) # mise en tableau de la ligne
IFS="~" # peut-être utile pour la suite ?
nbdevsd=0 # nombre de fois que l'on trouve /dev/sd (avant --class)
for n in ${!tableau[@]} # de 0 1 2 .... x
do
r_class=`echo ${tableau[$n]} | grep "$rech_class"` # test présence --class
if [[ -n $r_class ]] # --class ou pas ?
then
break # --class est trouvé, sort de la boucle for
else
r_dev=`echo ${tableau[$n]} | grep "$rech_dev"` # test présence /dev/sd
if [[ -n $r_dev ]]
then
((nbdevsd++)) # incrémente si on a /dev/sd
if [[ $nbdevsd -gt 1 ]] # si plus d une fois /dev/sd
then
return 1 # on sort en renvoyant 1
fi #[[ $nbdevsd -gt 1 ]]
fi #[[ -n $r_dev ]]
fi #[[ -n $r_class ]]
done
if [[ $nbdevsd -gt 1 ]] # test nombre
then
return 1 # 1 si plus d'une fois /dev/sd
else
return 0 # 0 sinon
fi
}
# début du programme ##################################################################################
######### variables ###################################
rech_class="\-\-class" # jusqu'à trouver la chaine --class dans menuentry
rech_dev="\/dev\/sd" # la présence de la chaine /dev/sd dans menuentry
res_blkid="blkid-res.txt" # le fichier contenant le résultat de sudo blkid
chaine_search="search \-\-no\-floppy \-\-fs\-uuid \-\-set=root"
# protection des tirets pour les recherche par \ d'où les \-
chaine_linux="linux.*\/vmlinu" # + général "linux......./vmlinu"
label_submenu="" # label valide du menuentry précédent
fich_fstab_conc="UBoot_UPart.txt" # créé par recup-fstab contient les uuid ayant boot séparé
#########################################################
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
fich_sauv=grub-OK-$num.txt
fich_sup=grub-sup-$num.txt
fich_transforme=fich_transforme-$num.txt
fich_fstab=fich_fstab-$num.txt
##### pour les stat #####################################
nb_menu_cons=0
nb_menu_boot_cons=0
nb_menu_sup=0
nb_menu_sans_uuid=0
nb_lignes_sup=0
nb_lignes_cons=0
nb_lignes_lues=0
nb_lignes_hors_menu=0
nb_lignes_menus_cons=0
#########################################################
prg="./recup_fstab_V3" # création de $fich_fstab_conc (UBoot_UPart.txt)
echo "lancement du programme $prg"
#si le programme n'existe pas on sort
! [[ -e "$prg" ]] && echo "il manque le fichier $prg de récupération de infos de fstab" && exit 0
# créé le fichier UBoot_UPart.txt contenant uuid1-uuid2 des systèmes boot séparés
code=0 # permet des essais sans lancer prg , en diésant seulement la ligne qui suit
./$prg # pour des essais mettre #./$prg
code=$?
if [[ $code -ne 0 ]]
then
echo " il y a eu un problème de traitement du programme $prg"
echo " si l'arrêt n'est pas volontaire"
echo " vérifier que le répertoire /mnt/jpb ne comporte pas des résidus de fichiers"
echo " éventuellement faire le ménage dans ce répertoire"
exit 0
fi
echo
echo "suite du programme $0"
echo ; echo
if ! [[ -e $fich_fstab_conc ]] # normalement il a été créé par recup_fstab
then
echo "le fichier $fich_fstab_conc est introuvable"
echo "il faut d'abord exécuter $prg"
echo "ou mettre à disposition manuellement le fichier $fich_fstab_conc"
echo ; echo
exit 0
else
echo " vérification des uuid correspondants à des systèmes sur boot séparés"
echo " la première ligne est une ligne de commentaire puis"
echo " il existe deux lignes par couple"
echo " une ligne uuid1-uuid2"
echo " une ligne uuid2-uuid1"
echo ; echo
echo "###### contenu du fichier $fich_fstab_conc ############################"
cat $fich_fstab_conc
echo "#######################################################################"
echo ; echo
echo " vérifier visuellement le contenu des lignes comprises entre les ###"
echo " tapez sur entrée pour continuer"
read g
fi
# lecture et mise en mémoire des infos donnée par le fichier $fich_fstab_conc ("UBoot_UPart.txt")
#################################################################################################
max_boot=-1
while read l_boot
do
[[ -z $l_boot ]] && echo "ligne vide je passe" && continue # si ligne vide ou commentée
[[ $l_boot =~ ^[[:blank:]]*# ]] && echo "ligne commentée $l_boot je passe" && continue
((max_boot++))
echo $l_boot
UBoot[$max_boot]=$l_boot # format uuid1-uuid2 à la suite
done < $fich_fstab_conc
#################################################################################################
OK # présentation du programme
code=1
while [[ $code = 1 ]]
do
rep=""
while [[ $rep != [oOyYaAcC] ]]
do
titre=" Utilisation des UUID et LABEL des partitions des disques"
texte=" Choix du fichier de références LABEL et UUID
répondez par
(aA) pour arrêter ce programme
(oOyY) si vous voulez ré-utiliser le fichier $res_blkid existant
ce fichier a été créé précédemment
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés sur la partition)
(cC) permet de choisir un fichier de référence UUID LABEL
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés dans ce fichier de référence)
!!!!! à partir de V31 ce fichier devra aussi comporter le champ /dev
chaque partition doit être déclarée
le champ UUID est OBLIGATOIRE pour un traitement correct
le champ type est conseillé
ce choix peut servir si vous ne voulez pas labelliser les
partitions mais mettre quand même un label dans grub
ou bien effctuer des essais
(ce choix un peu tordu est un peu difficile à comprendre ?)
le champ /dev/sdxx en premier
le champ LABEL="xxxxxx"
le champ UUID="xxxxxx"
le champ TYPE="xxxxx"
une ligne sera donc de la forme
/dev/sdxx LABEL=\"un label correct\" UUID=\"un uuid correct\" TYPE=\"le type correspondant\"
!!!! en cas de doute utilisez le choix oOyY puis Valider
si vous répondez non , c'est le fichier $res_blkid qui sera
utilisé pour mettre à jour le titre des menus et sous menus
dans le fichier traité (surtout utile pour des essais)
O pour réutilisation du fichier blkid
C pour choisir un fichier de référence UUID LABEL
A Arrêter
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) echo "réutilisation du fichier $res_blkid créé précédemment" ;;
[aA] ) echo "arrêt du programme" ; exit 0 ;;
[cC] ) echo "choix du fichier des uuid" ; choix_fichier_blkid ;;
* ) echo "utilisez seulement oO yY aA cC S.V.P." ;;
esac
done
# si le fichier de concordance n'existe pas sortie
if ! [[ -e "$res_blkid" ]]
then
echo ; echo
echo " $0 n'a pas trouvé le fichier"
echo " $res_blkid"
echo " que vous avez choisi comme référence UUID-LABEL"
echo " Modifier votre choix de fichier"
echo " ou bien mettez à disposition ce fichier pour continuer"
echo ; echo ; sleep 5
# exit 0
else
code=0
fi
done # sors de la boucle uniquement si code=0
# récupératon dev label UUID dans des tableaux
unset dev
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset btype #le type de la partition
unset bmont # point de montage à cause du boot séparé
############## récupération dev label uuid btype dans le fichier choisi ###################
maxuuid=-1
while read ligne
do
#TEST simplification par continue
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # supprime les : donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 0
dev[maxuuid]=$tmp #récupération du dev de la ligne
label[maxuuid]=""
uuid[maxuuid]=""
btype[maxuuid]=""
echo ${tableau[@]}
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done < $res_blkid
##############################################################################
if [[ "$res_blkid" != "blkid-res.txt" ]]
then
verifier_presence_dev # vérifie que tous les dev du fichier choisi sont bien déclarés
fi
###############################################################################
# sortie des uuid label pour info
rm tmp_u_l.txt
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" && [[ -z "$aff_dev" ]] && aff_dev="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="___"
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="___"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="___"
# car si l'un des $ est "" , il y a erreur d'affichage
printf "%02s %-10s UUID %-36s LABEL: %-20s TYPE : %-10s\n" \
$p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp_u_l.txt
((p++))
done
titre="Affichage des concordances LABEL <=> UUID Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
if [[ $code -ne 0 ]]
then
echo $code
exit 0 #sortie si on ne valide pas
else
echo $code
fi
################ début de traitement du fichier GRUB ###############################
# Quel fichier grub traiter ?
titre="$0 Sélectionnez le fichier GRUB à traiter"
fich_source=`zenity --file-selection --filename="../fichier-grub/*" --title="$titre"`
case $? in # $? est le code de retour de zenity
0) : ;;
1) echo "Aucun fichier sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
#### lecture et traitement du fichier GRUB #######
trier_fichier # création des 3 fichiers de 1 à 10 linux 10 linux à 40 custom 40 custom à la fin
################# traitement jusqu'à 10_linux #####################
prem=0
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]]
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
echo $ligne >> "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
fi
done < "$fich_source_0"
################# traitement de 10_linux à 40_custom
IFS="~"
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]] # pourrait être supprimé depuis V34
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
# entre les crochets on a tab et espace élargisement après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
# res est vide s'il n'y a pas menuentry {
# mem est non vide si on a Memory test -ne pas traiter menuentry 'Memory test
if [[ -n $mem ]]
then # si Memory test on force res à vide
res=""
fi
if [[ -z $res ]]
then # pas menuentry
subm=`echo "$ligne" | grep "^[ ]*submenu.*{[ ]*$"`
if [[ -z $subm ]]
then # pas menuentry pas submenu
echo "$ligne" >> $fich_sauv # écriture de cette ligne dans sauv
((nb_lignes_cons++)) # stat
((nb_lignes_hors_menu++)) # stat
echo -e ".\c" # trace écran
else # contient submenu
echo -e "S\c" # trace
traite_ligne_submenu "$ligne" # traitement de submenu
fi
else # on a menuentry
lire_menuentry # mettre en mémoire dans menu[0..n]
trt_menu2 "${menu[0]}" # rem : 1 si /dev/sd /dev/sd
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # si 1 on supprime
then # le bloc menuentry contient /dev /dev
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # fich_sup
((nb_menu_sup++))
else # menuentry ne contient pas /dev/sd /dev/sd
critere_suppression_2 # analyse des uuid et recherche de label
code_crit2=$?
case $code_crit2 in
0) # les uuid sont égaux
transforme_ligne_menuentry "$chaine_search" # mettre un label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat
;;
1) # menu sans modif (ni search ni linux)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé (sans search ou linux)"
((nb_menu_cons++)) # stat
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents" # écrire dans fich_sup
((nb_menu_sup++)) # stat
;;
3) # uuid non trouvé (search et linux existent)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé : UUID search-linux non trouvé"
((nb_menu_cons++)) # ce menu étant conservé
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
transforme_ligne_menuentry "$chaine_linux" # met label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi #[[ -z $res ]]
fi #[[ $prem -eq 0 ]]
done < "$fich_source_1"
echo $nb_lignes_lues
################# traitement 40_custom à fin #####################
if [[ -e "$fich_source_2" ]] # en cas d'essai sans ligne 40_custom
then
while read ligne
do
((nb_lignes_lues++))
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
echo $ligne >> "$fich_sauv"
done < "$fich_source_2"
fi
#################################################################
echo $nb_lignes_lues
# fin présentation des résultats sur l'écran
echo
echo
printf "%-40s %s %s\n" "fichier traité" " : " "$fich_source"
printf "%-40s %s %s\n" "le résultat se trouve dans" " : " "$fich_sauv"
echo
printf "%-39s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues"
printf "%-40s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons"
printf "%-40s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup"
if [[ $nb_lignes_sup -gt 0 ]]
then
printf "%-40s %s %s\n" "fichier des lignes supprimées" " : " "$fich_sup"
echo
fi
printf "%-40s %s %5d\n" "nombre de menus conservés" " : " "$nb_menu_cons"
printf "%-40s %s %5d\n" "nombre de menus supprimés" " : " "$nb_menu_sup"
printf "%-40s %s %5d\n" "nombre de menus avec boot conservés" " : " "$nb_menu_boot_cons"
if [[ $nb_menu_sans_uuid -gt 0 ]]
then
printf "%-40s %s %5d\n" "nombre de menus sans uuid trouvé" " : " "$nb_menu_sans_uuid"
fi
echo
printf "%-40s %s %5d\n" "lignes conservées (hors menu)" " : " "$nb_lignes_hors_menu"
printf "%-40s %s %5d\n" "lignes conservées (menu)" " : " "$nb_lignes_menu_cons"
echo "après avoir vérifié manuellement le fichier"
echo "$fich_sauv"
echo "en réel vous pourrez remplacer grub.cfg à vos risques et périls"
echo
rep=""
while [[ $rep != [oOyYnN] ]]
do
################ mise à jour du fichier traité ou non ###########################
titre=" ################ remplacement de GRUB ###########"
texte="
Voulez-vous remplacer le fichier choisi par le nouveau fichier généré (oOyYnN)
mais par précaution si vous répondez oui le fichier
$fich_source (fichier original choisi)
sera sauvegardé dans
$fich_source-$num
Attention
$fich_source
sera remplacé par le contenu du fichier
$fich_sauv (le résultat OK obtenu)
donc si avez choisi de traiter /boot/grub
/boot/grub sera remplacé par le fichier résultant ... prenez vos précautions
personnellement si je traite le fichier réel je réponds N
pour vérifier le contenu du fichier créé
puis j'effectue manuellement la copie
répondez par (oOyYnN)"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) # sauvegarde de "grub" , je conserve $num
echo "
OK mais avant je sauvegarde le fichier original
$fich_source
dans
$fich_source-$num
mais il me faut le mot de passe"
sudo cp "$fich_source" "$fich_source-$num"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors de la sauvegarde du fichier
(code erreur : $code) je sors"
exit 0
fi
#et fich_sauv remplace grub
echo "
OK je remplace
$fich_source
par
$fich_sauv"
sudo mv "$fich_sauv" "$fich_source"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors du remplacement du fichier
(code erreur : $code) je sors"
exit 0
fi
;;
[nN] )
echo ; echo "fichier oiginal non remplacé"
echo " mais le fichier résultant $fich_sauv est à disposition"
;;
* ) echo "utilisez seulement oOyYnN S.V.P."
;;
esac
done
echo "taper entrée pour terminer"
read g #pour attendre
exit 0
Dernière modification par ar barzh paour (Le 18/03/2017, à 09:44)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#160 Le 17/03/2017, à 19:57
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
le fichier recup_fstab_V3
#!/bin/bash
# V1 récupère le contenu des fichiers fstab qui peuvent exister sur la machine
# comment ?
# récupération des dev présents par blkid
# création du fichier blkid-res.txt
# pour les partitions déjà montées (via mount)
# lecture et traitement de <partition>/etc/fstab
# et pour chacune des autres partitions
# montage
# lecture et traitement de <point de montage>/etc/fstab
# démontage
# le traitement consiste à écrire dans le fichier DevSd_UBoot_UPart.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSd="/dev/sdxx" UPart="uuid de la partition avec boot" UBoot="uuid du boot"
# le traitement consiste à écrire dans le fichier DevSd_Uboot_Upart-date.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSD="/dev/sdxx" UBoot="uuid du boot" UPart="uuid de la partition avec boot"
# V2 création fichier UBoot_UPart contenant les uuid d'un système avec boot séparé
# format uuid1-uuid2 et uuid2-uuid1 servira lors du traitement modif-grub
# V3 remise en forme
function OK {
# à cause de problème d'affichage
reponse=""
while [[ $reponse != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="
(remarque : il manque des soulignés dans le nom des fichiers !!!)
le but principal de ce sous programme est de créer le fichier
$fich_fstab_conc
qui contiendra les uuid des sysèmes avec boot séparé
il met a disposition le fichier $res_blkid
qui contient le résultat de la commande sudo blkid
il crée aussi (pour info d analyse) le fichier
DevSd_UBoot_UPart-$num.txt
qui contiendra entre autre le fichier /etc/fsab des partitions présentes
le fichier
"$fich_fstab_court"
qui contient pour chaque partition
DevSd=\"/dev/sdxx\" UPart=\"uuid de la partition avec boot\" UBoot=\"uuid du boot\"
et le fichier
"$fich_fstab_long"
comment ? partie délicate
récupération des dev existants par sudo blkid
pour les partitions déjà montées (via mount)
lecture et traitement de <partition>/etc/fstab
et pour chacune des autres partitions
montage
lecture et traitement de <point de montage>$fich_recup
démontage
SOUS-PROGRAMME DE MODIF GRUB
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYnN S.V.P." ;;
esac
done
}
function rech_uuid_dev { # si $1 est dans dev[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${dev[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function rech_uuid_label { # si $1 est dans label[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${label[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function ecrit_uuid1_uuid2 { # recoit $1 $2 sous la fore UUID= ou LABEL= ou /dev/sdxx
# écrit uuid1-uuid2 et uuid2-uuid1 dans $fich_fstab_conc
# en remplacant le label ou le /dev/sdxx par l'uuid correspondant
# et en enlevant UUID= et LABEL=
uuid1=""
uuid2=""
echo "fonction ecrit_uuid1_uuid2 $1 $2"
#pour le premier paramètre
debut=`echo "$1" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$1" # /dev/sdxx on recherche l'uuid correspondant
uuid1="$uuid"
;;
UUID\= )
uuid1=`echo "$1" | cut -c6-` # si UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$1" | cut -c7-` # si LABEL on prend ce qui se trouve après =
uuid1="$uuid" # et on recherche l'uuid correspondant
;;
esac
#même chose pour le deuxième paramètre
debut=`echo "$2" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$2" # /dev/sdxx on recherche l'uuid correspondant
uuid2="$uuid"
;;
UUID\= )
uuid2=`echo "$2" | cut -c6-` # UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$2" | cut -c7-` # LABEL on prend ce qui se trouve après =
uuid2="$uuid" # et on recherche l'uuid corespondant
;;
esac
if [[ -n $uuid1 ]] && [[ -n $uuid2 ]]
then
# on écrit les deux combinaisons possibles , plus simple à traiter ensuite
echo $uuid1-$uuid2 >> $fich_fstab_conc
echo $uuid2-$uuid1 >> $fich_fstab_conc
fi
echo "fin de fonction ecrit_uuid1 uuid2 =1=>$uuid1<=== =2=>$uuid2<==="
}
function ecrit_ligne_court { # ecrit $1 $2 $3 formatés dans un fichier
# et si $3 (UBoot) non vide
# uuid1-uuid2 dans UBoot_UPart
printf "DevSd=%-18s UPart=%-36s UBoot=%-36s\n" "$1" "$2" "$3" >> $fich_fstab_court
if [[ -n "$3" ]] # si uboot non vide
then
ecrit_uuid1_uuid2 "$2" "$3" # envoie uuid de partition et uuid de boot
fi
}
function trans_ligne_fstab { # récupère les champs d'une ligne
# champ1 champ2 champn mais on ne s'intérese qu'aux champs 1 et 2
# champ1 : UUID=uuid ou LABEL=label ou le dev [non traités : PARTUUID= PARTLABEL=]
# champ2 : le point de montage
champ1=`echo "$1"|awk -F" " '{printf ("%s",$1)}'` # bloc spécial ou système de fichiers distant à monter
champ2=`echo "$1"|awk -F" " '{printf ("%s",$2)}'` # c'est le point de montage
case "$champ2" in
\/ )
dev_part=$champ1 # si champ2 est / on positionne dev_part sur champ1
;;
\/boot )
dev_boot=$champ1 # si champ2 est /boot on positionne dev_boot sur champ1
;;
esac
}
# début du programme
#########################################################################################
# variables
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
res_blkid="blkid-res.txt" # résultat de sudo blkid
fich_fstab_long="DevSd_UBoot_UPart-$num.txt" # résultant commenté
fich_fstab_court="DevSd_UBoot_UPart.txt" # résultant court DevSd=...U1...U2
fich_fstab_conc="UBoot_UPart.txt" # résultant concaténé UUID1-UUID2
fich_fstab_conc_num="UBoot_UPart-$num.txt" # sauvegarde,à supprimer manuellement
rep_mnt=/mnt/jpb-$num # répertoire pour montages/démontages
fich_recup=/etc/fstab # fichier à récupérer dans part.
#########################################################################################
[[ -e $fich_fstab_court ]] && rm $fich_fstab_court
echo "# $num : couples uuid-boot - uuid-systeme des menuentry en boot séparé" > $fich_fstab_conc
OK # présentation du programme / sortie ou non
reponse=""
while [[ $reponse != [oOyYnNaAcC] ]]
do
titre="récupération des UUID et LABEL des partitions des disques"
texte="
Récupération des infos dans les fichiers $fich_recup des partitions
ce programme travaille avec sudo pour
récupérer les dev (blkid)
effectuer des montages/démontages
il vous demandera donc votre mot de passe d'administration
répondez par
(oOyY) pour lancer la commande sudo blkid ( remise à jour du fichier)
(aA) pour arrêter ce programme
O pour récupérer les devices via SUDO
A Arrêter
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) sudo blkid > $res_blkid ;;
[aA] ) echo "arrêt du programme" ; exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYaA S.V.P." ;;
esac
done
# récupération des dev label et UUID
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset bmont # pour le point de montage à cause du boot séparé
unset btype # le type de la partition
maxuuid=-1
while read ligne # lecture et traitement du fichier généré par sudo blkid
do
# c'est le même script que dans modif-grub
# certaine lignes sont inutiles mais je les ai laissées
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
# le dev est le premier champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 1
# init variables d'indice maxuuid
dev[maxuuid]=$tmp # le dev de la ligne blkid
label[maxuuid]="" # le label de la ligne blkid
uuid[maxuuid]="" # l'uuid de la ligne blkid
btype[maxuuid]="" # le type de la ligne blkid
mnt_dev[maxuuid]="1" # modifié par mount : 0 si le dev est monté
p_dev[maxuuid]="" # modifié par mount : point de montage
# echo ${tableau[@]} # liste des indices
# positionnemnt des variables d'indice maxuuid en fonction de la ligne blkid
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done <$res_blkid
#récupération des partitions déjà montées
mount | grep '^\/dev' > tmp.txt
# 1 2 3 4 5 6
# /dev/sda11 on /media/SH type ext4 (rw,relatime,data=ordered)
# remarque :
# awk -F" " '{printf ("%s ",$1)}' tmp.txt
# donne
# tous les dev séparés par une espace grace à "%s "
# awk -F" " '{printf ("%s ",$3)}' tmp.txt
# donne
# tous les points de montage séparés par une espace grace à "%s "
mdev=(`awk -F" " '{printf ("%s ",$1)}' tmp.txt`) # les dev montés dans un tableau
mont=(`awk -F" " '{printf ("%s ",$3)}' tmp.txt`) # les points de montage dans un tableau
# positionnement montée ou non de chaque dev
for i in ${!dev[@]} # pour tous les indices des dev
do
for j in ${!mdev[@]} # pour tous les indices des partitions montées
do
if [[ "${dev[$i]}" = "${mdev[$j]}" ]]
then
mnt_dev[i]="0" # 0 indique que le dev est montée
p_dev[i]=${mont[$j]} # le point de montage du dev
break
fi
done
done
# sortie des uuid label pour info
[[ -e "tmp_u_l.txt" ]] && rm "tmp_u_l.txt"
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" # jamais vide
aff_mnt_dev="${mnt_dev[$p]}" # vaut 0 (monté) ou 1 (non monté)
aff_p_dev="${p_dev[$p]}" # (affichage en fonction du précédent)
# pour les corrections d'affichage
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="_"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="_"
case $aff_mnt_dev in
0)
printf "%02s %-10s %-36s LABEL %-20s sur %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_p_dev $aff_btype | tee -a tmp_u_l.txt ;;
1)
printf "%02s %-10s %-36s LABEL %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp_u_l.txt ;;
esac
((p++))
done
reponse=""
titre="concordances dev<=>LABEL<=>UUID<=>point de montage (de blkid) Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
if [[ $code -eq 0 ]]
then
echo "OK je continue"
else
echo ; echo "Annulation demandée" ; echo ; exit 1
fi
##################################################
# pour cette partie il est absolument nécessaire d'avoir une liste des dev corrects
# d'où le sudo blkid effectué plus haut !
##################################################
echo "récupération des fstab de toutes les partitions" > $fich_fstab_long
echo >> $fich_fstab_long
############################################################
echo "pour les partitions déjà montées :" >> $fich_fstab_long
echo ${!dev[@]}
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]} ${mnt_dev[$i]}
[[ ${mnt_dev[$i]} = "1" ]] && continue # non monté suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
# on pourrait en ajouter d'autres
echo >> $fich_fstab_long
echo ${dev[$i]} "montée sur" ${p_dev[$i]} >> $fich_fstab_long
#pour chaque dev monté on récupére les infos de fstab
fich=${p_dev[$i]}$fich_recup
fich=`sed 's/\/\//\//g' <<< $fich` # supprime les doubles // (à cause de //etc/fstab)
echo $fich #soit /etc/fstab soit /xxx/xxx/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo "$fich de ${dev[$i]}" >> $fich_fstab_long
# on ne garde que les lignes non commentées et non vide
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
#si tmp n est pas vide , elle commence par #
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
done
echo >> $fich_fstab_long
##############################################################
echo "pour les partitions non montées :" >> $fich_fstab_long
if [[ -e "/mnt" ]]
then
echo "réperoire /mnt présent"
else
echo "le répertoire /mnt n'existe pas !!!"
exit 1
fi
rep_mnt_tmp="/mnt/jpb-$num"
echo "création du répertoire $rep_mnt_tmp pour monter les partitions"
sudo mkdir $rep_mnt_tmp
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]}
[[ ${mnt_dev[$i]} = "0" ]] && continue # montée suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
echo
echo "traitement de $i ${dev[$i]} (${btype[$i]})"
echo "montage de ${dev[$i]} sur $rep_mnt_tmp"
sudo mount ${dev[$i]} $rep_mnt_tmp
code=$?
echo "code de retour montage de ${dev[$i]} sur $rep_mnt_tmp : $code"
if [[ $code = 0 ]] # si le montage est réussi
#################### montage réussi ####################
then
fich=$rep_mnt_tmp/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo ${dev[$i]} montée sur $rep_mnt_tmp >> $fich_fstab_long
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
# si ne commence pas par # , tmp est vide
# et si la ligne n'est pas vide on l'écrit
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
# puis on le démonte avec boucle sinon le démontage ne se fait pas toujours
boucle=0
code=1
while [[ $code -ne 0 ]]
do
sudo umount "$rep_mnt_tmp"
code=$?
echo "boucle $boucle : ${dev[$i]} code de retour de umount $code"
if [[ $code = 0 ]]
then
echo
echo "boucle $boucle : ${dev[$i]} démontage effectué (code retour $code)"
ls -ails $rep_mnt_tmp
else
echo
echo "boucle $boucle : ${dev[$i]} non démonté (code retour $code)"
sleep 1 # attente en cas de non démontage
((boucle++))
if [[ $boucle -ge 10 ]]
then
echo "problème de démontage de ${dev[$i]}"
exit 1
fi
fi
done # boucle while
############################ échec de montage ###################
else
echo >> $fich_fstab_long
echo "impossible de monter ${dev[$i]} code echec de montage :$code" >> $fich_fstab_long
fi
done # boucle for i dev
echo ; echo
echo "fin de récupération des données de /etc/fstab des partitions présentes sur la machine"
echo ; echo
# sauvegarde de UBoot_UPart pour une utilisation personnelle
cp "$fich_fstab_conc" "$fich_fstab_conc_num"
echo "suppression du répertoire $rep_mnt_tmp en cours"
sudo rmdir $rep_mnt_tmp
code=$?
if [[ $code -ne 0 ]]
then
#rmdir: échec de suppression de '/mnt/jpb-2017:03:11-12:02:43': Périphérique ou ressource occupé
echo
ls -ails /mnt/jpb*
echo "vérifier le contenu du répertoire /mnt/jpb"
echo "faire le ménage dans ce répertoire"
exit 1
fi
echo "supression réussie"
echo "fin normale du programme $0"
exit 0
EDIT ligne 320 (sans conséquence)
Dernière modification par ar barzh paour (Le 20/03/2017, à 09:48)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#161 Le 18/03/2017, à 23:48
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonsoir.
Depuis une autre machine, avec 4 hdd internes, contenant pas mal d'os.
Les scripts recup_fstab_V3 et modif__grub_V37 fonctionnent correctement aussi, chez moi.
Constat.
État des lieux;
Depuis la nouvelle config, mise à jour de grub des Os de la clé de tests, pour avoir des grub.cfg correcte
Testé depuis les Os, sans et avec partition /boot séparé (les Os de tests de la clé de tests).
Dossiers de tests créés dans /boot/grub des deux Os, contenant une copie du ficher grub.cfg à traiter par les scripts. Ceci pour préserver les fichier originaux.
Depuis les deux Os.
Les label des partitions lorsque présents ==>OK.
Les label dans les blocs submenu et menuentry avec nom de l'Os indiqué (modif dans /etc/default/grub), label suivi du nom de l'os ==> OK.
Blocs menuentry de l'Os avec partition /boot séparé (UUID différents) conservé dans les deux grub.cfg (avec et sans /boot séparé).==> OK.
Blocs menuentry à supprimer avec UUID différents, (multiplication de menuentry) supprimés ==> OK.
Fichiers grub.cfg modifiés par les script, traité plusieurs fois, plus de répétition des label dans les menuentry. ==> OK.
Tous les fichiers de travail des scripts sont laissés dans le dossier personnel et dans les dossiers de test dans /boot/grub. Même les fichiers tmp0, tmp1,tmp2, .
Si ce n'est pas supprimé, ou "rangé" dans des dossiers créé à cet effet, comme on va utiliser les scripts assez souvent, du fait de nouvelles installations, mises à jours système et autres maj de Grub. Çà va vite faire "fouillis" .
Qu'en penses -tu?.
Je teins à disposition les fichiers grub.cfg originaux et traités, les retours terminal, et fichiers de travail, pour les poster si nécessaire.
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#162 Le 20/03/2017, à 08:46
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
bien content que cela fonctionne
Tous les fichiers de travail des scripts
pour ces fichiers créés quelle méthode proposerais-tu ?
quelques solutions à choisir , je m'y mettrai dès que j'aurai quelque temps
- mise de ces fichiers dans un répertoire particulier , la suppression étant laissée à l'initiative de l'utilisateur
- je pense qu'il est aussi assez facile de les mettre dans /tmp
- suppression automatique de ces fichiers par le bash
- à la fin du bash demande si l'utilisateur veut supprimer les fichiers
- autres suggestions ....
par contre je garderai le fichier de sauvegarde du grub dans /boot/grub laissant à l'utilisateur le soin de le supprimer
Dernière modification par ar barzh paour (Le 20/03/2017, à 09:45)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#163 Le 20/03/2017, à 11:46
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonjour.
Ah oui, j'oubliai aussi la multiplication de ces fichiers de travail, si l'utilisateur lance le script pour traiter les fichiers grub.cfg des autres Os de la config, depuis l'Os qui démarre la machine par défaut.
Je pense qu'il y a des fichiers qui peuvent être supprimé à la fin du traitement
Mais d'autres qui seraient à garder. Je pense à ;
blkid-res.txt et les sauvegardes des fichiers grub.cfg originaux à traiter.
Lors de mes tests, je faisais un dossier de travail dans /boot/grub de l'Os par défaut au démarrage. Il pourrait servir à stocker les fichiers de sauvegardes des grub.cfg . Il pourrait avoir comme nom "sav-grub.cfg" . Et que ce soit les script qui créé ce dossier, et y stocke les sauvegardes dedans.
Je faisais aussi un dossier dormant (ZZZ) dans le dossier personnel de l'Os par défaut au démarrage, pour y déplacer les fichiers de travail créés dans le dossier personnel.
Tu disais aussi qu'il valait mieux faire une maj de Grub de l'os qui sert à lancer le script, (Os par défaut au démarrage) avant de traiter son fichier grub.cfg.
Çà ne peut pas être la première manip que ferait les script, en l'incluant dedans? Il faut réfléchir aux conséquences...
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#164 Le 23/03/2017, à 19:18
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
pour répondre à ton post 163
je ne retiens pas la mise à jour automatique de grub ,
trop compliqué à mettre en oeuvre correctement
plusieurs fichiers temporaires sont maintenant supprimés automatiquement
d'autres non
ils sont conservés
soit dans le répertoire ZZZnum du répertoire d'appel
soit dans le répertoire d'appel pour blkid-res.txt et UBoot-Upart.txt
et en fin de traitement un petit programme propose une suppression des fichiers
remarque :j'ai repris cette portion de script et l'ai appelé supZZZnum
il est disponible dans un post suivant
il faut le mettre dans le même répertoire que modif_grub
quand on le lance il propose une suppression des fichiers temporaires de ZZZnum
dernière version : modif_grub_V41 et de recup_fstab_V5
voir au début du script quelques explications de fonctionnement
que je reprends ici
###########################################################################
# résumé des actions effectuées
# modif_grub permet
# - de raccourcir la longueur d'un fichier au format grub en y supprimant des menus inutiles
# - d'ajouter un label à un menu de grub pour avoir une présentation plus claire
# pour cela deux solutions :
# - utilisation du label de la partition
# - utilisation d'un fichier personnel au format blkid
# lorsqu'un label est modifié et que l'on retraite le fichier , ce label sera
# - l'action de remplacement d'un grub réel demande à l'utilisateur des précautions d'usage
# être capable de revenir en arrière si problème !
# c'est à dire être capable de remettre le grub d'origine
###########################################################################
###########################################################################
# les fichiers créés
# les fichiers créés par recup_fstab
# le fichier blkid-res.txt ( correspondance dev-uuid-label)
# le fichiers UBoot-UPart.txt ( cas des OS avec boot séparé)
# les fichiers créés par recup_fstab dans ZZZnum
# le fichier DevSd-UBoot-UPart-<date> : contient les fichiers de /etc/fstab
# le fichier UBoot-UPart-<date>.txt : copie de UBoot-UPart-<date>.txt
#
# les autres fichiers qui sont créés dans ZZZnum par modif_grub
# le fichier grub-OK-<date>-<....>.txt destiné à remplacer le fichier traité
# ce fichier n'apparait plus si on a demandé le remplacement du fichier traité
# mais dans ce cas le fichier traité est sauvegardé (dans son nom-<date>)
# les fichiers suivants sont plus ou moins intéressant à analyser
# fichier grub-sup : contient les menus qui ont été supprimés
# fichier stat-<date> : contient nombre de menus/lignes conservés/supprimés
# fichier grub-mod : contient la 1ére ligne d'un menu qui a été modifié
# ou qui a été conservé pour une raison X
# les fichiers tmp[012]-<date> (coupures du fichier traité)
#############################################################################
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#165 Le 23/03/2017, à 19:20
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
EDIT 2020-04-22 : pour la dernière version :voir
le fichier le fichier modif_grub_V46_bis post 178
https://forum.ubuntu-fr.org/viewtopic.p … #p22261874
le fichier recup_fstab_V8 post 179
https://forum.ubuntu-fr.org/viewtopic.p … #p22261876
Fichier modif_grub_V41 la dernière version est en post 172 (V44)
#!/bin/bash
#########################################################################################
# résumé des actions effectuées
# modif_grub permet
# - de raccourcir la longueur d'un fichier au format grub
# en y supprimant des menus inutiles (menu contenant /dev /dev , uuid différents)
# le fichier à traiter doit contenir
# pemière ligne : un commentaire commençant par #
# la ligne : ### BEGIN /etc/grub.d/10_linux ###
#
# si la ligne : ### BEGIN /etc/grub.d/40_custom ### apparait
# seules les lignes entre 10_linux et 40_custom seront traitées
# si cette ligne n'apparait pas
# ce sont les lignes de 10_linux à la fin qui seront traitées
#
# un menu doit être de la forme
# menuentry ' ............ { ou menuentry " ..........{
# des lignes intermédiaires à priori quelconques
# la ligne terminant le menu ........ }
#
# aucun caractère [hors blancs] ne doit apparaître après un { ou un }
#
# un submenu doit être de la forme
# submenu '................{ ou submenu "................{
# des lignes quelconques ?
# de menus au format ci-dessus
# une ligne de fermeture ......} aucun caractères [hors blancs] après }
# si cette ligne fait partie d'un menu elle sera alors de la forme
# .........} }
#
# - d'ajouter un label à un menu de grub pour avoir une présentation plus claire
# pour cela deux solutions :
# - utilisation du label de la partition
# - utilisation d'un fichier personnel au format blkid
# lorsqu'un label est modifié et que l'on retraite le fichier , ce label sera
# - l'action de remplacement d'un grub réel demande à l'utilisateur des précautions d'usage
# être capable de revenir en arrière si problème !
# c'est à dire être capable de remettre le grub d'origine
#########################################################################################
#########################################################################################
# les fichiers créés
# les fichiers créés par recup_fstab
# le fichier blkid-res.txt ( correspondance dev-uuid-label)
# le fichiers UBoot-UPart.txt ( cas des OS avec boot séparé)
# les fichiers créés par recup_fstab dans ZZZnum
# le fichier DevSd-UBoot-UPart-<date> : contient les fichiers de /etc/fstab
# le fichier UBoot-UPart-<date>.txt : copie de UBoot-UPart-<date>.txt
#
# les autres fichiers qui sont créés dans ZZZnum par modif_grub
# le fichier grub-OK-<date>-<....>.txt destiné à remplacer le fichier traité
# ce fichier n'apparait plus si on a demandé le remplacement du fichier traité
# mais dans ce cas le fichier traité est sauvegardé (dans son nom-<date>)
# les fichiers suivants sont plus ou moins intéressant à analyser
# fichier grub-sup : contient les menus qui ont été supprimés
# fichier stat-<date> : contient nombre de menus/lignes conservés/supprimés
# fichier grub-mod : contient la 1ére ligne d'un menu qui a été modifié
# ou qui a été conservé pour une raison X
# les fichiers tmp[012]-<date> (coupures du fichier traité)
#########################################################################################
# quelques points d'historique
# V41 2017-03-23
# prend en compte le changement de label par un autre label
# ne fonctionnera que
# si on traite un grub modifié par modif_grub à partir de V7
# remarque on peut aussi repartir d'un grub tout neuf par update-grub
# les grub de tous les OS doivent être dans cet état
# on peut le voir si la ligne du menu entry comporte : après le label
# exemple menuentry 'U16.04-P10-64b : Ubuntu, avec Linux .......
# par contre la ligne suivante avec un nouveau label NOUVEAU
# menuentry 'M16.04-P12-64b,Ubuntu (sur /dev/sda12)'
# deviendrait
# menuentry 'NOUVEAU : M16.04-P12-64b,Ubuntu (sur /dev/sda12)'
# V40 qui fonctionne avec recup_fstab_V5
# les fichiers créés prennent un nom plus long (répertoire complet)
# les statistiques sont conservées dans ZZZnum/stat-<date>
# pour des raisons d'affichage , les _ des noms de fichiers créés sont remplacés par des -
# V39 répertoire des fichiers temporaires ZZZnum
# demande de suppression fichers
# V38 avec recup_fstab_V4
# ajout de l'option --sansfstab (permet de na pa lancer recup_fstab)
# ===> la création du fichier de concordance UUID-Part-UUIDBoot ne sera pas faite
# (hors ce fichier est nécessaire à modif_grub )
# et le fichier blkid ne sera pas mis à jour automatiquement
# V35 le programme ne traite plus que les lignes comprises entre
# ### BEGIN /etc/grub.d/10_linux ###
# et
# ### BEGIN /etc/grub.d/40_custom ###
# le fichier à traiter doit commencer par un #
# la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
# mais ne doit pas commencer le fichier
# si la ligne ### BEGIN /etc/grub.d/40_custom ### est absente
# le programme traitera le fichier de 10_linux jusqu'à la fin
# V34 suppression de certaines fonctions devenue inutiles
# réorganisation de certaines fonctions
# V33 ajout du sous programme recup_fstab_V2 ( étude système à boot séparé)
# V30 idem V29 sans les commentaires superflus
# si boot séparé on sort !!!!
# V29 2017-03-09
# correction due à l'utilisation de ${#uuid[*]} dans la construction concordance label-uuid
# remplacement de tous les while ${#menu[*]} par for ${!menu[@]}
# V28 2017-03-08
# présentation de concordances UUID-LABEL
# un ligne menuentry et submenu peut comporter des blank après }
# une ligne peut se terminer par } }
#V26 function sort_info_transforme donne des traces
# V25
# chaine_linux="linux.*\/vmlinu" pour prise en compte de "linux /@/boot/vmlinuz"
# V8 2017-02-14
# adjonction critere_suppression_2
# suppression des menus qui ont des UUID différents dans search --no-floppy et dans linux /boot/
# conservation des menus qui n'ont pas de lignes search --no-floppy
# conservation des menus qui n'ont pas de lignes linux /boot/vmlinu
# anomalie redoublement label , non modification de la ligne submenu
# V7 2017-02-13
# la ligne de submenu est recherché par submenu ' ou par submenu " au lieu de submenu 'Options .....
# l' UUID (et donc le label) est récupéré dans le bloc suivant de menuentry
# V6 2017-02-13
# on récupère l'UUID dans la ligne search --no-floppy --fs-uuid --set=root du bloc
# V5 2017-02-12
# seules les lignes commençant par menuentry et finisant par { seront traitées comme menuentry
# (le test se fait par ^[tab ]*menuentry.*{$)
# V4 2017-02-10
# il y aura suppression du menu si on trouve ....../dev/sd...../dev/sd...... AVANT la chaine --class ,
########################################################################################
function confirmation_sortie {
declare titre="Sortie de $0"
declare ok="Confirmer la sortie"
declare texte="Pour Validez la sortie cliquer sur \"$ok\""
declare cancel="Abandonner la sortie"
if zenity --question --title "$titre" --text "$texte" \
--no-wrap --ok-label "$ok" --cancel-label "$cancel"
then
exit 63
fi
}
function suppression_fichiers_temporaires {
repertoire_a_vider="./$ZZZnum"
fich="/tmp/liste_fichier.txt" # contient la liste des fich. du rép. à supprimer
oklabel="Sortir si EXIT coché / Supprimer fichiers cochés sinon"
cancellabel="Re-cocher toutes les cases (sauf grub-OK)"
texte="
Des fichiers ont été créés lors de l'exécution du programme
$0
ci dessous ces fichiers encore existants dans le répertoire
"$repertoire_a_vider"
Pour supprimer des fichiers
1- Décocher la case EXIT
2- Cochez le case des fichiers que vous voulez supprimer
3- Cliquer sur $oklabel
==> ce menu se relancera en indiquant
les fichiers encore existants
Pour SORTIR de ce menu une seule solution
Cochez la case EXIT puis cliquez sur \"$oklabel\"
pour Recocher la case de tous les fichiers (sauf grub-OK) cliquer sur
$cancellabel
"
while :
do
# listage des fichiers du répertoire
ls "$repertoire_a_vider" > "$fich" # ligne à supprimer en réel
liste_fichier="TRUE EXIT_(Sortir_du_menu)"
while read ligne
do # problème zenity ?
ligne=$(sed "s/ /*/g" <<< $ligne) # remplacer les espaces par *
case $ligne in
tmp[012][-_]20* | \
tmp[-_]u[-_]l* | \
tmp.txt | \
fich[-_]transforme-* | \
grub-mod* | \
stat-20* | \
DevSd[-_]UBoot* | \
grub-sup-20* | \
UBoot-UPart* )
liste_fichier="$liste_fichier TRUE $ligne"
;;
blkid-res.txt | \
grub-OK* )
liste_fichier="$liste_fichier FALSE $ligne"
;;
esac
done < "$fich"
#sélection des fichiers à supprimer
choix=`zenity --list \
--title="XXXXXXXXXXXXXXXXXXX : $0" \
--text="$texte" \
--checklist \
--cancel-label "$cancellabel" \
--ok-label "$oklabel" \
--height "750" \
--width "800" \
--column="CONS/SUP" --column="nom du(des) fichier(s) de $repertoire_a_vider" \
${liste_fichier} \
2>/dev/null ` # ne pas effacer cette ligne fin de choix
code=$?
echo "code de zenity $code"
if [[ $code == 0 ]] # code retour zenity (0=normal,sinon clic/x , Esc , )
then
[[ -n `echo $choix|grep "EXIT"` ]] && exit 0
if [[ -z $choix ]] # $choix est vide
then
echo "Aucun choix effectué"
continue # on recommence
else
echo "le choix est :"
echo "$choix"
IFS="|"
list=($choix)
echo "le 1er est ${list[0]}"
echo "le 2ème est ${list[1]}"
echo ${list[@]}
IFS="$OLDIFS"
if zenity --question --title "SUPPRESSION" \
--text "Suppression de ${#list[@]} fichiers" \
--no-wrap --ok-label "Confirmer Suppression" \
--cancel-label "Abandonner la Suppression"
then
for i in ${list[@]}
do
i=$(sed "s/*/ /g" <<< $i) #remettre espace à la place des *
echo "je supprime $repertoire_a_vider/$i"
rm "$repertoire_a_vider/$i"
done
fi
continue # on recommence
fi
else
[[ $code == 1 ]] && continue # on a cliqué sur Re-cocher
fi
confirmation_sortie
done
}
function ne_commence_pas_par_begin {
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
read ligne < "$fich_source"
if [[ "$ligne" =~ ^"$deb" ]]
then
echo ; echo
echo "désolé"
echo "si le fichier grub à traiter ( $fich_source )"
echo "n'a pas le droit de commencer par la ligne"
echo "$deb"
echo "rappel :"
echo " 1- cette ligne"
echo " $deb"
echo " DOIT apparaître plus loin dans le fichier"
echo " même pour un fichier grub d'essai"
echo
echo " 2- le fichier à traiter DOIT commencer par une ligne de commentaire"
echo " (car cette première ligne sera modifiée)"
echo
echo " 3- en réel le fichier grub commence par #"
exit 1 # au lieu de return 1
fi
}
function trier_fichier {
echo ; echo
echo "fichier grub choisi : $fich_source"
deb="### BEGIN /etc/grub.d/10_linux ###"
fin="### BEGIN /etc/grub.d/40_custom ###"
ne_commence_pas_par_begin
# création de 3 fichiers tmp0-<date>.txt tmp1-<date>.txt tmp3-<date>.txt
[[ -e "$fich_source_0" ]] && rm "$fich_source_0" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_1" ]] && rm "$fich_source_1" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_2" ]] && rm "$fich_source_2" # inutile mais évite message d'erreur rm
fich="$fich_source_0"
presence_10_linux=1
IFS="~"
while read ligne
do
case "$ligne" in
$deb ) fich="$fich_source_1" ; presence_10_linux=0 ;;
$fin ) fich="$fich_source_2" ;;
esac
echo "$ligne" >> $fich
done < "$fich_source"
IFS="$OLDIFS"
# après lecture du fichier on a du renconter le ligne 10_linux sinon
if [[ $presence_10_linux -eq 1 ]]
then
echo "la présence de la ligne $deb est obligatoire"
echo "le traitement ne commence qu'à partir de cette ligne"
echo "ajouter cette ligne au fichier"
exit 0
fi
}
function verifier_presence_dev { # dans le cas d'utilisation d'un blkid personnel
echo
# mettre les dev de "sudo blkid" dans un tableau
dev1=(`awk -F" " '{printf("%s ",$1)}' "$blkid"`)
# mettre les dev du fichier choisi dans un tableau
dev2=(`awk -F" " '{printf("%s ",$1)}' "$blkid_choisi"`)
manque=""
for d1 in ${dev1[@]} # /dev/sdxy: /dev/sdzt: de blkid
do
res=`grep $d1 <<< ${dev2[@]}`
[[ -z $res ]] && manque="$manque $d1" # si non trouvé , ajout
done
if [[ -n $manque ]]
then
echo "dans le fichier $blkid_choisi il manque"
echo ; echo $manque ; echo
echo "tous les dev présents sur la machine doivent être déclarés dans ce fichier"
echo "veuillez éditer ce fichier"
echo "format habituel dev/sdxx: LABEL=\"xxxx\" UUID=\"xxxx\""
echo " la présence de LABEL n'est pas obligatoire"
exit 0
fi
}
function modif_ligne1_grub { # récupère la première ligne et modifie en y mettant la date
res=`echo "$1" | grep "^ * *#"`
if [[ -n $res ]] # la ligne est bien un commentaire (commence par #)
then
trans="#### $num : $fich_source modifié par $0 ####"
echo $trans > "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
sort_info_transforme "$1" "première ligne modifiée en" "$trans"
else
echo "la première ligne du fichier est "
echo $1
echo
echo "mais il faut que la première ligne du fichier"
echo "$fich_source"
echo "commence par un #"
echo "ajouter cette ligne de commentaire au début de ce fichier"
echo "arrêt du programme"
exit 0
fi #[[ -n $res ]]
}
function OK {
rep=""
while [[ $rep != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="cette partie de programme supprime des lignes supposées inutiles de grub
- paragraphes contenant ......$rech_dev.....$rech_dev........... AVANT la chaine $rech_class
- menuentry n'ayant pas des UUID égaux dans la ligne search et la ligne linux
(à partir de V34 les menuentry sur boot séparé sont conservés)
le programme demande le nom du fichier à traiter ..
en réel ce devrait être <partition>/boot/gub/grub.cfg
et créera un fichier grub-OK-date qui pourra être utilisé pour remplacer le fichier grub
il utilise aussi le label des partitions ou du fichier de référence
pour informer plus précisement la ligne menuentry de grub
on peut utiliser un fichier de référence uuid label (au format blkid)
remarque :pour des essais , on peut traiter n'importe quel fichier ayant un format grub
si le fichier à traiter n'est pas au format grub , il ne fonctionnera pas correctement
et en réel il serait préférable de lancer ce programme après avoir lancé un update-grub
trois fichiers peuvent être créés :
grub-OK-<aaaa:mm:dd-hh:mm:ss>.txt (le grub récupérable)
grub-sup-<aaaa:mm:dd-hh:mm:ss>.txt (les menuentry qui ont été supprimés)
grub-mod-<aaaa:mm:dd-hh:mm:ss>.txt (les lignes modifiées)
vous pourrez analyser ces fichiers pour voir ce qui s'est passé
avant de remplacer le fichier traité (surtout si c'est grub.cfg)
(en fin de traitement répondez alors non à la demande de remplacement
et faites le remplacement manuellement)
lors du traitement ..... (c'est uniquement une info visuelle)
les x qui défilent indiquent des lignes de menu qui seront supprimées
les c qui défilent indiquent les lignes de menu qui seront conservées
les . qui défilent indiquent les autres lignes (qui seront conservées)
un S indique un début de submenu
un M indique un début de menuentry
un m indique la suite de menuentry
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "utilisez seulement oOyYaA S.V.P." ;;
esac
done
}
function choix_fichier_blkid { # retourne 0 si fichier blkid choisi
fichier_source=""
titre="$0 Sélectionnez le fichier contenant UUID et LABEL des partitions"
fichier_source=`zenity --file-selection --title="$titre"`
case $? in #$? est le code de retour de zenity
0) blkid_choisi="$fichier_source" ;;
1) echo "Aucun fichier UUID-LABEL sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
}
function critere_suppression_2 { # se fait après une initialisation de menu[0 ...n]
##### attention les codes de retour ont changé
# 0 si ligne search et ligne linux et uuid égaux (menu conservé + label dans menu[0])
# 1 si pas de ligne search ou linux (menu conservé intégralement)
# ligne search et linux trouvées
# 3 aucun UUID trouvé dans fichier UUID-LABEL
# 2 si uuid différents (menu supprimé à revoir?)
uuid_search="x"
uuid_linux="y"
ligne_search=""
ligne_linux=""
# recherche dans le tableau menu[1..n] de la ligne search
#TEST
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
res=`grep "$chaine_search" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_search="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_search" ]]
then
return 1 # pas de chaine search => on conservera le menu intégralement
fi
# recherche dans le tableau menu[] de la ligne linux
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
tmp=`sed 's/[[:blank:]]//g' <<< "${menu[i]}"` #suppression des blank de menu
res=`grep "$chaine_linux" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_linux="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_linux" ]]
then
return 1 # pas de chaine linux => menu conservé sans modif
fi
#uuid ligne search présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_search
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_search"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_search=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# uuid ligne linux présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_linux
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_linux"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_linux=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# analyse des résultats
if [[ ${uuid_search}${uuid_linux} = "xy" ]]
then
return 3 # aucun des uuid n'a été trouvé dans blkid ( peuvent être égaux ou non )
fi
####################################################################################
# on peut avoir uuid_search uuid_linux
# x 1ea0.... : n'existe pas , existe : code retour 2
# a04f... y : existe , n'existe pas : code retour 2
# bcde... fghi.... : uuids existants et différents: code retour 2
# 1234... 1234.... : uuids existants et égaux : code retour 0
#####################################################################################
# si $uuid_search-$uuid_linux est dans UBoot on renvoie 4
# ce menu correspond à une partition avec boot séparée
for i in ${!UBoot[@]} # pour tous les indices 0..n
do
[[ $uuid_search-$uuid_linux = ${UBoot[$i]} ]] && return 4
done
if [[ "$uuid_search" != "$uuid_linux" ]]
then
return 2 # uuid différents on supprimera ce menu
else
return 0 # uuid egaux on conservera ce menu après modif de menu[0]
fi
} # fin function critere_suppression_2
function ajout_label_menuentry { # ajoute un label à menu[0] (search ou linux)
rech_uuid_label_menuentry "$1" # retour 0 si label trouvé , pas zéro sinon
code=$?
if [[ $code -eq 0 ]]
then # on a un label
tmp=${menu[0]}
# menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
menu[0]=`sed "s/menuentry '.* : /menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \" .*: /menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 2 ajout du nouveau en tête
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 3 suppression des doublons
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi #[[ $tmp != ${menu[0]} ]]
fi # [[ $code -eq 0 ]]
}
function memorise_menuentry { # mémorise menuentry de submenu pour écriture ultérieure
for p in ${!menu[@]} # pour tous les indices de menu[]
do
((i_s++))
ligne_sousmenu[i_s]=${menu[$p]} # mémorise menu[0 ..n]
((nb_lignes_menu_cons++)) # stat
done
}
function ecrire_lignes_memorisees { # écrit les lignes dans sauv
for p in ${!ligne_sousmenu[@]} # pour tous les indices de ligne_sousmenu[]
do
echo "${ligne_sousmenu[$p]}" >> "$fich_sauv" # écriture l_s[0..n]
((nb_lignes_cons++)) # stat
done
}
function traite_ligne_submenu { # reçoit $1 (ligne submenu '.......{
fin_submenu=1 # sera mise à 0 si un menuentry se termine par } }
submenu="$1" #mise en mémoire de cette ligne
# j'utilise la mémorisation label_submenu du label d'un menuentry précédent
if [[ -n $label_submenu ]]
then
# ajout du label et suppression double label
submenu=`sed "s/submenu '/submenu '${label_submenu} : /" <<< $submenu`
submenu=`sed "s/submenu \"/submenu \"${label_submenu} : /" <<< $submenu`
submenu=`sed "s/${label_submenu} *:* *${label_submenu}/${label_submenu}/" <<<$submenu`
fi
i_s=0
unset ligne_sousmenu
ligne_sousmenu[0]="$submenu" # mémorisation pour sortie finale
((nb_lignes_hors_menu++)) # ligne considérée comme hors menu
# lire les lignes qui suivent submenu jusquà trouver ligne ......} hors menuentry)
while read ligne
do
((nb_lignes_lues++))
# si on trouve .... } hors menuentry on est au bout du submenu
# il faut sauvegarder la ligne submenu , les lignes intermédiaires et menuentry
# je ne traite pas du cas où on trouverait une ligne menuentry terminée par } }
# V28 et suivante ce cas est traité
# une ligne menuentry terminée par } } provoque la fin du submenu ($fin_submenu 0)
# on sort de la boucle si on trouve } en fin de ligne hors menuentry
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # supprime les blancs de la ligne
if [[ "$tmp" =~ }$ || "$fin_submenu" = 0 ]] ### on est en fin de submenu ###
# pas tout à fait exact
# si on peut avoir { ...... } hors menuentry
then
((i_s++))
ligne_sousmenu[i_s]="$ligne" # mémoriser cette ligne
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
ecrire_lignes_memorisees # écriture de ces lignes de submenu
label_submenu=""
return # fin de traitement de submenu
fi # [[ "$tmp" =~ }$ ]]
# V28 élargissement aux blancs de grep après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
if [[ -n $mem ]]
then
res="" # si on trouve la chaine Memory pas intéressant on force res à vide
fi
if [[ -z $res ]]
then # ni menuentry ..{ ni memory ...{
((i_s++)) #
ligne_sousmenu[i_s]="$ligne" # mise en mémoire pour écriture ultérieure
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
else
lire_menuentry # menu[0..n] et ((nb_lignes_lues++))
trt_menu2 "${menu[0]}" # 1 si contient dev dev
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # 1 la ligne contient /dev /dev
then
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # suppression de ce menu
((nb_menu_sup++)) # stat
else # pas 1 : ne contient pas dev dev
critere_suppression_2
code_crit2=$? # 0 1 2 3
case $code_crit2 in
0) # les uuid sont égaux modifier menu[0]
ajout_label_menuentry "$chaine_search"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
1) # pas de search ni de linux on garde sans modif
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé (pas de ligne search ou linux)"
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents"
((nb_menu_sup++)) # stat non prévu
;;
3) # uuid non trouvé (search et linux existent)
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé : uuid (search ou linux) non trouvé"
((nb_menu_cons++)) # stat non prévu
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
# revoir pour le label
ajout_label_menuentry "$chaine_linux"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi # [[ -z $res ]]
done
# si on arrive ici il y a erreur de traitement quelque part
echo
echo " ligne bach $LINENO"
echo " erreur de format ? dans le fichier $fich_source !!!!!!!!!!"
echo " dernière ligne de menu lue :"
echo
echo ${menu[0]}
echo
echo " dernière ligne lue : $nb_lignes_lues"
echo " $ligne"
sleep 100
exit 0
}
function rech_uuid_label_ligne { # recherche uuid et label de $1 dans uuid[0..n]
# renvoie 0 uuid trouvé et label trouvé uuid_trouve=xxx label_trouve="yyy"
# renvoie 1 uuid trouvé et label vide uuid_trouve=xxx label_trouve=""
# renvoie 2 uuid non trouvé uuid_trouve="" label_trouve=""
uuid_trouve=""
label_trouve=""
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # uuid suivant
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< $1` # $1 est une ligne de menu
if [[ -n $res ]]
then
uuid_trouve=${uuid[$n]}
if [[ -n ${label[$n]} ]]
then
label_trouve=${label[$n]} # si label non vide positionne label_trouve
return 0 # uuid trouvé / label non vide trouvé
else
return 1 # uuid trouvé / label ""
fi
fi
fi
done
return 2 # uuid non trouvé
}
function rech_uuid_label_menuentry { # recherche uuid et label dans la ligne $1 de menu[1 ..n]
for p in ${!menu[@]} # pour tous les indices du tableau 0..n
do
[[ $p = 0 ]] && continue # mais pas dans menu[0]
res=`echo ${menu[$p]} | grep "$1"`
if [[ -n $res ]]
then
rech_uuid_label_ligne ${menu[$p]} # donne uuid_trouve / label_trouve
return $? # 0 uuid égaux
# 1 uuid trouvé , label vide
# 2 pas d'uuid dans search
fi
done
return 3 # pas de search trouvé , (donc pas d'uuid , et donc pas de label) !!!
}
function transforme_ligne_menuentry { # modifie la première ligne d'un menuentry conservé
# recherche l'UUID dans la ligne search --no-floppy --fs-uuid --set=root
# si trouvé , on récupère le label
# si label vide on ne fait rien
# sinon on rajoute avec : en tête après menuentry ' ou menuentry "
#
label_trouve=""
uuid_trouve=""
tmp=${menu[0]} # servira de test pour sortie si modifié
rech_uuid_label_menuentry "$1" # positionne le label à la bonne valeur
code=$? # retour de la fonction
case $code in
0) # UUID trouvé : $uuid_trouve LABEL trouvé : $label_trouve
if [[ $label_submenu = "" ]] # servira dans traitement d'un submenu éventuel
then # on memorise le premier label menuentry trouvé
label_submenu="$label_trouve"
fi
# menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
#suppression double labels dans cette ligne
# menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
# 2 ajout du nouveau
# 3 suppression des doublons
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
menu[0]=`sed "s/menuentry '.* : /menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \" .*: /menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 2 ajout du nouveau en tête
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 3 suppression des doublons
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then #TEST
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi
;;
1) # LABEL vide #TEST
sort_info_transforme "$tmp" "pas de label pour $uuid_trouve dans $blkid_choisi"
;;
2) #LABEL vide uuid non trouvé #TEST
sort_info_transforme "$tmp" "uuid de ligne search non trouvé dans $blkid_choisi"
;;
3) # pas de ligne search trouvée dans menuentry v
sort_info_transforme "$tmp" "ligne search non trouvée"
;;
*) # ???? #TEST
sort_info_transforme "$tmp" "code inconnu : $code"
;;
esac
return $code
}
function lire_menuentry { # met dans tableau menu[n] jusqu'à trouvé } seul sur la ligne
unset menu
i=0
menu[0]="$ligne" # menu[0] est la première ligne
echo -e "M\c" # trace début de menuentry
while read ligne # ligne suivante
do
((i++))
((nb_lignes_lues++))
menu[$i]="$ligne" # mémorisée dans menu [1 .. n]
echo -e "m\c" # trace écran
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # suppression des blancs pour test
if [[ "$tmp" =~ }}$ ]]
then
fin_submenu=0 # termine par } } fin de submenu !!!
fi
if [[ "$tmp" =~ }$ ]] # la ligne se termine par } ?
then
return # oui fin de menuentry
fi
# et si pas de ... } on ira jusqu'en fin de fichier !!!!
# c'est un critère de format de grub
done
}
function sort_menu_0 { # écrit menu[0..n] dans le fichier de sauvegarde
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sauv" # écriture menu[0..n]
((nb_lignes_cons++)) # stat
((nb_lignes_menu_cons++)) # stat
echo -e "c\c" # suivi écran
done
}
function sort_menu_1 { # écrit menu[0..n] dans le fichier suppression
#écriture des paramètres reçus dans fich_sup
echo "#########################" >> $fich_sup
for arg in "$@" # prends $1 $2 ... $n
do
echo $arg >> $fich_sup
#echo >> $fich_sup
done
# écriture du menu dans fichier sup
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sup" # écriture menu[0..n]
((nb_lignes_sup++)) # stat
echo -e "x\c" # suivi écran
done
}
function sort_info_transforme { # écrit les paramètres reçus fich_transforme
echo "#########################" >> $fich_transforme
for arg in "$@" # ( $1 $2 ... $n )
do
echo $arg >> $fich_transforme
#echo >> $fich_transforme
done
}
function trt_menu2 { # analyse le paramètre $1
# renvoie 1 si $1 contient plus d'une fois /dev/sd avant --class (suppresion)
# renvoie 0 sinon
IFS="$OLDIFS" # il faut l'espace comme délimiteur
tableau=($1) # mise en tableau de la ligne
IFS="~" # peut-être utile pour la suite ?
nbdevsd=0 # nombre de fois que l'on trouve /dev/sd (avant --class)
for n in ${!tableau[@]} # de 0 1 2 .... x
do
r_class=`echo ${tableau[$n]} | grep "$rech_class"` # test présence --class
if [[ -n $r_class ]] # --class ou pas ?
then
break # --class est trouvé, sort de la boucle for
else
r_dev=`echo ${tableau[$n]} | grep "$rech_dev"` # test présence /dev/sd
if [[ -n $r_dev ]]
then
((nbdevsd++)) # incrémente si on a /dev/sd
if [[ $nbdevsd -gt 1 ]] # si plus d une fois /dev/sd
then
return 1 # on sort en renvoyant 1
fi #[[ $nbdevsd -gt 1 ]]
fi #[[ -n $r_dev ]]
fi #[[ -n $r_class ]]
done
if [[ $nbdevsd -gt 1 ]] # test nombre
then
return 1 # 1 si plus d'une fois /dev/sd
else
return 0 # 0 sinon
fi
}
# début du programme ##################################################################################
######### variables ###################################
OLDIFS="$IFS" # sauvegarde IFS
rech_class="\-\-class" # jusqu'à trouver la chaine --class dans menuentry
rech_dev="\/dev\/sd" # la présence de la chaine /dev/sd dans menuentry
# ne pas modifier le nom des fichiers suivants
blkid="blkid-res.txt" # (fichier contenant le résultat de sudo blkid)
fich_fstab_conc="UBoot-UPart.txt" # créé par recup-fstab contient les uuid ayant boot séparé
blkid_choisi="" # fichier personnel choisi contenant dev-label-uuid
chaine_search="search \-\-no\-floppy \-\-fs\-uuid \-\-set=root"
# (un tiret doit être protégé par \ pour une recherche dans grep)
chaine_linux="linux.*\/vmlinu" # + général "linux......./vmlinu"
label_submenu="" # label valide du menuentry précédent
ZZZnum="ZZZnum" # le répertoire qui contiendra les fichiers temporaires xxxx-$num
prg="./recup_fstab_V5" # création de $fich_fstab_conc (UBoot_UPart.txt)
#########################################################
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
# ces 3 variables seront re-précisées en utilisant le nom complet du fichier grub traité
fich_sauv=""
fich_sup=""
fich_transforme=""
fich_source_0="$ZZZnum/tmp0-$num.txt" # lignes de 1 à 10_linux[
fich_source_1="$ZZZnum/tmp1-$num.txt" # lignes de [10_linux à 40_custom[
fich_source_2="$ZZZnum/tmp2-$num.txt" # lignes de [40_custom à la fin]
##### pour les stat #####################################
fich_stat="$ZZZnum/stat-$num.txt"
nb_menu_cons=0
nb_menu_boot_cons=0
nb_menu_sup=0
nb_menu_sans_uuid=0
nb_lignes_sup=0
nb_lignes_cons=0
nb_lignes_lues=0
nb_lignes_hors_menu=0
nb_lignes_menus_cons=0
#########################################################
! [[ -e "$ZZZnum" ]] && mkdir "$ZZZnum" # pourrait être mis plus loin
#si le programme n'existe pas on sort
# voir pour utiliser getopts
# deux façons de lancer ce programme
# - en terminal avec ou sans l'option --sansfstab
# - clic sur le fichier (sans l'option --sansfstab)
case "$1" in
--sansfstab )
echo "
Rappel :
un fichier à jour au format blkid
(dev - uuid - label éventuel)
est nécessaire au bon déroulement du programme
s'il y a des OS avec boot séparés
un fichier
$fich_fstab_conc à jour
est aussi nécessaire (il est créé par recup_fstab)
(ce fichier donne l'uuid de la partition de boot
associé à l'uuid de la partition système)
en cas de doute utilisez
$0 sans le paramètre --sansfstab
pour re-créer correctement ces fichiers
Taper sur Entrée pour continuer Ctrl C pour arrêter"
read g
code=0 ;;
* )
! [[ -e "$prg" ]] && echo "fichier $prg de récup. (fstab et blkid) manquant" && exit 0
echo "$0 lance le programme $prg"
./$prg "$ZZZnum"
code=$? ;;
esac
# echo "le code de retour est $code" ; exit 0
if [[ $code -ne 0 ]]
then
echo " il y a eu un problème de traitement du programme $prg"
echo " si l'arrêt n'est pas volontaire"
echo " vérifier que le répertoire /mnt/jpb ne comporte pas des résidus de fichiers"
echo " éventuellement faire le ménage dans ce répertoire"
read g
exit 0
fi
echo
echo "suite du programme $0"
echo ; echo
# pour les fichiers temporaires -$num
if ! [[ -e $fich_fstab_conc ]] # UBoot_UPart a normalement été créé par recup_fstab
then
echo "le fichier $fich_fstab_conc est introuvable"
echo "il faut d'abord exécuter $prg"
echo "ou mettre à disposition manuellement le fichier $fich_fstab_conc"
echo ; echo
exit 0
else
echo " vérification des uuid correspondants à des systèmes sur boot séparés"
echo
echo "###### contenu du fichier $fich_fstab_conc ############################"
cat $fich_fstab_conc
echo "#######################################################################"
echo
echo " vérifier visuellement le contenu des lignes comprises entre les ###"
echo " la première ligne est une ligne de commentaire"
echo " puis il existe deux lignes par couple"
echo " une ligne uuid1-uuid2"
echo " une ligne uuid2-uuid1"
echo
echo " tapez sur entrée pour continuer"
read g
fi
# lecture et mise en mémoire des infos donnée par le fichier $fich_fstab_conc ("UBoot_UPart.txt")
#################################################################################################
max_boot=-1
while read l_boot
do
[[ -z $l_boot ]] && echo "ligne vide je passe" && continue # si ligne vide ou commentée
[[ $l_boot =~ ^[[:blank:]]*# ]] && echo "ligne commentée $l_boot je passe" && continue
((max_boot++))
echo $l_boot
UBoot[$max_boot]=$l_boot # format uuid1-uuid2 à la suite
done < $fich_fstab_conc
#################################################################################################
OK # présentation du programme
code=1
while [[ $code = 1 ]]
do
rep=""
texte_supplementaire=""
if ! [[ -e "$blkid" ]]
then
texte_supplementaire="=====> !!!!! Attention ce fichier $blkid n'est pas présent !!!!!!"
fi
while [[ $rep != [oOyYaAcC] ]]
do
titre=" Utilisation des UUID et LABEL des partitions des disques"
texte=" Choix du fichier de références LABEL et UUID
répondez par
(oOyY) si vous voulez ré-utiliser le fichier $blkid
ce fichier a été créé précédemment par $prg
(contient les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés sur la partition)
$texte_supplementaire
(cC) permet de choisir un fichier de référence UUID LABEL
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés dans ce fichier de référence)
!!!!! toutes les partitions doivent être déclarée
le champ /dev/sdxx en premier
le champ LABEL="xxxxxx" non obligatoire (mais alors
le menu de GRUB ne sera pas modifié pour ce dev)
le champ UUID="xxxxxx" (OBLIGATOIRE pour un traitement correct)
le champ type TYPE="xxxxx" est conseillé
une ligne sera donc de la forme
/dev/sdxx LABEL=\"un label correct\" UUID=\"un uuid correct\" TYPE=\"le type correspondant\"
ce choix peut servir si vous ne voulez pas labelliser les
partitions mais mettre quand même un label dans grub
ou bien pour effectuer des essais
(ce choix un peu tordu est un peu difficile à comprendre ?)
!!!! en cas de doute utilisez le choix oOyY puis Valider
O pour réutilisation du fichier $blkid
C pour choisir un fichier de référence UUID LABEL personnel
A Arrêter"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) blkid_choisi="$blkid"; echo "utilisation du fichier créé précédemment)" ;;
[aA] ) echo "arrêt du programme" ; exit 0 ;;
[cC] ) echo "choix du fichier des uuid" ; choix_fichier_blkid ;;
* ) echo "utilisez seulement oO yY aA cC S.V.P." ;;
esac
done
# si le fichier de concordance n'existe pas sortie
if ! [[ -e "$blkid_choisi" ]]
then
echo ; echo
echo " $0 n'a pas trouvé le fichier"
echo " $blkid_choisi"
echo " que vous avez choisi comme référence UUID-LABEL"
echo " Modifier votre choix de fichier"
echo " ou bien mettez à disposition ce fichier pour continuer"
echo ; echo ; sleep 2
else
code=0
fi
done # sors de la boucle uniquement si code=0
# récupératon dev label UUID dans des tableaux
unset dev
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset btype #le type de la partition
unset bmont # point de montage à cause du boot séparé
############## récupération dev label uuid btype dans le fichier choisi ###################
maxuuid=-1
while read ligne
do
#TEST simplification par continue
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # supprime les : donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 0
dev[maxuuid]=$tmp #récupération du dev de la ligne
label[maxuuid]=""
uuid[maxuuid]=""
btype[maxuuid]=""
echo ${tableau[@]}
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done < $blkid_choisi
##############################################################################
if [[ "$blkid_choisi" != "$blkid" ]]
then
verifier_presence_dev # vérifie que tous les dev du fichier choisi sont bien déclarés
fi
###############################################################################
# sortie des uuid label pour info
[[ -e "tmp-u-l.txt" ]] && rm "tmp-u-l.txt"
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" && [[ -z "$aff_dev" ]] && aff_dev="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="___"
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="___"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="___"
# car si l'un des $ est "" , il y a erreur d'affichage
printf "%02s %-10s UUID %-36s LABEL: %-20s TYPE : %-10s\n" \
$p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp-u-l.txt
((p++))
done
titre="Affichage des concordances LABEL <=> UUID Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp-u-l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
[[ -e "tmp-u-l.txt" ]] && rm "tmp-u-l.txt" # supprime ce fichier devenu inutile
if [[ $code -ne 0 ]]
then
echo $code
exit 0 #sortie si on ne valide pas
else
echo $code
fi
################ début de traitement du fichier GRUB ###############################
# Quel fichier grub traiter ?
titre="$0 Sélectionnez le fichier GRUB à traiter"
fich_source=`zenity --file-selection --filename="../fichier-grub/*" --title="$titre"`
case $? in # $? est le code de retour de zenity
0) : ;;
1) echo "Aucun fichier sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
# $fich_source est de la forme /media/SH/grub/fichier-grub/grub-2UUID.cfg
# servira à préciser les fichiers grub-OK,grub-sup
precision=$(sed 's/\//-/g' <<< "$fich_source") # remplace les / par des -
# /media/SH/grub/fichier-grub/grub-2UUID.cfg
# precision devient -media-SH-grub-fichier-grub-grub-2UUID.cfg
fich_sauv="$ZZZnum/grub-OK-$num$precision.txt"
fich_sup="$ZZZnum/grub-sup-$num$precision.txt"
fich_transforme="$ZZZnum/grub-mod-$num$precision.txt"
#### lecture et traitement du fichier GRUB #######
trier_fichier # création des 3 fichiers de 1 à 10 linux 10 linux à 40 custom 40 custom à la fin
################# traitement jusqu'à 10_linux #####################
IFS="~"
prem=0
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]]
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
echo $ligne >> "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
fi
done < "$fich_source_0"
################# traitement de 10_linux à 40_custom
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]] # pourrait être supprimé depuis V34
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
# entre les crochets on a tab et espace élargisement après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
# res est vide s'il n'y a pas menuentry {
# mem est non vide si on a Memory test -ne pas traiter menuentry 'Memory test
if [[ -n $mem ]]
then # si Memory test on force res à vide
res=""
fi
if [[ -z $res ]]
then # pas menuentry
subm=`echo "$ligne" | grep "^[ ]*submenu.*{[ ]*$"`
if [[ -z $subm ]]
then # pas menuentry pas submenu
echo "$ligne" >> $fich_sauv # écriture de cette ligne dans sauv
((nb_lignes_cons++)) # stat
((nb_lignes_hors_menu++)) # stat
echo -e ".\c" # trace écran
else # contient submenu
echo -e "S\c" # trace
traite_ligne_submenu "$ligne" # traitement de submenu
fi
else # on a menuentry
lire_menuentry # mettre en mémoire dans menu[0..n]
trt_menu2 "${menu[0]}" # rem : 1 si /dev/sd /dev/sd
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # si 1 on supprime
then # le bloc menuentry contient /dev /dev
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # fich_sup
((nb_menu_sup++))
else # menuentry ne contient pas /dev/sd /dev/sd
critere_suppression_2 # analyse des uuid et recherche de label
code_crit2=$?
case $code_crit2 in
0) # les uuid sont égaux
transforme_ligne_menuentry "$chaine_search" # mettre un label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat
;;
1) # menu sans modif (ni search ni linux)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé (pas de ligne search ou linux)"
((nb_menu_cons++)) # stat
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents" # écrire dans fich_sup
((nb_menu_sup++)) # stat
;;
3) # uuid non trouvé (search et linux existent)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé : UUID search ou linux non trouvé dans $blkid_choisi"
((nb_menu_cons++)) # ce menu étant conservé
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
transforme_ligne_menuentry "$chaine_linux" # met label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi #[[ -z $res ]]
fi #[[ $prem -eq 0 ]]
done < "$fich_source_1"
echo $nb_lignes_lues
################# traitement 40_custom à fin #####################
if [[ -e "$fich_source_2" ]] # en cas d'essai sans ligne 40_custom
then
while read ligne
do
((nb_lignes_lues++))
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
echo $ligne >> "$fich_sauv"
done < "$fich_source_2"
fi
#################################################################
IFS="$OLDIFS"
echo "###################################################################" | tee -a "$fich_stat"
printf "%-40s %s\n" "fichier traité" " : " | tee -a "$fich_stat"
echo "$fich_source" | tee -a "$fich_stat"
printf "%-40s %s\n" "le résultat se trouve dans" " : " | tee -a "$fich_stat"
echo "$fich_sauv" | tee -a "$fich_stat"
echo | tee -a "$fich_stat"
printf "%-39s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup" | tee -a "$fich_stat"
if [[ $nb_lignes_sup -gt 0 ]]
then
printf "%-40s %s\n" "fichier des lignes supprimées" " : " | tee -a "$fich_stat"
echo "$fich_sup" | tee -a "$fich_stat"
echo | tee -a "$fich_stat"
fi
printf "%-40s %s %5d\n" "nombre de menus conservés" " : " "$nb_menu_cons" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "nombre de menus supprimés" " : " "$nb_menu_sup" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "nombre de menus avec boot conservés" " : " "$nb_menu_boot_cons" | tee -a "$fich_stat"
if [[ $nb_menu_sans_uuid -gt 0 ]]
then
printf "%-40s %s %5d\n" "nombre de menus sans uuid trouvé" " : " "$nb_menu_sans_uuid" | tee -a "$fich_stat"
fi
echo | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées (hors menu)" " : " "$nb_lignes_hors_menu" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées (menu)" " : " "$nb_lignes_menu_cons" | tee -a "$fich_stat"
echo "###################################################################" | tee -a "$fich_stat"
echo "après avoir vérifié manuellement le fichier"
echo "$fich_sauv"
echo "en réel vous pourrez remplacer grub.cfg à vos risques et périls"
echo | tee -a "$fich_stat"
texte_attention=""
if [[ $fich_source =~ /boot/grub/grub.cfg$ ]]
then
texte_attention_grub_reel="====> Attention vous avez choisi de traiter un fichier grub réel
/boot/grub sera remplacé par le fichier résultant ... prenez vos précautions
personnellement si je traite le fichier réel je réponds N
pour vérifier le contenu du fichier créé
puis j'effectue manuellement la copie"
fi
rep=""
while [[ $rep != [oOyYnN] ]]
do
################ mise à jour du fichier traité ou non ###########################
titre=" ################ remplacement de GRUB ###########"
texte="
Voulez-vous remplacer le fichier choisi
$fich_source
par le nouveau fichier généré
$fich_sauv
par précaution si vous répondez oui le fichier
$fich_source (fichier original choisi)
sera sauvegardé dans
$fich_source-$num
$fich_source
sera remplacé par le contenu du fichier
$fich_sauv (le résultat OK obtenu)
$texte_attention_grub_reel
répondez par (oOyYnN)"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) # sauvegarde de "grub" , je conserve $num
echo "
vous avez demandé le remplacement du fichier
OK mais avant je sauvegarde le fichier original
$fich_source
dans
$fich_source-$num
(mot de passe administrateur requis)
sudo cp "$fich_source" "$fich_source-$num""
sudo cp "$fich_source" "$fich_source-$num"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors de la sauvegarde du fichier
(code erreur : $code)"
suppression_fichiers_temporaires
echo "je sors"
exit 0
fi
#et fich_sauv remplace grub
echo "
OK je remplace
$fich_source
par
$fich_sauv
(mot de passe administrateur requis)
sudo mv "$fich_sauv" "$fich_source""
sudo mv "$fich_sauv" "$fich_source"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors du remplacement du fichier $fich_source
(code erreur : $code)"
suppression_fichiers_temporaires
echo "je sors"
exit 0
else
echo
echo "fichier $fich_source remplacé"
fi
;;
[nN] )
echo ; echo "fichier oiginal non remplacé"
echo " mais le fichier résultant"
echo " $fich_sauv"
echo " est à disposition"
;;
* ) echo "utilisez seulement oOyYnN S.V.P."
;;
esac
done
suppression_fichiers_temporaires
echo "taper entrée pour terminer"
read g #pour attendre
exit 0
EDIT : 2017-03-28 : modification de commentaires au début du fichier
Dernière modification par ar barzh paour (Le 22/04/2020, à 15:24)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#166 Le 23/03/2017, à 19:22
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
EDIT 2020-04-22 : pour la dernière version :voir
le fichier le fichier modif_grub_V46_bis post 178
https://forum.ubuntu-fr.org/viewtopic.p … #p22261874
le fichier recup_fstab_V8 post 179
https://forum.ubuntu-fr.org/viewtopic.p … #p22261876
fichier recup_fstab_V5 la dernière version est en post 173 (V7)
#!/bin/bash
# V1 récupère le contenu des fichiers fstab qui peuvent exister sur la machine
# comment ?
# récupération des dev présents par blkid
# création du fichier blkid-res.txt
# pour les partitions déjà montées (via mount)
# lecture et traitement de <partition>/etc/fstab
# et pour chacune des autres partitions
# montage
# lecture et traitement de <point de montage>/etc/fstab
# démontage
# le traitement consiste à écrire dans le fichier DevSd_UBoot_UPart.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSd="/dev/sdxx" UPart="uuid de la partition avec boot" UBoot="uuid du boot"
# le traitement consiste à écrire dans le fichier DevSd_Uboot_Upart-date.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSD="/dev/sdxx" UBoot="uuid du boot" UPart="uuid de la partition avec boot"
# V2 création fichier UBoot_UPart contenant les uuid d'un système avec boot séparé
# format uuid1-uuid2 et uuid2-uuid1 servira lors du traitement modif-grub
# V3 remise en forme
# V4 supprime aussi les fichiers inutiles
# les fichiers créés sont
# UBoot-Upart.txt blkid-res.txt
# et dans ZZZnum : UBoot_Upart-<date>.txt DevSd_UBoot_UPart-<date>.txt
# V5 pour des raisons d'affichage , les _ des noms de fichiers sont remplacés par des -
function OK {
# à cause de problème d'affichage
#declare ffich_fstab_conc=$(sed "s/[_ ]/*/g" <<< $fich_fstab_conc)
#declare fres_blkid=$(sed "s/[_ ]/*/g" <<< $res_blkid)
#declare ffich_fstab_long=$(sed "s/[_ ]/*/g" <<< $fich_fstab_long)
#declare ffich_recup=$(sed "s/[_ ]/*/g" <<< $fich_recup)
reponse=""
while [[ $reponse != [oOyYnN] ]]
do
titre="programme $0 /!\/!\/!\/!\ Répondez par : (oOyYnN)"
texte="
le but principal de ce sous programme est de créer le fichier
$fich_fstab_conc
qui contiendra les uuid des systèmes avec boot séparé
il met a disposition le fichier
$res_blkid
qui contient le résultat de la commande sudo blkid
il crée aussi (pour info d'analyse) le fichier
$fich_fstab_long
qui contient le fichier $fich_recup des partitions présentes
comment ?
- récupération des dev existants par sudo blkid
- pour les partitions déjà montées (via mount)
lecture et traitement de <partition>/etc/fstab
- pour chacune des partitions non montées (sauf ntfs , swap)
montage
lecture et traitement de <point de montage>$fich_recup
démontage
SOUS-PROGRAMME RECUP DE MODIF GRUB
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "utilisez seulement oOyYnN S.V.P." ;;
esac
done
}
function rech_uuid_dev { # si $1 est dans dev[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${dev[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function rech_uuid_label { # si $1 est dans label[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${label[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function ecrit_uuid1_uuid2 { # recoit $1 $2 sous la fore UUID= ou LABEL= ou /dev/sdxx
# écrit uuid1-uuid2 et uuid2-uuid1 dans $fich_fstab_conc
# en remplacant le label ou le /dev/sdxx par l'uuid correspondant
# et en enlevant UUID= et LABEL=
uuid1=""
uuid2=""
echo "fonction ecrit_uuid1_uuid2 $1 $2"
#pour le premier paramètre
debut=`echo "$1" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$1" # /dev/sdxx on recherche l'uuid correspondant
uuid1="$uuid"
;;
UUID\= )
uuid1=`echo "$1" | cut -c6-` # si UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$1" | cut -c7-` # si LABEL on prend ce qui se trouve après =
uuid1="$uuid" # et on recherche l'uuid correspondant
;;
esac
#même chose pour le deuxième paramètre
debut=`echo "$2" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$2" # /dev/sdxx on recherche l'uuid correspondant
uuid2="$uuid"
;;
UUID\= )
uuid2=`echo "$2" | cut -c6-` # UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$2" | cut -c7-` # LABEL on prend ce qui se trouve après =
uuid2="$uuid" # et on recherche l'uuid corespondant
;;
esac
if [[ -n $uuid1 ]] && [[ -n $uuid2 ]]
then
# on écrit les deux combinaisons possibles , plus simple à traiter ensuite
echo $uuid1-$uuid2 >> $fich_fstab_conc
echo $uuid2-$uuid1 >> $fich_fstab_conc
fi
echo "fin de fonction ecrit_uuid1 uuid2 =1=>$uuid1<=== =2=>$uuid2<==="
}
function ecrit_ligne_court { # ecrit $1 $2 $3 formatés dans un fichier
# et si $3 (UBoot) non vide
# uuid1-uuid2 dans UBoot_UPart
# printf "DevSd=%-18s UPart=%-36s UBoot=%-36s\n" "$1" "$2" "$3" >> $fich_fstab_court
if [[ -n "$3" ]] # si uboot non vide
then
ecrit_uuid1_uuid2 "$2" "$3" # envoie uuid de partition et uuid de boot
fi
}
function trans_ligne_fstab { # récupère les champs d'une ligne
# champ1 champ2 champn mais on ne s'intérese qu'aux champs 1 et 2
# champ1 : UUID=uuid ou LABEL=label ou le dev [non traités : PARTUUID= PARTLABEL=]
# champ2 : le point de montage
champ1=`echo "$1"|awk -F" " '{printf ("%s",$1)}'` # bloc spécial ou système de fichiers distant à monter
champ2=`echo "$1"|awk -F" " '{printf ("%s",$2)}'` # c'est le point de montage
case "$champ2" in
\/ )
dev_part=$champ1 # si champ2 est / on positionne dev_part sur champ1
;;
\/boot )
dev_boot=$champ1 # si champ2 est /boot on positionne dev_boot sur champ1
;;
esac
}
# début du programme
echo "début de programme $0 "
if [[ $# -eq 0 ]]
then
echo "sans le paramètre répertoire"
ZZZnum="ZZZnum"
else
echo "avec le paramètre répertoire $1"
ZZZnum="$1" # modif_grub doit envoyer ZZZnum
fi
echo "Répertoire : "$ZZZnum
! [[ -e "$ZZZnum" ]] && mkdir "$ZZZnum"
#########################################################################################
# variables
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
res_blkid="blkid-res.txt" # résultat de sudo blkid
fich_fstab_long="$ZZZnum/DevSd-UBoot-UPart-$num.txt" # résultant commenté
# fich_fstab_court="DevSd_UBoot_UPart.txt" # résultant court DevSd=...U1...U2
fich_fstab_conc="UBoot-UPart.txt" # résultant concaténé UUID1-UUID2
fich_fstab_conc_num="$ZZZnum/UBoot-UPart-$num.txt" # sauvegarde,à supprimer manuellement
rep_mnt=/mnt/jpb-$num # répertoire pour montages/démontages
fich_recup=/etc/fstab # fichier à récupérer dans part.
#########################################################################################
# [[ -e $fich_fstab_court ]] && rm $fich_fstab_court
OK # présentation du programme / sortie ou non
reponse=""
while [[ $reponse != [oOyYnNaAcC] ]]
do
titre="récupération des UUID et LABEL des partitions des disques"
texte="
Récupération des infos dans les fichiers $fich_recup des partitions
ce programme travaille avec sudo pour
récupérer les dev (blkid)
effectuer des montages/démontages
(mot de passe d'administration requis)
répondez par
(oOyY) pour lancer la commande sudo blkid ( remise à jour du fichier)
(aA) pour arrêter ce programme
O pour récupérer les devices via \"sudo blkid\"
A Arrêter
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) echo "sudo blkid" ; sudo blkid > $res_blkid ;;
[aA] ) echo "arrêt du programme" ; exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYaA S.V.P." ;;
esac
done
echo "# $num : couples uuid-boot - uuid-systeme des menuentry en boot séparé" > $fich_fstab_conc
# récupération des dev label et UUID
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset bmont # pour le point de montage à cause du boot séparé
unset btype # le type de la partition
maxuuid=-1
while read ligne # lecture et traitement du fichier généré par sudo blkid
do
# c'est le même script que dans modif-grub
# certaine lignes sont inutiles mais je les ai laissées
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
tableau=($ligne) # découper la ligne en champ
# le dev est le premier champ
tmp=`sed 's/://g' <<< ${tableau[0]}` # donne /dev/sdxx
[[ -z `grep "^\/dev" <<< $tmp` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 1
# init variables d'indice maxuuid
dev[maxuuid]=$tmp # le dev de la ligne blkid
label[maxuuid]="" # le label de la ligne blkid
uuid[maxuuid]="" # l'uuid de la ligne blkid
btype[maxuuid]="" # le type de la ligne blkid
mnt_dev[maxuuid]="1" # modifié par mount : 0 si le dev est monté
p_dev[maxuuid]="" # modifié par mount : point de montage
# echo ${tableau[@]} # liste des indices
# positionnemnt des variables d'indice maxuuid en fonction de la ligne blkid
for champ in ${tableau[@]}
do
deb=` echo $champ | cut -c1-5`
case $deb in
LABEL) # en enlevant les guillemets donne U16.04-b7
label[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
UUID\=) # en enlevant les guillemets donne c63335c7-b....2be94
uuid[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
;;
TYPE\=) # en enlevant les guillemets donne swap ntfs ext4 ....
btype[maxuuid]=`sed 's/"//g' <<< ${champ##*=}`
esac
done
done <$res_blkid
#récupération des partitions déjà montées
mount | grep '^\/dev' > tmp.txt
# 1 2 3 4 5 6
# /dev/sda11 on /media/SH type ext4 (rw,relatime,data=ordered)
# remarque :
# awk -F" " '{printf ("%s ",$1)}' tmp.txt
# donne
# tous les dev séparés par une espace grace à "%s "
# awk -F" " '{printf ("%s ",$3)}' tmp.txt
# donne
# tous les points de montage séparés par une espace grace à "%s "
mdev=(`awk -F" " '{printf ("%s ",$1)}' tmp.txt`) # les dev montés dans un tableau
mont=(`awk -F" " '{printf ("%s ",$3)}' tmp.txt`) # les points de montage dans un tableau
rm "tmp.txt"
# positionnement montée ou non de chaque dev
for i in ${!dev[@]} # pour tous les indices des dev
do
for j in ${!mdev[@]} # pour tous les indices des partitions montées
do
if [[ "${dev[$i]}" = "${mdev[$j]}" ]]
then
mnt_dev[i]="0" # 0 indique que le dev est montée
p_dev[i]=${mont[$j]} # le point de montage du dev
break
fi
done
done
# sortie des uuid label pour info
[[ -e "tmp_u_l.txt" ]] && rm "tmp_u_l.txt"
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" # jamais vide
aff_mnt_dev="${mnt_dev[$p]}" # vaut 0 (monté) ou 1 (non monté)
aff_p_dev="${p_dev[$p]}" # (affichage en fonction du précédent)
# pour les corrections d'affichage
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="_"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="_"
case $aff_mnt_dev in
0)
printf "%02s %-10s %-36s LABEL %-20s sur %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_p_dev $aff_btype | tee -a tmp_u_l.txt ;;
1)
printf "%02s %-10s %-36s LABEL %-20s TYPE : %-10s\n" $p $aff_dev $aff_uuid $aff_label $aff_btype | tee -a tmp_u_l.txt ;;
esac
((p++))
done
reponse=""
titre="concordances dev<=>LABEL<=>UUID<=>point de montage (de blkid) Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
[[ -e "tmp_u_l.txt" ]] && rm "tmp_u_l.txt" # supprime ce fichier devenu inutile
if [[ $code -eq 0 ]]
then
echo "OK je continue"
else
echo ; echo "Annulation demandée" ; echo ; exit 63
fi
##################################################
# pour cette partie il est absolument nécessaire d'avoir une liste des dev corrects
# d'où le sudo blkid effectué plus haut !
##################################################
echo "récupération des fstab de toutes les partitions" > $fich_fstab_long
echo >> $fich_fstab_long
############################################################
echo "pour les partitions déjà montées :" >> $fich_fstab_long
echo ${!dev[@]}
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]} ${mnt_dev[$i]}
[[ ${mnt_dev[$i]} = "1" ]] && continue # non monté suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
# on pourrait en ajouter d'autres
echo >> $fich_fstab_long
echo ${dev[$i]} "montée sur" ${p_dev[$i]} >> $fich_fstab_long
#pour chaque dev monté on récupére les infos de fstab
fich=${p_dev[$i]}$fich_recup
fich=`sed 's/\/\//\//g' <<< $fich` # supprime les doubles // (à cause de //etc/fstab)
echo $fich #soit /etc/fstab soit /xxx/xxx/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo "$fich de ${dev[$i]}" >> $fich_fstab_long
# on ne garde que les lignes non commentées et non vide
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
#si tmp n est pas vide , elle commence par #
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
done
echo >> $fich_fstab_long
##############################################################
echo "pour les partitions non montées :" >> $fich_fstab_long
if [[ -e "/mnt" ]]
then
echo "réperoire /mnt présent"
else
echo "le répertoire /mnt n'existe pas !!!"
exit 1
fi
rep_mnt_tmp="/mnt/jpb-$num"
echo "création du répertoire $rep_mnt_tmp pour monter les partitions"
sudo mkdir $rep_mnt_tmp
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]}
[[ ${mnt_dev[$i]} = "0" ]] && continue # montée suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
echo
echo "traitement de $i ${dev[$i]} (${btype[$i]})"
echo "montage de ${dev[$i]} sur $rep_mnt_tmp"
sudo mount ${dev[$i]} $rep_mnt_tmp
code=$?
echo "code de retour montage de ${dev[$i]} sur $rep_mnt_tmp : $code"
if [[ $code = 0 ]] # si le montage est réussi
#################### montage réussi ####################
then
fich=$rep_mnt_tmp/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo ${dev[$i]} montée sur $rep_mnt_tmp >> $fich_fstab_long
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
# si ne commence pas par # , tmp est vide
# et si la ligne n'est pas vide on l'écrit
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
# puis on le démonte avec boucle sinon le démontage ne se fait pas toujours
boucle=0
code=1
while [[ $code -ne 0 ]]
do
sudo umount "$rep_mnt_tmp"
code=$?
echo "boucle $boucle : ${dev[$i]} code de retour de umount $code"
if [[ $code = 0 ]]
then
echo
echo "boucle $boucle : ${dev[$i]} démontage effectué (code retour $code)"
ls -ails $rep_mnt_tmp
else
echo
echo "boucle $boucle : ${dev[$i]} non démonté (code retour $code)"
sleep 1 # attente en cas de non démontage
((boucle++))
if [[ $boucle -ge 10 ]]
then
echo "problème de démontage de ${dev[$i]}"
exit 1
fi
fi
done # boucle while
############################ échec de montage ###################
else
echo >> $fich_fstab_long
echo "impossible de monter ${dev[$i]} code echec de montage :$code" >> $fich_fstab_long
fi
done # boucle for i dev
echo ; echo
echo "fin de récupération des données de /etc/fstab des partitions présentes sur la machine"
echo ; echo
# sauvegarde de UBoot_UPart pour une utilisation personnelle
cp "$fich_fstab_conc" "$fich_fstab_conc_num"
echo "suppression du répertoire $rep_mnt_tmp en cours"
sudo rmdir $rep_mnt_tmp
code=$?
if [[ $code -ne 0 ]]
then
#rmdir: échec de suppression de '/mnt/jpb-2017:03:11-12:02:43': Périphérique ou ressource occupé
echo
ls -ails /mnt/jpb*
echo "vérifier le contenu du répertoire /mnt/jpb"
echo "faire le ménage dans ce répertoire"
exit 1
fi
echo "suppression réussie"
echo "fin normale du programme $0"
Dernière modification par ar barzh paour (Le 22/04/2020, à 15:25)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#167 Le 23/03/2017, à 19:24
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
fichier supZZZnum complètement indépendant mais ne traite que le sousrépertoire ZZZnum
#!/bin/bash
# extrait de modif_grub_V41 permet de supprimer les fichiers temporaires de ZZZnum
function confirmation_sortie {
declare titre="Sortie de $0"
declare ok="Confirmer la sortie"
declare texte="Pour Validez la sortie cliquer sur \"$ok\""
declare cancel="Abandonner la sortie"
if zenity --question --title "$titre" --text "$texte" \
--no-wrap --ok-label "$ok" --cancel-label "$cancel"
then
exit 63
fi
}
function suppression_fichiers_temporaires {
repertoire_a_vider="./$ZZZnum"
fich="/tmp/liste_fichier.txt" # contient la liste des fich. du rép. à supprimer
oklabel="Sortir si EXIT coché / Supprimer fichiers cochés sinon"
cancellabel="Re-cocher toutes les cases (sauf grub-OK)"
texte="
Des fichiers ont été créés lors de l'exécution du programme
modif_grub
ci dessous ces fichiers encore existants dans le répertoire
"$repertoire_a_vider"
Pour supprimer des fichiers
1- Décocher la case EXIT
2- Cochez le case des fichiers que vous voulez supprimer
3- Cliquer sur $oklabel
==> ce menu se relancera en indiquant
les fichiers encore existants
Pour SORTIR de ce menu une seule solution
Cochez la case EXIT puis cliquez sur \"$oklabel\"
pour Recocher la case de tous les fichiers (sauf grub-OK) cliquer sur
$cancellabel
"
while :
do
# listage des fichiers du répertoire
ls "$repertoire_a_vider" > "$fich" # ligne à supprimer en réel
liste_fichier="TRUE EXIT_(Sortir_du_menu)"
while read ligne
do # problème zenity ?
ligne=$(sed "s/ /*/g" <<< $ligne) # remplacer les espaces par *
case $ligne in
tmp[012][-_]20* | \
tmp[-_]u[-_]l* | \
tmp.txt | \
fich[-_]transforme-* | \
grub-mod* | \
stat-20* | \
DevSd[-_]UBoot* | \
grub-sup-20* | \
UBoot-UPart* )
liste_fichier="$liste_fichier TRUE $ligne"
;;
blkid-res.txt | \
grub-OK* )
liste_fichier="$liste_fichier FALSE $ligne"
;;
esac
done < "$fich"
#sélection des fichiers à supprimer
choix=`zenity --list \
--title="XXXXXXXXXXXXXXXXXXX : $0" \
--text="$texte" \
--checklist \
--cancel-label "$cancellabel" \
--ok-label "$oklabel" \
--height "750" \
--width "800" \
--column="CONS/SUP" --column="nom du(des) fichier(s) de $repertoire_a_vider" \
${liste_fichier} \
2>/dev/null ` # ne pas effacer cette ligne fin de choix
code=$?
echo "code de zenity $code"
if [[ $code == 0 ]] # code retour zenity (0=normal,sinon clic/x , Esc , )
then
[[ -n `echo $choix|grep "EXIT"` ]] && exit 0
if [[ -z $choix ]] # $choix est vide
then
echo "Aucun choix effectué"
continue # on recommence
else
echo "le choix est :"
echo "$choix"
IFS="|"
list=($choix)
echo "le 1er est ${list[0]}"
echo "le 2ème est ${list[1]}"
echo ${list[@]}
IFS="$OLDIFS"
if zenity --question --title "SUPPRESSION" \
--text "Suppression de ${#list[@]} fichiers" \
--no-wrap --ok-label "Confirmer Suppression" \
--cancel-label "Abandonner la Suppression"
then
for i in ${list[@]}
do
i=$(sed "s/*/ /g" <<< $i) #remettre espace à la place des *
echo "je supprime $repertoire_a_vider/$i"
rm "$repertoire_a_vider/$i"
done
fi
continue # on recommence
fi
else
[[ $code == 1 ]] && continue # on a cliqué sur Re-cocher
fi
confirmation_sortie
done
}
OLDIFS="$IFS" # ligne ajoutée 26-03-2017
ZZZnum="ZZZnum"
suppression_fichiers_temporaires
EDIT : 2017-03-26 il faut ajouter avant la ligne ZZZnum="ZZZnum" la ligne
OLDIFS="$IFS"
Dernière modification par ar barzh paour (Le 26/03/2017, à 10:47)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#168 Le 24/03/2017, à 17:41
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonjour.
Ok, merci, je vais tester çà ce soir à tête reposée.
Édit.
Çà fonctionne très bien. Bravo à toi!!!.
J'ai testé dans les Os de tests de la clé de tests, à partir de dossiers de tests, pour voir la réaction.
Çà supprime bien les fichiers de travail dans ZZZnum.
J'ai ensuite fais une copie du fichier grub.cfg de l'os par défaut qui démarre ma machine, Hybryde fusion 12.04, basée sur Ubuntu 12.04.5 avec un Grub version 1.98/99 .
Puis j'ai lancé le script sur le fichier original de cet Os.
Çà marche bien.
J'ai un menu Grub avec les label des partitions, pour celles qui en sont pourvues, suivit des noms d'Os que j'avais mis avec la modif de /etc/default/grub.
menuentry 's3-fusion-12-sys : HYBRYDE FUSION 12.04_PART7, avec Linux 3.13.0-68-generic'
s3-fusion12-sys : ==> le label de la partition.
HYBRYDE FUSION 12.04_PART7 ==> résulte de la modification de /etc/default/gub .
#GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_DISTRIBUTOR=`echo -n HYBRYDE FUSION 12.04_PART7`
blkid;
/dev/sda1: LABEL="XP-MAXTOR" UUID="B664A19764A16ABF" TYPE="ntfs" PARTUUID="00061a6b-01"
/dev/sdb1: LABEL="XP_SATA_1" UUID="E664A19764A16ACF" TYPE="ntfs" PARTUUID="635afe45-01"
/dev/sdb3: LABEL="xub-14-sata1-p3" UUID="c6432e46-4332-4a58-a9a3-5f14cf10cbe6" TYPE="ext4" PTTYPE="dos" PARTUUID="635afe45-03"
/dev/sdb5: LABEL="DONNEES_SATA_1_" UUID="07BCAE8F3189725B" TYPE="ntfs" PARTUUID="635afe45-05"
/dev/sdb6: LABEL="Natty-Wubi" UUID="04CCFBA34F6393FF" TYPE="ntfs" PARTUUID="635afe45-06"
/dev/sdb7: UUID="a88d28f8-c11b-47df-8915-90582136022f" TYPE="swap" PARTUUID="635afe45-07"
/dev/sdb8: LABEL="syst_clone" UUID="cb55ce42-5af5-4390-a732-e0cf9d6ca7cc" TYPE="ext4" PARTUUID="635afe45-08"
/dev/sdb9: LABEL="home_clone" UUID="52ed84e7-fd45-4ae2-9e7e-a77704656cde" TYPE="ext4" PARTUUID="635afe45-09"
/dev/sdb10: LABEL="sata1-ubun-14.10" UUID="385a39f1-1119-4251-af59-25d39d9d0c16" TYPE="ext4" PARTUUID="635afe45-0a"
/dev/sdb11: LABEL="sata1-fus12.04-s" UUID="f6f96e06-3927-427b-b9d6-673d83c5d3fd" TYPE="ext4" PARTUUID="635afe45-0b"
/dev/sdb12: LABEL="sata1-fus12.04-h" UUID="f2738d9d-35f4-4058-9a64-8c664a0797fa" TYPE="ext4" PARTUUID="635afe45-0c"
/dev/sdc1: LABEL="SATA" UUID="5BA987A83CA2C244" TYPE="ntfs" PARTUUID="c371aebc-01"
/dev/sdc5: LABEL="sa-xub-14.04-sys" UUID="8ca70b99-0ee2-4cf8-bcd4-be679cc13874" TYPE="ext4" PARTUUID="c371aebc-05"
/dev/sdc6: LABEL="sa-xub-14.04-hom" UUID="7c32b615-619a-4e6b-a553-2bc23baa0bdd" TYPE="ext4" PARTUUID="c371aebc-06"
/dev/sdc7: UUID="e0f5622f-05b0-4947-af79-df516d7ec146" TYPE="swap" PARTUUID="c371aebc-07"
/dev/sdd1: LABEL="SATA3-COPY-XP" UUID="F664A19764A16AFF" TYPE="ntfs" PARTUUID="b05fd78d-01"
/dev/sdd5: UUID="d3b7af4e-d1ea-4042-be93-6f01923525a7" TYPE="swap" PARTUUID="b05fd78d-05"
/dev/sdd6: LABEL="s3-fusion-12-sys" UUID="8463b60d-4533-46aa-9252-f971f91c6374" TYPE="ext4" PARTUUID="b05fd78d-06"
/dev/sdd7: LABEL="s3-fusion-12-hom" UUID="71f1b39f-4e1c-4c2e-9f1f-eda537f70175" TYPE="ext4" PARTUUID="b05fd78d-07"
/dev/sdd8: LABEL="s3-fusion14.04" UUID="df56cf2c-ed9a-42c8-b75d-241573c83b18" TYPE="ext4" PARTUUID="b05fd78d-08"
/dev/sdd9: LABEL="s3-lub-brd-14.04" UUID="6e521c54-1465-473c-83d1-d21e1eef8d13" TYPE="ext4" PARTUUID="b05fd78d-09"
/dev/sdd10: LABEL="s3-cust-14-k3.13" UUID="2037fb6e-f84e-4780-94be-695130953705" TYPE="ext4" PARTUUID="b05fd78d-0a"
/dev/sdd11: LABEL="s3-cust-14-k3.16" UUID="2705330d-f6d3-42f6-8ed0-7aada9d97f77" TYPE="ext4" PARTUUID="b05fd78d-0b"
/dev/sdd12: LABEL="s3-ubu-mate-14" UUID="79c2ca4d-f901-40b4-a0f5-310df6b2c500" TYPE="ext4" PARTUUID="b05fd78d-0c"
/dev/sdd13: LABEL="s3-ubu-14-64-bit" UUID="c0c9199b-1243-4732-8cdd-9d648aab9bd0" TYPE="ext4" PARTUUID="b05fd78d-0d"
/dev/sdd14: LABEL="s3-ubmate-test" UUID="7a0426e8-d49a-457b-98e5-915933e8cd4e" TYPE="ext4" PARTUUID="b05fd78d-0e"
/dev/sdd15: UUID="C756-871F" TYPE="vfat" PARTUUID="b05fd78d-0f"
/dev/sdd16: LABEL="s3-xubuntu-16.04" UUID="f7c9e82a-63f3-48d0-bf7b-c89523e9567b" TYPE="ext4" PARTUUID="b05fd78d-10"
/dev/sdd17: LABEL="s3-cust-14-k4.02" UUID="114427f0-540d-4c8e-845c-a4bd0194eef8" TYPE="ext4" PARTUUID="b05fd78d-11"
/dev/sdd18: LABEL="s3-ubu-mate16.04" UUID="974023be-3259-48fe-b5d0-83c09ab5c70f" TYPE="ext4" PARTUUID="b05fd78d-12"
/dev/sdd19: LABEL="s3-h-16-test-1" UUID="1889ff79-d79b-4987-b879-884729bc7a50" TYPE="ext4" PARTUUID="b05fd78d-13"
/dev/sdd20: LABEL="s3-hyb-xen-test" UUID="0992a423-57d5-44ba-8c51-96f35aff5a65" TYPE="ext4" PARTUUID="b05fd78d-14"
/dev/sdd21: LABEL="s3-h-16-test3-st" UUID="f6a1f56e-69a3-4e09-bae2-b9188e5bd173" TYPE="ext4" PARTUUID="b05fd78d-15"
/dev/sdd22: LABEL="s3-h-16-test3-ho" UUID="20ce4ce0-3dbb-4d59-91e5-e07e6e382f2d" TYPE="ext4" PARTUUID="b05fd78d-16"
/dev/sdd23: LABEL="s3-copy-xenial" UUID="d6ce05e1-3650-457c-b590-ebfc73873924" TYPE="ext4" PARTUUID="b05fd78d-17"
/dev/sdd24: LABEL="test" UUID="4892c119-02ba-425e-92b5-045d0d566f83" TYPE="ext4" PARTUUID="b05fd78d-18"
/dev/sdd25: UUID="f0ddebdf-f340-446e-89dc-81561b0967fb" TYPE="ext4" PARTUUID="b05fd78d-19"
/dev/sdd26: UUID="a4dece61-6d38-4c4b-919c-5cb446a37e73" TYPE="ext4" PARTUUID="b05fd78d-1a"
/dev/sdd27: LABEL="pour-systemback" UUID="ff750516-de8e-4982-88d1-dc04e751f250" TYPE="ext4" PARTUUID="b05fd78d-1b"
/dev/sdd28: LABEL="systemback-syst" UUID="b674232a-e4b7-4000-8bd5-3d5a53b49a4f" TYPE="ext4" PARTUUID="b05fd78d-1c"
/dev/sdd29: LABEL="systemback-home" UUID="a114d4fb-d5d2-4ffd-837b-d186a8a2ef3d" TYPE="ext4" PARTUUID="b05fd78d-1d"
/dev/sdd30: UUID="63b88532-fe8f-43ec-b30a-c6adb7f78e2e" TYPE="ext4" PARTUUID="b05fd78d-1e"
/dev/sdd31: LABEL="systemback-copy" UUID="7303f934-9558-471c-92ed-6e09b30098db" TYPE="ext4" PARTUUID="b05fd78d-1f"
/dev/sde1: LABEL="hyb-systemback" UUID="1aced9e1-d845-46bb-a6e2-448666be4a21" TYPE="ext4" PARTUUID="00006711-01"
/dev/sde2: UUID="5147bb57-b517-4a46-9344-c690575331e1" TYPE="swap" PARTUUID="00006711-02"
/dev/sde3: LABEL="SB@boot" UUID="13e83c99-8624-4136-a61d-10e67e670ba3" TYPE="ext4" PARTUUID="00006711-03"
/dev/sde4: LABEL="SB@" UUID="2ffbf271-02fa-4d6f-a8e6-dee7a63894e5" TYPE="ext4" PARTUUID="00006711-04"
Le menu grub de cet Os en 12.04.
bernard@bernard-System-Product-Name:~$ grep menuentry /media/bernard/s3-fusion-12-sys/boot/grub/grub.cfg
menuentry 's3-fusion-12-sys : HYBRYDE FUSION 12.04_PART7, avec Linux 3.13.0-68-generic' --class hybryde --class gnu-linux --class gnu --class os {
menuentry 's3-fusion-12-sys : HYBRYDE FUSION 12.04_PART7, with Linux 3.13.0-68-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os {
menuentry 's3-fusion-12-sys : HYBRYDE FUSION 12.04_PART7, avec Linux 3.13.0-62-generic' --class hybryde --class gnu-linux --class gnu --class os {
menuentry 's3-fusion-12-sys : HYBRYDE FUSION 12.04_PART7, with Linux 3.13.0-62-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {
menuentry "Start SATA1 GRUB4DOS Essayer-Installer des iso Linux lancees en live (on /dev/sda1)" --class windows --class os {
menuentry "sata1-ubun-14.10 : Ubuntu 14.10_PART10 GNU/Linux' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-385a39f1-1119-4251-af59-25d39d9d0c16 (on /dev/sda10)" --class gnu-linux --class gnu --class os {
menuentry "sata1-ubun-14.10 : Ubuntu 14.10_PART10 GNU/Linux, with Linux 3.16.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-24-generic-advanced-385a39f1-1119-4251-af59-25d39d9d0c16 (on /dev/sda10)" --class gnu-linux --class gnu --class os {
menuentry "sata1-ubun-14.10 : Ubuntu 14.10_PART10 GNU/Linux, with Linux 3.16.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-24-generic-recovery-385a39f1-1119-4251-af59-25d39d9d0c16 (on /dev/sda10)" --class gnu-linux --class gnu --class os {
menuentry "sata1-ubun-14.10 : Ubuntu 14.10_PART10 GNU/Linux, with Linux 3.16.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-23-generic-advanced-385a39f1-1119-4251-af59-25d39d9d0c16 (on /dev/sda10)" --class gnu-linux --class gnu --class os {
menuentry "sata1-ubun-14.10 : Ubuntu 14.10_PART10 GNU/Linux, with Linux 3.16.0-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-23-generic-recovery-385a39f1-1119-4251-af59-25d39d9d0c16 (on /dev/sda10)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.5.0-26-generic (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.5.0-26-generic (mode de dépannage) (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.2.0-39-generic (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.2.0-39-generic (mode de dépannage) (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.2.0-24-generic (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "sata1-fus12.04-s : HYBRYDE FUSION 12.04_SATA1-PART11, avec Linux 3.2.0-24-generic (mode de dépannage) (on /dev/sda11)" --class gnu-linux --class gnu --class os {
menuentry "xub-14-sata1-p3 : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c6432e46-4332-4a58-a9a3-5f14cf10cbe6 (on /dev/sda3)" --class gnu-linux --class gnu --class os {
menuentry "xub-14-sata1-p3 : Ubuntu, with Linux 3.13.0-32-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-32-generic-advanced-c6432e46-4332-4a58-a9a3-5f14cf10cbe6 (on /dev/sda3)" --class gnu-linux --class gnu --class os {
menuentry "xub-14-sata1-p3 : Ubuntu, with Linux 3.13.0-32-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-32-generic-recovery-c6432e46-4332-4a58-a9a3-5f14cf10cbe6 (on /dev/sda3)" --class gnu-linux --class gnu --class os {
menuentry "syst_clone : Ubuntu, avec Linux 2.6.32-41-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os {
menuentry "syst_clone : Ubuntu, avec Linux 2.6.32-41-generic (mode de dépannage) (on /dev/sda8)" --class gnu-linux --class gnu --class os {
menuentry "syst_clone : Ubuntu, avec Linux 2.6.32-21-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os {
menuentry "syst_clone : Ubuntu, avec Linux 2.6.32-21-generic (mode de dépannage) (on /dev/sda8)" --class gnu-linux --class gnu --class os {
menuentry "sa-xub-14.04-sys : PT-Xubuntu-14.04 GNU/Linux' --class pt_xubuntu_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-8ca70b99-0ee2-4cf8-bcd4-be679cc13874 (on /dev/sdb5)" --class gnu-linux --class gnu --class os {
menuentry "sa-xub-14.04-sys : PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-112-generic' --class pt_xubuntu_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-advanced-8ca70b99-0ee2-4cf8-bcd4-be679cc13874 (on /dev/sdb5)" --class gnu-linux --class gnu --class os {
menuentry "sa-xub-14.04-sys : PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-112-generic (recovery mode)' --class pt_xubuntu_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-recovery-8ca70b99-0ee2-4cf8-bcd4-be679cc13874 (on /dev/sdb5)" --class gnu-linux --class gnu --class os {
menuentry "sa-xub-14.04-sys : PT-Xubuntu-14.04 GNU/Linux, avec Linux 3.13.0-110-generic' --class pt_xubuntu_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-advanced-8ca70b99-0ee2-4cf8-bcd4-be679cc13874 (on /dev/sdb5)" --class gnu-linux --class gnu --class os {
menuentry "sa-xub-14.04-sys : PT-Xubuntu-14.04 GNU/Linux, with Linux 3.13.0-110-generic (recovery mode)' --class pt_xubuntu_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-recovery-8ca70b99-0ee2-4cf8-bcd4-be679cc13874 (on /dev/sdb5)" --class gnu-linux --class gnu --class os {
menuentry "Microsoft Windows XP Professionnel (on /dev/sdc1)" --class windows --class os {
menuentry "s3-cust-14-k3.13 : HYBRYDE FUSION Custom-rem-14.04-part12 GNU/Linux' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2037fb6e-f84e-4780-94be-695130953705 (on /dev/sdc10)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.13 : HYBRYDE FUSION Custom-rem-14.04-part12 GNU/Linux, avec Linux 3.13.0-96-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-96-generic-advanced-2037fb6e-f84e-4780-94be-695130953705 (on /dev/sdc10)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.13 : HYBRYDE FUSION Custom-rem-14.04-part12 GNU/Linux, with Linux 3.13.0-96-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-96-generic-recovery-2037fb6e-f84e-4780-94be-695130953705 (on /dev/sdc10)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.16 : HYBRYDE FUSION 14.04-part14 GNU/Linux' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2705330d-f6d3-42f6-8ed0-7aada9d97f77 (on /dev/sdc11)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.16 : HYBRYDE FUSION 14.04-part14 GNU/Linux, avec Linux 3.16.0-53-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-53-generic-advanced-2705330d-f6d3-42f6-8ed0-7aada9d97f77 (on /dev/sdc11)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.16 : HYBRYDE FUSION 14.04-part14 GNU/Linux, with Linux 3.16.0-53-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-53-generic-recovery-2705330d-f6d3-42f6-8ed0-7aada9d97f77 (on /dev/sdc11)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.16 : HYBRYDE FUSION 14.04-part14 GNU/Linux, avec Linux 3.16.0-51-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-51-generic-advanced-2705330d-f6d3-42f6-8ed0-7aada9d97f77 (on /dev/sdc11)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k3.16 : HYBRYDE FUSION 14.04-part14 GNU/Linux, with Linux 3.16.0-51-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-51-generic-recovery-2705330d-f6d3-42f6-8ed0-7aada9d97f77 (on /dev/sdc11)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate-14 : PT-UBUNTU-MATE 14.04 GNU/Linux' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-79c2ca4d-f901-40b4-a0f5-310df6b2c500 (on /dev/sdc12)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate-14 : PT-UBUNTU-MATE 14.04 GNU/Linux, avec Linux 4.4.0-47-generic' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-47-generic-advanced-79c2ca4d-f901-40b4-a0f5-310df6b2c500 (on /dev/sdc12)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate-14 : PT-UBUNTU-MATE 14.04 GNU/Linux, with Linux 4.4.0-47-generic (recovery mode)' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-47-generic-recovery-79c2ca4d-f901-40b4-a0f5-310df6b2c500 (on /dev/sdc12)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate-14 : PT-UBUNTU-MATE 14.04 GNU/Linux, avec Linux 4.4.0-45-generic' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-advanced-79c2ca4d-f901-40b4-a0f5-310df6b2c500 (on /dev/sdc12)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate-14 : PT-UBUNTU-MATE 14.04 GNU/Linux, with Linux 4.4.0-45-generic (recovery mode)' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-recovery-79c2ca4d-f901-40b4-a0f5-310df6b2c500 (on /dev/sdc12)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-14-64-bit : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c0c9199b-1243-4732-8cdd-9d648aab9bd0 (on /dev/sdc13)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-14-64-bit : Ubuntu, avec Linux 3.16.0-76-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-76-generic-advanced-c0c9199b-1243-4732-8cdd-9d648aab9bd0 (on /dev/sdc13)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-14-64-bit : Ubuntu, with Linux 3.16.0-76-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-76-generic-recovery-c0c9199b-1243-4732-8cdd-9d648aab9bd0 (on /dev/sdc13)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-14-64-bit : Ubuntu, avec Linux 3.16.0-49-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-49-generic-advanced-c0c9199b-1243-4732-8cdd-9d648aab9bd0 (on /dev/sdc13)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-14-64-bit : Ubuntu, with Linux 3.16.0-49-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-49-generic-recovery-c0c9199b-1243-4732-8cdd-9d648aab9bd0 (on /dev/sdc13)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubmate-test : UBUNTU-MATE 14.04 GNU/Linux' --class ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7a0426e8-d49a-457b-98e5-915933e8cd4e (on /dev/sdc14)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubmate-test : UBUNTU-MATE 14.04 GNU/Linux, avec Linux 3.16.0-53-generic' --class ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-53-generic-advanced-7a0426e8-d49a-457b-98e5-915933e8cd4e (on /dev/sdc14)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubmate-test : UBUNTU-MATE 14.04 GNU/Linux, with Linux 3.16.0-53-generic (recovery mode)' --class ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-53-generic-recovery-7a0426e8-d49a-457b-98e5-915933e8cd4e (on /dev/sdc14)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubmate-test : UBUNTU-MATE 14.04 GNU/Linux, avec Linux 3.16.0-51-generic' --class ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-51-generic-advanced-7a0426e8-d49a-457b-98e5-915933e8cd4e (on /dev/sdc14)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubmate-test : UBUNTU-MATE 14.04 GNU/Linux, with Linux 3.16.0-51-generic (recovery mode)' --class ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-51-generic-recovery-7a0426e8-d49a-457b-98e5-915933e8cd4e (on /dev/sdc14)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, avec Linux 4.4.0-66-generic' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-advanced-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, with Linux 4.4.0-66-generic (upstart)' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-init-upstart-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, with Linux 4.4.0-66-generic (recovery mode)' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-recovery-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, avec Linux 4.4.0-64-generic' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-advanced-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, with Linux 4.4.0-64-generic (upstart)' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-init-upstart-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-xubuntu-16.04 : PT-Xubuntu-16.04 GNU/Linux, with Linux 4.4.0-64-generic (recovery mode)' --class pt_xubuntu_16_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-recovery-f7c9e82a-63f3-48d0-bf7b-c89523e9567b (on /dev/sdc16)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k4.02 : HYBRYDE FUSION 14.04_kernel-4.2.0xx_part17 GNU/Linux' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-114427f0-540d-4c8e-845c-a4bd0194eef8 (on /dev/sdc17)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k4.02 : HYBRYDE FUSION 14.04_kernel-4.2.0xx_part17 GNU/Linux, avec Linux 4.2.0-35-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.2.0-35-generic-advanced-114427f0-540d-4c8e-845c-a4bd0194eef8 (on /dev/sdc17)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k4.02 : HYBRYDE FUSION 14.04_kernel-4.2.0xx_part17 GNU/Linux, with Linux 4.2.0-35-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.2.0-35-generic-recovery-114427f0-540d-4c8e-845c-a4bd0194eef8 (on /dev/sdc17)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k4.02 : HYBRYDE FUSION 14.04_kernel-4.2.0xx_part17 GNU/Linux, avec Linux 3.16.0-70-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-70-generic-advanced-114427f0-540d-4c8e-845c-a4bd0194eef8 (on /dev/sdc17)" --class gnu-linux --class gnu --class os {
menuentry "s3-cust-14-k4.02 : HYBRYDE FUSION 14.04_kernel-4.2.0xx_part17 GNU/Linux, with Linux 3.16.0-70-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-70-generic-recovery-114427f0-540d-4c8e-845c-a4bd0194eef8 (on /dev/sdc17)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate16.04 : PT-UBUNTU-MATE XENIAL GNU/Linux' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-974023be-3259-48fe-b5d0-83c09ab5c70f (on /dev/sdc18)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate16.04 : PT-UBUNTU-MATE XENIAL GNU/Linux, avec Linux 4.4.0-66-generic' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-advanced-974023be-3259-48fe-b5d0-83c09ab5c70f (on /dev/sdc18)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate16.04 : PT-UBUNTU-MATE XENIAL GNU/Linux, with Linux 4.4.0-66-generic (recovery mode)' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-recovery-974023be-3259-48fe-b5d0-83c09ab5c70f (on /dev/sdc18)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate16.04 : PT-UBUNTU-MATE XENIAL GNU/Linux, avec Linux 4.4.0-64-generic' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-advanced-974023be-3259-48fe-b5d0-83c09ab5c70f (on /dev/sdc18)" --class gnu-linux --class gnu --class os {
menuentry "s3-ubu-mate16.04 : PT-UBUNTU-MATE XENIAL GNU/Linux, with Linux 4.4.0-64-generic (recovery mode)' --class pt_ubuntu_mate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-recovery-974023be-3259-48fe-b5d0-83c09ab5c70f (on /dev/sdc18)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, avec Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, with Linux 4.4.0-21-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, with Linux 4.4.0-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, avec Linux 3.2.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-advanced-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, with Linux 3.2.0-24-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-init-upstart-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test-1 : Ubuntu, with Linux 3.2.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-recovery-1889ff79-d79b-4987-b879-884729bc7a50 (on /dev/sdc19)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, avec Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, with Linux 4.4.0-21-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, with Linux 4.4.0-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, avec Linux 3.2.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-advanced-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, with Linux 3.2.0-24-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-init-upstart-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-hyb-xen-test : Ubuntu, with Linux 3.2.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-recovery-0992a423-57d5-44ba-8c51-96f35aff5a65 (on /dev/sdc20)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, avec Linux 4.4.0-21-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, with Linux 4.4.0-21-generic (upstart)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, with Linux 4.4.0-21-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, avec Linux 3.2.0-24-generic' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-advanced-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, with Linux 3.2.0-24-generic (upstart)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-init-upstart-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-h-16-test3-st : HYBRYDE FUSION 16.04_PART21-test GNU/Linux, with Linux 3.2.0-24-generic (recovery mode)' --class hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.2.0-24-generic-recovery-f6a1f56e-69a3-4e09-bae2-b9188e5bd173 (on /dev/sdc21)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, avec Linux 4.4.0-47-generic' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-47-generic-advanced-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, with Linux 4.4.0-47-generic (upstart)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-47-generic-init-upstart-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, with Linux 4.4.0-47-generic (recovery mode)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-47-generic-recovery-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, avec Linux 4.4.0-34-generic' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-advanced-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, with Linux 4.4.0-34-generic (upstart)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-init-upstart-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "s3-copy-xenial : PT-SATA3 COPY XENIAL-16.04_PART23 GNU/Linux, with Linux 4.4.0-34-generic (recovery mode)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-recovery-d6ce05e1-3650-457c-b590-ebfc73873924 (on /dev/sdc23)" --class gnu-linux --class gnu --class os {
menuentry "test : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-4892c119-02ba-425e-92b5-045d0d566f83 (on /dev/sdc24)" --class gnu-linux --class gnu --class os {
menuentry "test : Ubuntu, avec Linux 3.13.0-76-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-76-generic-advanced-4892c119-02ba-425e-92b5-045d0d566f83 (on /dev/sdc24)" --class gnu-linux --class gnu --class os {
menuentry "test : Ubuntu, with Linux 3.13.0-76-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-76-generic-recovery-4892c119-02ba-425e-92b5-045d0d566f83 (on /dev/sdc24)" --class gnu-linux --class gnu --class os {
menuentry "test : Ubuntu, avec Linux 3.13.0-68-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-68-generic-advanced-4892c119-02ba-425e-92b5-045d0d566f83 (on /dev/sdc24)" --class gnu-linux --class gnu --class os {
menuentry "test : Ubuntu, with Linux 3.13.0-68-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-68-generic-recovery-4892c119-02ba-425e-92b5-045d0d566f83 (on /dev/sdc24)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, avec Linux 4.4.0-31-generic' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-advanced-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-31-generic (upstart)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-init-upstart-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-31-generic (recovery mode)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-recovery-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, avec Linux 4.4.0-24-generic' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-24-generic-advanced-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-24-generic (upstart)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-24-generic-init-upstart-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-24-generic (recovery mode)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-24-generic-recovery-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, avec Linux 4.4.0-22-generic' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-22-generic-advanced-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-22-generic (upstart)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-22-generic-init-upstart-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "PT-TEST-XENIAL-16.04_64 bits_PART26 GNU/Linux, with Linux 4.4.0-22-generic (recovery mode)' --class pt_test_xenial_16_04_64 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-22-generic-recovery-a4dece61-6d38-4c4b-919c-5cb446a37e73 (on /dev/sdc26)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, avec Linux 4.4.0-45-generic' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-advanced-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, with Linux 4.4.0-45-generic (upstart)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-init-upstart-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, with Linux 4.4.0-45-generic (recovery mode)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-recovery-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, avec Linux 4.4.0-34-generic' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-advanced-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, with Linux 4.4.0-34-generic (upstart)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-init-upstart-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "systemback-syst : PT-SATA3 SYSTEMBACK COPY2 XENIAL-16.04_PART28 GNU/Linux, with Linux 4.4.0-34-generic (recovery mode)' --class pt_sata3 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-recovery-b674232a-e4b7-4000-8bd5-3d5a53b49a4f (on /dev/sdc28)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, avec Linux 4.4.0-36-generic' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-36-generic-advanced-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, with Linux 4.4.0-36-generic (recovery mode)' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-36-generic-recovery-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, avec Linux 4.4.0-34-generic' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-advanced-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, with Linux 4.4.0-34-generic (recovery mode)' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-recovery-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, avec Linux 4.4.0-31-generic' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-advanced-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "UBUNTU-GNOME_16.04.1-AMD64_PART30 GNU/Linux, with Linux 4.4.0-31-generic (recovery mode)' --class ubuntu_gnome_16_04_1_amd64_part30 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-recovery-63b88532-fe8f-43ec-b30a-c6adb7f78e2e (on /dev/sdc30)" --class gnu-linux --class gnu --class os {
menuentry "systemback-copy : UBUNTU-GNOME_16.04.1-AMD64_PART31 GNU/Linux' --class ubuntu_gnome_16_04_1_amd64_part31 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7303f934-9558-471c-92ed-6e09b30098db (on /dev/sdc31)" --class gnu-linux --class gnu --class os {
menuentry "systemback-copy : UBUNTU-GNOME_16.04.1-AMD64_PART31 GNU/Linux, avec Linux 4.4.0-34-generic' --class ubuntu_gnome_16_04_1_amd64_part31 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-advanced-7303f934-9558-471c-92ed-6e09b30098db (on /dev/sdc31)" --class gnu-linux --class gnu --class os {
menuentry "systemback-copy : UBUNTU-GNOME_16.04.1-AMD64_PART31 GNU/Linux, with Linux 4.4.0-34-generic (recovery mode)' --class ubuntu_gnome_16_04_1_amd64_part31 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-34-generic-recovery-7303f934-9558-471c-92ed-6e09b30098db (on /dev/sdc31)" --class gnu-linux --class gnu --class os {
menuentry "systemback-copy : UBUNTU-GNOME_16.04.1-AMD64_PART31 GNU/Linux, avec Linux 4.4.0-31-generic' --class ubuntu_gnome_16_04_1_amd64_part31 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-advanced-7303f934-9558-471c-92ed-6e09b30098db (on /dev/sdc31)" --class gnu-linux --class gnu --class os {
menuentry "systemback-copy : UBUNTU-GNOME_16.04.1-AMD64_PART31 GNU/Linux, with Linux 4.4.0-31-generic (recovery mode)' --class ubuntu_gnome_16_04_1_amd64_part31 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-31-generic-recovery-7303f934-9558-471c-92ed-6e09b30098db (on /dev/sdc31)" --class gnu-linux --class gnu --class os {
menuentry "s3-fusion14.04 : PT-HYBRYDE FUSION 14.04_Massy GNU/Linux' --class pt_hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-df56cf2c-ed9a-42c8-b75d-241573c83b18 (on /dev/sdc8)" --class gnu-linux --class gnu --class os {
menuentry "s3-fusion14.04 : PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-112-generic' --class pt_hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-advanced-df56cf2c-ed9a-42c8-b75d-241573c83b18 (on /dev/sdc8)" --class gnu-linux --class gnu --class os {
menuentry "s3-fusion14.04 : PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-112-generic (recovery mode)' --class pt_hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-recovery-df56cf2c-ed9a-42c8-b75d-241573c83b18 (on /dev/sdc8)" --class gnu-linux --class gnu --class os {
menuentry "s3-fusion14.04 : PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, avec Linux 3.13.0-110-generic' --class pt_hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-advanced-df56cf2c-ed9a-42c8-b75d-241573c83b18 (on /dev/sdc8)" --class gnu-linux --class gnu --class os {
menuentry "s3-fusion14.04 : PT-HYBRYDE FUSION 14.04_Massy GNU/Linux, with Linux 3.13.0-110-generic (recovery mode)' --class pt_hybryde --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-recovery-df56cf2c-ed9a-42c8-b75d-241573c83b18 (on /dev/sdc8)" --class gnu-linux --class gnu --class os {
menuentry "s3-lub-brd-14.04 : PT-Lubuntu-BRD-14.04 GNU/Linux' --class pt_lubuntu_brd_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6e521c54-1465-473c-83d1-d21e1eef8d13 (on /dev/sdc9)" --class gnu-linux --class gnu --class os {
menuentry "s3-lub-brd-14.04 : PT-Lubuntu-BRD-14.04 GNU/Linux, avec Linux 3.13.0-112-generic' --class pt_lubuntu_brd_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-advanced-6e521c54-1465-473c-83d1-d21e1eef8d13 (on /dev/sdc9)" --class gnu-linux --class gnu --class os {
menuentry "s3-lub-brd-14.04 : PT-Lubuntu-BRD-14.04 GNU/Linux, with Linux 3.13.0-112-generic (recovery mode)' --class pt_lubuntu_brd_14_04 --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-recovery-6e521c54-1465-473c-83d1-d21e1eef8d13 (on /dev/sdc9)" --class gnu-linux --class gnu --class os {
menuentry "Start Maxtor GRUB4DOS Essayer-Installer des iso Linux lancees en live (on /dev/sdd1)" --class windows --class os {
menuentry "hyb-systemback : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1aced9e1-d845-46bb-a6e2-448666be4a21 (on /dev/sde1)" --class gnu-linux --class gnu --class os {
menuentry "hyb-systemback : Ubuntu, avec Linux 3.13.0-112-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-advanced-1aced9e1-d845-46bb-a6e2-448666be4a21 (on /dev/sde1)" --class gnu-linux --class gnu --class os {
menuentry "hyb-systemback : Ubuntu, with Linux 3.13.0-112-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-112-generic-recovery-1aced9e1-d845-46bb-a6e2-448666be4a21 (on /dev/sde1)" --class gnu-linux --class gnu --class os {
menuentry "hyb-systemback : Ubuntu, avec Linux 3.13.0-110-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-advanced-1aced9e1-d845-46bb-a6e2-448666be4a21 (on /dev/sde1)" --class gnu-linux --class gnu --class os {
menuentry "hyb-systemback : Ubuntu, with Linux 3.13.0-110-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-110-generic-recovery-1aced9e1-d845-46bb-a6e2-448666be4a21 (on /dev/sde1)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, avec Linux 4.4.0-67-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-67-generic-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, with Linux 4.4.0-67-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-67-generic-recovery-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, avec Linux 4.4.0-66-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, with Linux 4.4.0-66-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-66-generic-recovery-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, avec Linux 4.4.0-64-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-advanced-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
menuentry "SB@ : Ubuntu, with Linux 4.4.0-64-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-64-generic-recovery-2ffbf271-02fa-4d6f-a8e6-dee7a63894e5 (on /dev/sde4)" --class gnu-linux --class gnu --class os {
# ce qui suit, est dans 40_custom
menuentry "systemback-test-04-par-mont-en-plus" {
menuentry "systemback-test-sans-conversion" {
menuentry "Iso Live ubuntu-16.04.1-desktop-i386.iso test encours-stockage iso dans ISO_LINUX Donnees SATA1" {
menuentry "Iso Live ubuntu-16.04.1-desktop-amd64.iso test encours-stockage iso dans ISO_LINUX Donnees SATA1" {
menuentry "Iso Live xubuntu-12.04.4-desktop-amd64.iso test encours-stockage iso dans s3fusion-12-sys sata3" {
menuentry "Iso Live xubuntu-12.04.4-desktop-amd64.iso test encours-stockage iso dans ISO_LINUX Donnees SATA1" {
menuentry "Iso Live xubuntu-12.04.4-desktop-amd64.iso test encours-stockage iso dans racine partition FAT32 sata3 " {
menuentry "clé Usb-live ou CD-ROM" {
menuentry "Ubuntu-15.04-test Donnees sata1" {
menuentry "Iso Live ubuntu-15.10-desktop-i386.iso test encours-stockage iso dans s3fusion-12-sys" {
menuentry "Iso Live ubuntu-14.04.1-desktop-i386.iso test encours-stockage iso dans s3fusion-12-sys" {
#menuentry "clé Usb-live ou CD-ROM" {
menuentry "clé Usb-live MULTISYSTEM" {
menuentry "clés Usb-live cle-tests-windows et copy-cle-test-Win " {
menuentry "Hybryde Fusion 14.04. donnees sata1" {
menuentry "Hybryde Fusion 14.04. donnees sata1 extract test" {
menuentry "Try Hybryde Fusion Custom V3 without installing-Laërte" {
#menuentry "Hybryde Fusion 14.04." {
menuentry "Slitaz-5.0-rc3" {
menuentry "Bodhi Linux" {
#menuentry "Hybryde Fusion 14.04." {
menuentry "ToutouLinux-436_2015-04-30.iso-sur-Maxtor" {
bernard@bernard-System-Product-Name:~$
Je tiens à disposition les fichiers de travail et le retour terminal des tests si besoin est.
Je suis en attente de communication de fichiers grub.cfg de Mint et Manjaro, pour savoir leur contenu...
@+. Babdu89 .
Dernière modification par Babdu89 (Le 26/03/2017, à 08:49)
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#169 Le 26/03/2017, à 10:51
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
je ne sais pas si tu as utilisé le fichier supZZnum mais j'y ai fait une correction
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#170 Le 26/03/2017, à 16:45
- Babdu89
Re : [Projet terminé] correction anomalie de grub
Bonsoir.
je ne sais pas si tu as utilisé le fichier supZZnum mais j'y ai fait une correction
EDIT : 2017-03-26 il faut ajouter avant la ligne ZZZnum="ZZZnum" la ligne
OLDIFS="$IFS"
J'ai fais mes tests sans cette modification.
Qu'est elle sensée faire?.
Je vais re-tester.
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#171 Le 27/03/2017, à 11:46
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
supZZZnum est juste un outil qui permet de supprimer les fichiers temporaires du répertoire ZZZnum sans avoir à relancer modif_grub et en fait n'est pas très très utile
(le même outil qui est déjà intégré à modif_grub ne comporte pas cette anomalie)
si tu utilises modif_grub pour mettre à jour les grub de plusieurs OS il peut être intéressant de procéder comme suit :
- lancer modif_grub
les autres fois lancer modif_grub avec l'option --sansfstab ( ce qui évite de relancer recup_fstab qui est assez long )
la première fois sert à récupérer un blkid à jour et les OS avec boot séparé , une fois suffit , les fois suivantes le programme réutilisera ces résultats, enfin à toi de voir si ce n'est pas trop compliqué et il faut bien sur relancer modif_grub à partir du même répertoire pour que le programme puisse retrouver les 2 fichiers blkid-res.txt et UBoot-UPart.txt
Dernière modification par ar barzh paour (Le 28/03/2017, à 04:59)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#172 Le 07/04/2018, à 19:30
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
NOUVELLE VERSION modif_grub_V44 qui va obligatoiremnt avec recup_fstab_V7
(il faut installer les deux dan un répertoire et lancer modif_grub_V44)
V44 et V7 corrigent un souci avec les labels comportant des espaces
j'ai testé sur ma machine
1-avec les étiquettes de partition comportant des espaces
2-avec un fichier manuel avec des labels comportant des espaces
le code de modif_grub_V44
#!/bin/bash
nom_base=`echo $(basename $0)`
nom_dir=`echo $(dirname $0)`
echo "$nom_base"
echo "$nom_dir"
#########################################################################################
# résumé des actions effectuées
# modif_grub permet
# - de raccourcir la longueur d'un fichier au format grub
# en y supprimant des menus inutiles (menu contenant /dev /dev , uuid différents)
# le fichier à traiter doit contenir
# pemière ligne : un commentaire commençant par #
# la ligne : ### BEGIN /etc/grub.d/10_linux ###
#
# si la ligne : ### BEGIN /etc/grub.d/40_custom ### apparait
# seules les lignes entre 10_linux et 40_custom seront traitées
# si cette ligne n'apparait pas
# ce sont les lignes de 10_linux à la fin qui seront traitées
#
# un menu doit être de la forme
# menuentry ' ............ { ou menuentry " ..........{
# des lignes intermédiaires à priori quelconques
# la ligne terminant le menu ........ }
#
# aucun caractère [hors blancs] ne doit apparaître après un { ou un }
#
# un submenu doit être de la forme
# submenu '................{ ou submenu "................{
# des lignes quelconques ?
# de menus au format ci-dessus
# une ligne de fermeture ......} aucun caractères [hors blancs] après }
# si cette ligne fait partie d'un menu elle sera alors de la forme
# .........} }
#
# - d'ajouter un label à un menu de grub pour avoir une présentation plus claire
# pour cela deux solutions :
# - utilisation du label de la partition
# - utilisation d'un fichier personnel au format blkid
# lorsqu'un label est modifié et que l'on retraite le fichier , ce label sera
# - l'action de remplacement d'un grub réel demande à l'utilisateur des précautions d'usage
# être capable de revenir en arrière si problème !
# c'est à dire être capable de remettre le grub d'origine
#########################################################################################
#########################################################################################
# les fichiers créés
# les fichiers créés par recup_fstab
# le fichier blkid-res.txt ( correspondance dev-uuid-label)
# le fichiers UBoot-UPart.txt ( cas des OS avec boot séparé)
# les fichiers créés par recup_fstab dans ZZZnum
# le fichier DevSd-UBoot-UPart-<date> : contient les fichiers de /etc/fstab
# le fichier UBoot-UPart-<date>.txt : copie de UBoot-UPart-<date>.txt
#
# les autres fichiers qui sont créés dans ZZZnum par modif_grub
# le fichier grub-OK-<date>-<....>.txt destiné à remplacer le fichier traité
# ce fichier n'apparait plus si on a demandé le remplacement du fichier traité
# mais dans ce cas le fichier traité est sauvegardé (dans son nom-<date>)
# les fichiers suivants sont plus ou moins intéressant à analyser
# fichier grub-sup : contient les menus qui ont été supprimés
# fichier stat-<date> : contient nombre de menus/lignes conservés/supprimés
# fichier grub-mod : contient la 1ére ligne d'un menu qui a été modifié
# ou qui a été conservé pour une raison X
# les fichiers tmp[012]-<date> (coupures du fichier traité)
#########################################################################################
# quelques points d'historique
# V44 2018-04-07 correction anomalie labels tronqués s'ils comportent des espaces
# concerne le $ récupération dev label uuid btype dans le fichier choisi vers ligne 1240
# fonctionne avec recup_fstab_V7 ( idem modification pour les labels tronqués )
# V43 2018-02-13 fonctionne avec V6
# V41 2017-03-23
# prend en compte le changement de label par un autre label
# ne fonctionnera que
# si on traite un grub modifié par modif_grub à partir de V7
# remarque on peut aussi repartir d'un grub tout neuf par update-grub
# les grub de tous les OS doivent être dans cet état
# on peut le voir si la ligne du menu entry comporte : après le label
# exemple menuentry 'U16.04-P10-64b : Ubuntu, avec Linux .......
# par contre la ligne suivante avec un nouveau label NOUVEAU
# menuentry 'M16.04-P12-64b,Ubuntu (sur /dev/sda12)'
# deviendrait
# menuentry 'NOUVEAU : M16.04-P12-64b,Ubuntu (sur /dev/sda12)'
# V40 qui fonctionne avec recup_fstab_V5
# les fichiers créés prennent un nom plus long (répertoire complet)
# les statistiques sont conservées dans ZZZnum/stat-<date>
# pour des raisons d'affichage , les _ des noms de fichiers créés sont remplacés par des -
# V39 répertoire des fichiers temporaires ZZZnum
# demande de suppression fichers
# V38 avec recup_fstab_V4
# ajout de l'option --sansfstab (permet de na pa lancer recup_fstab)
# ===> la création du fichier de concordance UUID-Part-UUIDBoot ne sera pas faite
# (hors ce fichier est nécessaire à modif_grub )
# et le fichier blkid ne sera pas mis à jour automatiquement
# V35 le programme ne traite plus que les lignes comprises entre
# ### BEGIN /etc/grub.d/10_linux ###
# et
# ### BEGIN /etc/grub.d/40_custom ###
# le fichier à traiter doit commencer par un #
# la ligne ### BEGIN /etc/grub.d/10_linux ### est obligatoire
# mais ne doit pas commencer le fichier
# si la ligne ### BEGIN /etc/grub.d/40_custom ### est absente
# le programme traitera le fichier de 10_linux jusqu'à la fin
# V34 suppression de certaines fonctions devenue inutiles
# réorganisation de certaines fonctions
# V33 ajout du sous programme recup_fstab_V2 ( étude système à boot séparé)
# V30 idem V29 sans les commentaires superflus
# si boot séparé on sort !!!!
# V29 2017-03-09
# correction due à l'utilisation de ${#uuid[*]} dans la construction concordance label-uuid
# remplacement de tous les while ${#menu[*]} par for ${!menu[@]}
# V28 2017-03-08
# présentation de concordances UUID-LABEL
# un ligne menuentry et submenu peut comporter des blank après }
# une ligne peut se terminer par } }
#V26 function sort_info_transforme donne des traces
# V25
# chaine_linux="linux.*\/vmlinu" pour prise en compte de "linux /@/boot/vmlinuz"
# V8 2017-02-14
# adjonction critere_suppression_2
# suppression des menus qui ont des UUID différents dans search --no-floppy et dans linux /boot/
# conservation des menus qui n'ont pas de lignes search --no-floppy
# conservation des menus qui n'ont pas de lignes linux /boot/vmlinu
# anomalie redoublement label , non modification de la ligne submenu
# V7 2017-02-13
# la ligne de submenu est recherché par submenu ' ou par submenu " au lieu de submenu 'Options .....
# l' UUID (et donc le label) est récupéré dans le bloc suivant de menuentry
# V6 2017-02-13
# on récupère l'UUID dans la ligne search --no-floppy --fs-uuid --set=root du bloc
# V5 2017-02-12
# seules les lignes commençant par menuentry et finisant par { seront traitées comme menuentry
# (le test se fait par ^[tab ]*menuentry.*{$)
# V4 2017-02-10
# il y aura suppression du menu si on trouve ....../dev/sd...../dev/sd...... AVANT la chaine --class ,
########################################################################################
function confirmation_sortie {
declare titre="Sortie de $0"
declare ok="Confirmer la sortie"
declare texte="Pour Validez la sortie cliquer sur \"$ok\""
declare cancel="Abandonner la sortie"
if zenity --question --title "$titre" --text "$texte" \
--no-wrap --ok-label "$ok" --cancel-label "$cancel"
then
exit 63
fi
}
function suppression_fichiers_temporaires {
repertoire_a_vider="./$ZZZnum"
fich="/tmp/liste_fichier.txt" # contient la liste des fich. du rép. à supprimer
oklabel="Sortir si EXIT coché / Supprimer fichiers cochés sinon"
cancellabel="Re-cocher toutes les cases (sauf grub-OK)"
texte="
Des fichiers ont été créés lors de l'exécution du programme
$0
ci dessous ces fichiers encore existants dans le répertoire
$repertoire_a_vider
Pour supprimer un/des fichiers
1- Décochez la case EXIT
2- Cochez la case du/des fichier(s) que vous voulez supprimer
3- Cliquer sur $oklabel
==> ce menu se relancera en indiquant
les fichiers encore existants dans le répertoire $repertoire_a_vider
Pour SORTIR de ce menu une seule solution
Cochez la case EXIT puis cliquez sur \"$oklabel\"
pour Recocher la case de tous les fichiers (sauf grub-OK) cliquer sur la case
$cancellabel
"
while :
do
# listage des fichiers du répertoire
ls "$repertoire_a_vider" > "$fich" # ligne à supprimer en réel
liste_fichier="TRUE EXIT_(Sortir_du_menu)"
while read ligne
do # problème zenity ?
ligne=$(sed "s/ /*/g" <<< $ligne) # remplacer les espaces par *
case $ligne in
tmp[012][-_]20* | \
tmp[-_]u[-_]l* | \
tmp.txt | \
fich[-_]transforme-* | \
grub-mod* | \
stat-20* | \
DevSd[-_]UBoot* | \
grub-sup-20* | \
UBoot-UPart* )
liste_fichier="$liste_fichier TRUE $ligne"
;;
blkid-res.txt | \
grub-OK* )
liste_fichier="$liste_fichier FALSE $ligne"
;;
esac
done < "$fich"
#sélection des fichiers à supprimer
choix=`zenity --list \
--title="XXXXXXXXXXXXXXXXXXX : $0" \
--text="$texte" \
--checklist \
--cancel-label "$cancellabel" \
--ok-label "$oklabel" \
--height "750" \
--width "800" \
--column="CONS/SUP" --column="nom du(des) fichier(s) de $repertoire_a_vider" \
${liste_fichier} \
2>/dev/null ` # ne pas effacer cette ligne fin de choix
code=$?
echo "code de zenity $code"
if [[ $code == 0 ]] # code retour zenity (0=normal,sinon clic/x , Esc , )
then
[[ -n `echo $choix|grep "EXIT"` ]] && exit 0
if [[ -z $choix ]] # $choix est vide
then
echo "Aucun choix effectué"
continue # on recommence
else
echo "le choix est :"
echo "$choix"
IFS="|"
list=($choix)
echo "le 1er est ${list[0]}"
echo "le 2ème est ${list[1]}"
echo ${list[@]}
IFS="$OLDIFS"
if zenity --question --title "SUPPRESSION" \
--text "Suppression de ${#list[@]} fichiers" \
--no-wrap --ok-label "Confirmer Suppression" \
--cancel-label "Abandonner la Suppression"
then
for i in ${list[@]}
do
i=$(sed "s/*/ /g" <<< $i) #remettre espace à la place des *
echo "je supprime $repertoire_a_vider/$i"
rm "$repertoire_a_vider/$i"
done
fi
continue # on recommence
fi
else
[[ $code == 1 ]] && continue # on a cliqué sur Re-cocher
fi
confirmation_sortie
done
}
function ne_commence_pas_par_begin {
# le fichier à traiter ne doit pas commencer par ### BEGIN /etc/grub.d/10_linux ###
read ligne < "$fich_source"
if [[ "$ligne" =~ ^"$deb" ]]
then
echo ; echo
echo "désolé"
echo "si le fichier grub à traiter ( $fich_source )"
echo "n'a pas le droit de commencer par la ligne"
echo "$deb"
echo "rappel :"
echo " 1- cette ligne"
echo " $deb"
echo " DOIT apparaître plus loin dans le fichier"
echo " même pour un fichier grub d'essai"
echo
echo " 2- le fichier à traiter DOIT commencer par une ligne de commentaire"
echo " (car cette première ligne sera modifiée)"
echo
echo " 3- en réel le fichier grub commence par #"
exit 1 # au lieu de return 1
fi
}
function trier_fichier {
echo ; echo
echo "fichier grub choisi : $fich_source"
deb="### BEGIN /etc/grub.d/10_linux ###"
fin="### BEGIN /etc/grub.d/40_custom ###"
ne_commence_pas_par_begin
# création de 3 fichiers tmp0-<date>.txt tmp1-<date>.txt tmp3-<date>.txt
[[ -e "$fich_source_0" ]] && rm "$fich_source_0" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_1" ]] && rm "$fich_source_1" # inutile mais évite message d'erreur rm
[[ -e "$fich_source_2" ]] && rm "$fich_source_2" # inutile mais évite message d'erreur rm
fich="$fich_source_0"
presence_10_linux=1
IFS="~"
while read ligne
do
case "$ligne" in
$deb ) fich="$fich_source_1" ; presence_10_linux=0 ;;
$fin ) fich="$fich_source_2" ;;
esac
echo "$ligne" >> $fich
done < "$fich_source"
IFS="$OLDIFS"
# après lecture du fichier on a du renconter le ligne 10_linux sinon
if [[ $presence_10_linux -eq 1 ]]
then
echo "la présence de la ligne $deb est obligatoire"
echo "le traitement ne commence qu'à partir de cette ligne"
echo "ajouter cette ligne au fichier"
exit 0
fi
}
function verifier_presence_dev { # dans le cas d'utilisation d'un blkid personnel
echo
# mettre les dev de "sudo blkid" dans un tableau
dev1=(`awk -F" " '{printf("%s ",$1)}' "$blkid"`)
# mettre les dev du fichier choisi dans un tableau
dev2=(`awk -F" " '{printf("%s ",$1)}' "$blkid_choisi"`)
manque=""
for d1 in ${dev1[@]} # /dev/sdxy: /dev/sdzt: de blkid
do
res=`grep $d1 <<< ${dev2[@]}`
[[ -z $res ]] && manque="$manque $d1" # si non trouvé , ajout
done
if [[ -n $manque ]]
then
echo "dans le fichier $blkid_choisi il manque"
echo ; echo $manque ; echo
echo "tous les dev présents sur la machine doivent être déclarés dans ce fichier"
echo "veuillez éditer ce fichier"
echo "format habituel dev/sdxx: LABEL=\"xxxx\" UUID=\"xxxx\""
echo " la présence de LABEL n'est pas obligatoire"
exit 0
fi
}
function modif_ligne1_grub { # récupère la première ligne et modifie en y mettant la date
res=`echo "$1" | grep "^ * *#"`
if [[ -n $res ]] # la ligne est bien un commentaire (commence par #)
then
trans="#### $num : $fich_source modifié par $0 ####"
echo $trans > "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
sort_info_transforme "$1" "première ligne modifiée en" "$trans"
else
echo "la première ligne du fichier est "
echo $1
echo
echo "mais il faut que la première ligne du fichier"
echo "$fich_source"
echo "commence par un #"
echo "ajouter cette ligne de commentaire au début de ce fichier"
echo "arrêt du programme"
exit 0
fi #[[ -n $res ]]
}
function OK {
rep=""
while [[ $rep != [oOyYnN] ]]
do
titre="programme $0"
texte="cette partie de programme supprime des lignes supposées inutiles de grub
- paragraphes contenant ......$rech_dev.....$rech_dev........... AVANT la chaine $rech_class
- menuentry n'ayant pas des UUID égaux dans la ligne search et la ligne linux
(à partir de V34 les menuentry sur boot séparé sont conservés)
- le programme demande le nom du fichier à traiter ..
==> en réel ce devrait être <partition>/boot/gub/grub.cfg
- le programme crée un fichier grub-OK-date qui pourra être utilisé pour remplacer le fichier grub
- le programme utilise aussi le label des partitions ou d'un fichier de référence
pour informer plus précisement la ligne menuentry de grub,
on peut utiliser un fichier de référence uuid label (au format blkid)
- remarque : pour des essais , on peut traiter n'importe quel fichier ayant un format grub
si le fichier à traiter n'est pas au format grub , il ne fonctionnera pas correctement
et en réel il serait préférable de lancer ce programme après avoir lancé un update-grub
trois fichiers sont créés :
grub-OK -<aaaa:mm:dd-hh:mm:ss>.txt ( le grub reformaté )
grub-sup-<aaaa:mm:dd-hh:mm:ss>.txt ( les menuentry qui ont été supprimés )
grub-mod-<aaaa:mm:dd-hh:mm:ss>.txt ( les lignes modifiées )
vous pourrez analyser ces fichiers pour voir ce qui s'est passé
avant de remplacer le fichier traité (surtout si c'est grub.cfg)
(en fin de traitement répondez alors non à la demande de remplacement
et faites le remplacement manuellement)
lors du traitement ..... ( c'est uniquement une info visuelle )
les x qui défilent indiquent des lignes de menu qui seront supprimées
les c qui défilent indiquent les lignes de menu qui seront conservées
les . qui défilent indiquent les autres lignes (qui seront conservées)
un S indique un début de submenu
un M indique un début de menuentry
un m indique la suite de menuentry
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme
"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) : ;;
[aA] ) exit 1 ;;
* ) echo "utilisez seulement oOyYaA S.V.P." ;;
esac
done
}
function choix_fichier_blkid { # retourne 0 si fichier blkid choisi
fichier_source=""
titre="$0 Sélectionnez le fichier contenant UUID et LABEL des partitions"
fichier_source=`zenity --file-selection --title="$titre"`
case $? in #$? est le code de retour de zenity
0) blkid_choisi="$fichier_source" ;;
1) echo "Aucun fichier UUID-LABEL sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
}
function critere_suppression_2 { # se fait après une initialisation de menu[0 ...n]
##### attention les codes de retour ont changé
# 0 si ligne search et ligne linux et uuid égaux (menu conservé + label dans menu[0])
# 1 si pas de ligne search ou linux (menu conservé intégralement)
# ligne search et linux trouvées
# 3 aucun UUID trouvé dans fichier UUID-LABEL
# 2 si uuid différents (menu supprimé à revoir?)
uuid_search="x"
uuid_linux="y"
ligne_search=""
ligne_linux=""
# recherche dans le tableau menu[1..n] de la ligne search
#TEST
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
res=`grep "$chaine_search" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_search="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_search" ]]
then
return 1 # pas de chaine search => on conservera le menu intégralement
fi
# recherche dans le tableau menu[] de la ligne linux
for i in ${!menu[@]} # pour tous les indices 0..n
do
[[ $i = 0 ]] && continue # sauf dans menu[0]
tmp=`sed 's/[[:blank:]]//g' <<< "${menu[i]}"` #suppression des blank de menu
res=`grep "$chaine_linux" <<< "${menu[i]}"` # dans menu[1..n]
if [[ -n $res ]]
then
ligne_linux="${menu[i]}"
break # 1er menu[n] trouvé est le bon
fi
done
if [[ -z "$ligne_linux" ]]
then
return 1 # pas de chaine linux => menu conservé sans modif
fi
#uuid ligne search présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_search
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_search"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_search=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# uuid ligne linux présent dans fichier de réf uuid-label ?
# si trouvé positionne uuid_linux
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # recherche de uuid[0..n]
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< "$ligne_linux"` # y-a-t-il l'UUID
if [[ -n $res ]]
then
uuid_linux=${uuid[$n]}
break # le premier uuid trouvé dans blkid sera le bon
fi
fi
done
# analyse des résultats
if [[ ${uuid_search}${uuid_linux} = "xy" ]]
then
return 3 # aucun des uuid n'a été trouvé dans blkid ( peuvent être égaux ou non )
fi
####################################################################################
# on peut avoir uuid_search uuid_linux
# x 1ea0.... : n'existe pas , existe : code retour 2
# a04f... y : existe , n'existe pas : code retour 2
# bcde... fghi.... : uuids existants et différents: code retour 2
# 1234... 1234.... : uuids existants et égaux : code retour 0
#####################################################################################
# si $uuid_search-$uuid_linux est dans UBoot on renvoie 4
# ce menu correspond à une partition avec boot séparée
for i in ${!UBoot[@]} # pour tous les indices 0..n
do
[[ $uuid_search-$uuid_linux = ${UBoot[$i]} ]] && return 4
done
if [[ "$uuid_search" != "$uuid_linux" ]]
then
return 2 # uuid différents on supprimera ce menu
else
return 0 # uuid egaux on conservera ce menu après modif de menu[0]
fi
} # fin function critere_suppression_2
function ajout_label_menuentry { # ajoute un label à menu[0] (search ou linux)
rech_uuid_label_menuentry "$1" # retour 0 si label trouvé , pas zéro sinon
code=$?
if [[ $code -eq 0 ]]
then # on a un label
tmp=${menu[0]}
# menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
menu[0]=`sed "s/menuentry '.* : /menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \" .*: /menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 2 ajout du nouveau en tête
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 3 suppression des doublons
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi #[[ $tmp != ${menu[0]} ]]
fi # [[ $code -eq 0 ]]
}
function memorise_menuentry { # mémorise menuentry de submenu pour écriture ultérieure
for p in ${!menu[@]} # pour tous les indices de menu[]
do
((i_s++))
ligne_sousmenu[i_s]=${menu[$p]} # mémorise menu[0 ..n]
((nb_lignes_menu_cons++)) # stat
done
}
function ecrire_lignes_memorisees { # écrit les lignes dans sauv
for p in ${!ligne_sousmenu[@]} # pour tous les indices de ligne_sousmenu[]
do
echo "${ligne_sousmenu[$p]}" >> "$fich_sauv" # écriture l_s[0..n]
((nb_lignes_cons++)) # stat
done
}
function traite_ligne_submenu { # reçoit $1 (ligne submenu '.......{
fin_submenu=1 # sera mise à 0 si un menuentry se termine par } }
submenu="$1" #mise en mémoire de cette ligne
# j'utilise la mémorisation label_submenu du label d'un menuentry précédent
if [[ -n $label_submenu ]]
then
# ajout du label et suppression double label
submenu=`sed "s/submenu '/submenu '${label_submenu} : /" <<< $submenu`
submenu=`sed "s/submenu \"/submenu \"${label_submenu} : /" <<< $submenu`
submenu=`sed "s/${label_submenu} *:* *${label_submenu}/${label_submenu}/" <<<$submenu`
fi
i_s=0
unset ligne_sousmenu
ligne_sousmenu[0]="$submenu" # mémorisation pour sortie finale
((nb_lignes_hors_menu++)) # ligne considérée comme hors menu
# lire les lignes qui suivent submenu jusquà trouver ligne ......} hors menuentry)
while read ligne
do
((nb_lignes_lues++))
# si on trouve .... } hors menuentry on est au bout du submenu
# il faut sauvegarder la ligne submenu , les lignes intermédiaires et menuentry
# je ne traite pas du cas où on trouverait une ligne menuentry terminée par } }
# V28 et suivante ce cas est traité
# une ligne menuentry terminée par } } provoque la fin du submenu ($fin_submenu 0)
# on sort de la boucle si on trouve } en fin de ligne hors menuentry
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # supprime les blancs de la ligne
if [[ "$tmp" =~ }$ || "$fin_submenu" = 0 ]] ### on est en fin de submenu ###
# pas tout à fait exact
# si on peut avoir { ...... } hors menuentry
then
((i_s++))
ligne_sousmenu[i_s]="$ligne" # mémoriser cette ligne
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
ecrire_lignes_memorisees # écriture de ces lignes de submenu
label_submenu=""
return # fin de traitement de submenu
fi # [[ "$tmp" =~ }$ ]]
# V28 élargissement aux blancs de grep après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
if [[ -n $mem ]]
then
res="" # si on trouve la chaine Memory pas intéressant on force res à vide
fi
if [[ -z $res ]]
then # ni menuentry ..{ ni memory ...{
((i_s++)) #
ligne_sousmenu[i_s]="$ligne" # mise en mémoire pour écriture ultérieure
((nb_lignes_hors_menu++)) # stat
echo -e ".\c"
else
lire_menuentry # menu[0..n] et ((nb_lignes_lues++))
trt_menu2 "${menu[0]}" # 1 si contient dev dev
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # 1 la ligne contient /dev /dev
then
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # suppression de ce menu
((nb_menu_sup++)) # stat
else # pas 1 : ne contient pas dev dev
critere_suppression_2
code_crit2=$? # 0 1 2 3
case $code_crit2 in
0) # les uuid sont égaux modifier menu[0]
ajout_label_menuentry "$chaine_search"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
1) # pas de search ni de linux on garde sans modif
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé (pas de ligne search ou linux)"
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents"
((nb_menu_sup++)) # stat non prévu
;;
3) # uuid non trouvé (search et linux existent)
memorise_menuentry # mettre en mémoire ces lignes de menu
sort_info_transforme "${menu[0]}" "menu dans submenu conservé : uuid (search ou linux) non trouvé"
((nb_menu_cons++)) # stat non prévu
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
# revoir pour le label
ajout_label_menuentry "$chaine_linux"
memorise_menuentry # mettre en mémoire ces lignes de menuentry
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi # [[ -z $res ]]
done
# si on arrive ici il y a erreur de traitement quelque part
echo
echo " ligne bach $LINENO"
echo " erreur de format ? dans le fichier $fich_source !!!!!!!!!!"
echo " dernière ligne de menu lue :"
echo
echo ${menu[0]}
echo
echo " dernière ligne lue : $nb_lignes_lues"
echo " $ligne"
sleep 100
exit 0
}
function rech_uuid_label_ligne { # recherche uuid et label de $1 dans uuid[0..n]
# renvoie 0 uuid trouvé et label trouvé uuid_trouve=xxx label_trouve="yyy"
# renvoie 1 uuid trouvé et label vide uuid_trouve=xxx label_trouve=""
# renvoie 2 uuid non trouvé uuid_trouve="" label_trouve=""
uuid_trouve=""
label_trouve=""
n=-1
while [[ $n -lt $maxuuid ]]
do
((n++)) # uuid suivant
if [[ -n ${uuid[$n]} ]] # précaution supplémentaire uuid non vide
then
res=`grep ${uuid[$n]} <<< $1` # $1 est une ligne de menu
if [[ -n $res ]]
then
uuid_trouve=${uuid[$n]}
if [[ -n ${label[$n]} ]]
then
label_trouve=${label[$n]} # si label non vide positionne label_trouve
return 0 # uuid trouvé / label non vide trouvé
else
return 1 # uuid trouvé / label ""
fi
fi
fi
done
return 2 # uuid non trouvé
}
function rech_uuid_label_menuentry { # recherche uuid et label dans la ligne $1 de menu[1 ..n]
for p in ${!menu[@]} # pour tous les indices du tableau 0..n
do
[[ $p = 0 ]] && continue # mais pas dans menu[0]
res=`echo ${menu[$p]} | grep "$1"`
if [[ -n $res ]]
then
rech_uuid_label_ligne ${menu[$p]} # donne uuid_trouve / label_trouve
return $? # 0 uuid égaux
# 1 uuid trouvé , label vide
# 2 pas d'uuid dans search
fi
done
return 3 # pas de search trouvé , (donc pas d'uuid , et donc pas de label) !!!
}
function transforme_ligne_menuentry { # modifie la première ligne d'un menuentry conservé
# recherche l'UUID dans la ligne search --no-floppy --fs-uuid --set=root
# si trouvé , on récupère le label
# si label vide on ne fait rien
# sinon on rajoute avec : en tête après menuentry ' ou menuentry "
#
label_trouve=""
uuid_trouve=""
tmp=${menu[0]} # servira de test pour sortie si modifié
rech_uuid_label_menuentry "$1" # positionne le label à la bonne valeur
code=$? # retour de la fonction
case $code in
0) # UUID trouvé : $uuid_trouve LABEL trouvé : $label_trouve
if [[ $label_submenu = "" ]] # servira dans traitement d'un submenu éventuel
then # on memorise le premier label menuentry trouvé
label_submenu="$label_trouve"
fi
# menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
# menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
#suppression double labels dans cette ligne
# menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
# 2 ajout du nouveau
# 3 suppression des doublons
# 1 remplacement de l'ancien par le nouveau , (s'il n'y a pas d'ancien ,rien n'est changé)
menu[0]=`sed "s/menuentry '.* : /menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \" .*: /menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 2 ajout du nouveau en tête
menu[0]=`sed "s/menuentry '/menuentry '$label_trouve : /" <<< ${menu[0]}`
menu[0]=`sed "s/menuentry \"/menuentry \"$label_trouve : /" <<< ${menu[0]}`
# 3 suppression des doublons
menu[0]=`sed "s/${label_trouve} *:* *${label_trouve}/${label_trouve}/" <<<${menu[0]}`
if [[ $tmp != ${menu[0]} ]]
then #TEST
sort_info_transforme "$tmp" " LIGNE transformée en" "${menu[0]}"
fi
;;
1) # LABEL vide #TEST
sort_info_transforme "$tmp" "pas de label pour $uuid_trouve dans $blkid_choisi"
;;
2) #LABEL vide uuid non trouvé #TEST
sort_info_transforme "$tmp" "uuid de ligne search non trouvé dans $blkid_choisi"
;;
3) # pas de ligne search trouvée dans menuentry v
sort_info_transforme "$tmp" "ligne search non trouvée"
;;
*) # ???? #TEST
sort_info_transforme "$tmp" "code inconnu : $code"
;;
esac
return $code
}
function lire_menuentry { # met dans tableau menu[n] jusqu'à trouvé } seul sur la ligne
unset menu
i=0
menu[0]="$ligne" # menu[0] est la première ligne
echo -e "M\c" # trace début de menuentry
while read ligne # ligne suivante
do
((i++))
((nb_lignes_lues++))
menu[$i]="$ligne" # mémorisée dans menu [1 .. n]
echo -e "m\c" # trace écran
tmp=`sed 's/[[:blank:]]//g' <<<"$ligne"` # suppression des blancs pour test
if [[ "$tmp" =~ }}$ ]]
then
fin_submenu=0 # termine par } } fin de submenu !!!
fi
if [[ "$tmp" =~ }$ ]] # la ligne se termine par } ?
then
return # oui fin de menuentry
fi
# et si pas de ... } on ira jusqu'en fin de fichier !!!!
# c'est un critère de format de grub
done
}
function sort_menu_0 { # écrit menu[0..n] dans le fichier de sauvegarde
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sauv" # écriture menu[0..n]
((nb_lignes_cons++)) # stat
((nb_lignes_menu_cons++)) # stat
echo -e "c\c" # suivi écran
done
}
function sort_menu_1 { # écrit menu[0..n] dans le fichier suppression
#écriture des paramètres reçus dans fich_sup
echo "#########################" >> $fich_sup
for arg in "$@" # prends $1 $2 ... $n
do
echo $arg >> $fich_sup
#echo >> $fich_sup
done
# écriture du menu dans fichier sup
for p in ${!menu[@]} # pour tous les indices
do
echo "${menu[$p]}" >> "$fich_sup" # écriture menu[0..n]
((nb_lignes_sup++)) # stat
echo -e "x\c" # suivi écran
done
}
function sort_info_transforme { # écrit les paramètres reçus fich_transforme
echo "#########################" >> $fich_transforme
for arg in "$@" # ( $1 $2 ... $n )
do
echo $arg >> $fich_transforme
#echo >> $fich_transforme
done
}
function trt_menu2 { # analyse le paramètre $1
# renvoie 1 si $1 contient plus d'une fois /dev/sd avant --class (suppresion)
# renvoie 0 sinon
IFS="$OLDIFS" # il faut l'espace comme délimiteur
tableau=($1) # mise en tableau de la ligne
IFS="~" # peut-être utile pour la suite ?
nbdevsd=0 # nombre de fois que l'on trouve /dev/sd (avant --class)
for n in ${!tableau[@]} # de 0 1 2 .... x
do
r_class=`echo ${tableau[$n]} | grep "$rech_class"` # test présence --class
if [[ -n $r_class ]] # --class ou pas ?
then
break # --class est trouvé, sort de la boucle for
else
r_dev=`echo ${tableau[$n]} | grep "$rech_dev"` # test présence /dev/sd
if [[ -n $r_dev ]]
then
((nbdevsd++)) # incrémente si on a /dev/sd
if [[ $nbdevsd -gt 1 ]] # si plus d une fois /dev/sd
then
return 1 # on sort en renvoyant 1
fi #[[ $nbdevsd -gt 1 ]]
fi #[[ -n $r_dev ]]
fi #[[ -n $r_class ]]
done
if [[ $nbdevsd -gt 1 ]] # test nombre
then
return 1 # 1 si plus d'une fois /dev/sd
else
return 0 # 0 sinon
fi
}
#trt=0;((trt++));echo "début de traitement $trt - $LINENO";read g
# début du programme ##################################################################################
######### variables ###################################
OLDIFS="$IFS" # sauvegarde IFS
rech_class="\-\-class" # jusqu'à trouver la chaine --class dans menuentry
rech_dev="\/dev\/sd" # la présence de la chaine /dev/sd dans menuentry
# ne pas modifier le nom des fichiers suivants
blkid="blkid-res.txt" # (fichier contenant le résultat de sudo blkid)
fich_fstab_conc="UBoot-UPart.txt" # créé par recup-fstab contient les uuid ayant boot séparé
blkid_choisi="" # fichier personnel choisi contenant dev-label-uuid
chaine_search="search \-\-no\-floppy \-\-fs\-uuid \-\-set=root"
# (un tiret doit être protégé par \ pour une recherche dans grep)
chaine_linux="linux.*\/vmlinu" # + général "linux......./vmlinu"
label_submenu="" # label valide du menuentry précédent
ZZZnum="ZZZnum" # le répertoire qui contiendra les fichiers temporaires xxxx-$num
prg="$nom_dir/recup_fstab_V7" # création de $fich_fstab_conc (UBoot_UPart.txt)
#########################################################
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
# ces 3 variables seront re-précisées en utilisant le nom complet du fichier grub traité
fich_sauv=""
fich_sup=""
fich_transforme=""
fich_source_0="$ZZZnum/tmp0-$num.txt" # lignes de 1 à 10_linux[
fich_source_1="$ZZZnum/tmp1-$num.txt" # lignes de [10_linux à 40_custom[
fich_source_2="$ZZZnum/tmp2-$num.txt" # lignes de [40_custom à la fin]
##### pour les stat #####################################
fich_stat="$ZZZnum/stat-$num.txt"
nb_menu_cons=0
nb_menu_boot_cons=0
nb_menu_sup=0
nb_menu_sans_uuid=0
nb_lignes_sup=0
nb_lignes_cons=0
nb_lignes_lues=0
nb_lignes_hors_menu=0
nb_lignes_menus_cons=0
#########################################################
! [[ -e "$ZZZnum" ]] && mkdir "$ZZZnum" # pourrait être mis plus loin
#((trt++));echo "début de traitement $trt - $LINENO";read g
#si le programme $prg (recup_fstab_Vx) n'existe pas on sort
# voir pour utiliser getopts
# deux façons de lancer ce programme
# - en terminal avec ou sans l'option --sansfstab
# - clic sur le fichier (sans l'option --sansfstab)
case "$1" in
--sansfstab )
echo "
Rappel :
un fichier à jour au format blkid
(dev - uuid - label éventuel)
est nécessaire au bon déroulement du programme
s'il y a des OS avec boot séparés
un fichier
$fich_fstab_conc à jour
est nécessaire (il est créé par recup_fstab)
(ce fichier donne l'uuid de la partition de boot
associé à l'uuid de la partition système)
en cas de doute utilisez
$0 sans le paramètre --sansfstab
pour re-créer correctement ce fichier
Taper sur Entrée pour continuer Ctrl C pour arrêter"
read g
code=0 ;;
* )
! [[ -e "$prg" ]] && echo "fichier $prg de récup. (fstab et blkid) manquant" && read g && exit 0
echo "$0 lance le programme $prg"
$prg "$ZZZnum"
code=$?
;;
esac
echo "le code de retour est $code"
((trt++));echo "début de traitement $trt $LINENO"
if [[ $code -ne 0 ]]
then
echo " il y a eu un problème de traitement du programme $prg"
echo " si l'arrêt n'est pas volontaire"
echo " vérifier que le répertoire /mnt/jpb ne comporte pas des résidus de fichiers"
echo " éventuellement faire le ménage dans ce répertoire"
read g
exit 0
fi
echo
echo "suite du programme $0"
echo ; echo
# pour les fichiers temporaires -$num
if ! [[ -e $fich_fstab_conc ]] # UBoot_UPart a normalement été créé par recup_fstab
then
echo "le fichier $fich_fstab_conc est introuvable"
echo "il faut d'abord exécuter $prg"
echo "ou mettre à disposition manuellement un fichier $fich_fstab_conc"
echo ; echo
exit 0
else
echo " vérification des uuid correspondants à des systèmes sur boot séparés"
echo " couples uuid-boot - uuid-systeme des menuentry en boot séparé"
echo
echo "###### contenu du fichier $fich_fstab_conc #############################"
cat $fich_fstab_conc
echo "#######################################################################"
echo
echo " vérifier visuellement le contenu des lignes comprises entre les ###"
echo " il existe deux lignes par couple (ou rien)"
echo " une ligne uuid1-uuid2"
echo " une ligne uuid2-uuid1"
echo
echo " tapez sur entrée pour continuer"
read g
fi
# lecture et mise en mémoire des infos donnée par le fichier $fich_fstab_conc ("UBoot_UPart.txt")
#################################################################################################
max_boot=-1
while read l_boot
do
[[ -z $l_boot ]] && echo "ligne vide je passe" && continue # si ligne vide ou commentée
[[ $l_boot =~ ^[[:blank:]]*# ]] && echo "ligne commentée $l_boot je passe" && continue
((max_boot++))
echo $l_boot
UBoot[$max_boot]=$l_boot # format uuid1-uuid2 à la suite
done < $fich_fstab_conc
#################################################################################################
OK # présentation du programme
code=1
while [[ $code = 1 ]]
do
rep=""
texte_supplementaire=""
if ! [[ -e "$blkid" ]]
then
texte_supplementaire="=====> !!!!! Attention ce fichier $blkid n'est pas présent !!!!!!"
fi
while [[ $rep != [oOyYaAcC] ]]
do
titre=" Utilisation des UUID et LABEL des partitions des disques"
texte=" Choix du fichier de références LABEL et UUID
répondez par
(oOyY) si vous voulez ré-utiliser le fichier $blkid
ce fichier a été créé précédemment par $prg
(contient les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés sur la partition)
$texte_supplementaire
(cC) permet de choisir un fichier de référence UUID LABEL
(les labels utilisés pour mettre à jour le grub
seront alors ceux déclarés dans ce fichier de référence)
!!!!! mais toutes les partitions devront être déclarées
le champ /dev/sdxx en premier
le champ LABEL="xxxxxx" non obligatoire (mais alors
le menu de GRUB ne sera pas modifié pour ce dev)
le champ UUID="xxxxxx" (OBLIGATOIRE pour un traitement correct)
le champ type TYPE="xxxxx" est conseillé
une ligne sera donc de la forme
/dev/sdxx LABEL=\"un label correct\" UUID=\"un uuid correct\" TYPE=\"le type correspondant\"
ce choix peut servir si vous ne voulez pas labelliser les
partitions mais mettre quand même un label dans grub
ou bien pour effectuer des essais
(ce choix un peu tordu est un peu difficile à comprendre ?)
!!!! en cas de doute utilisez le choix oOyY puis Valider
O pour réutilisation du fichier $blkid
C pour choisir un fichier de référence UUID LABEL personnel
A Arrêter"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) blkid_choisi="$blkid"; echo "utilisation du fichier créé précédemment)" ;;
[aA] ) echo "arrêt du programme" ; exit 0 ;;
[cC] ) echo "choix du fichier des uuid" ; choix_fichier_blkid ;;
* ) echo "utilisez seulement oO yY aA cC S.V.P." ;;
esac
done
# si le fichier de concordance n'existe pas sortie
if ! [[ -e "$blkid_choisi" ]]
then
echo ; echo
echo " $0 n'a pas trouvé le fichier"
echo " $blkid_choisi"
echo " que vous avez choisi comme référence UUID-LABEL"
echo " Modifier votre choix de fichier"
echo " ou bien mettez à disposition ce fichier pour continuer"
echo ; echo ; sleep 2
else
code=0
fi
done # sors de la boucle uniquement si code=0
# récupératon dev label UUID dans des tableaux
unset dev
unset uuid
unset label
unset bdev # à partir de V31 pour boot séparé
unset btype # le type de la partition
unset bmont # point de montage à cause du boot séparé
############## récupération dev label uuid btype dans le fichier choisi ###################
maxuuid=-1
while read ligne
do
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
# d'abord le dev
DEV=$(awk -F":" '{print $1}' <<< "$ligne") # donne aussitôt /dev/sda1
# pour les autres , à cause d'espaces possibles (dans le label)
if grep "LABEL" <<< $ligne
then
LABEL=${ligne#*LABEL=?}
LABEL=${LABEL%%\"*} #"
else
LABEL=""
echo "pas de LABEL"
fi
if grep UUID <<< $ligne
then
UUID=${ligne#*UUID=?}
UUID=${UUID%%\"*} #"
else
UUID=""
echo "pas d'UUID"
fi
if grep TYPE <<< $ligne
then
TYPE=${ligne#*TYPE=?}
TYPE=${TYPE%%\"*} #"
else
TYPE=""
echo "pas de type"
fi
if grep PARTUUID <<<$ligne
then
PARTUUID=${ligne#*PARTUUID=?}
PARTUUID=${PARTUUID%%\"*} #"
else
PARTUUID=""
echo "pas de partuuid"
fi
[[ -z `grep "^\/dev" <<< $DEV` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 0
dev[maxuuid]=$DEV #récupération du dev de la ligne
label[maxuuid]="$LABEL"
uuid[maxuuid]="$UUID"
btype[maxuuid]="$TYPE"
done < $blkid_choisi
##############################################################################
if [[ "$blkid_choisi" != "$blkid" ]]
then
verifier_presence_dev # vérifie que tous les dev du fichier choisi sont bien déclarés
fi
###############################################################################
# sortie des uuid label pour info
[[ -e "tmp-u-l.txt" ]] && rm "tmp-u-l.txt"
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" && [[ -z "$aff_dev" ]] && aff_dev="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="___"
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="___"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="___"
# car si l'un des $ est "" , il y a erreur d'affichage
printf "%02s %-10s UUID %-36s LABEL: %-20s TYPE : %-10s\n" \
"$p" "$aff_dev" "$aff_uuid" "$aff_label" "$aff_btype" | tee -a tmp-u-l.txt
((p++))
done
titre="Affichage des concordances LABEL <=> UUID Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp-u-l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
[[ -e "tmp-u-l.txt" ]] && rm "tmp-u-l.txt" # supprime ce fichier devenu inutile
if [[ $code -ne 0 ]]
then
echo $code
exit 0 #sortie si on ne valide pas
else
echo $code
fi
################ début de traitement du fichier GRUB ###############################
# Quel fichier grub traiter ?
titre="$0 Sélectionnez le fichier GRUB à traiter"
fich_source=`zenity --file-selection --filename="../fichier-grub/*" --title="$titre"`
case $? in # $? est le code de retour de zenity
0) : ;;
1) echo "Aucun fichier sélectionné." ; exit 1 ;;
-1) echo "Une erreur inattendue est survenue." ; exit 1 ;;
*) echo "erreur non reconnue" ; exit 1 ;;
esac
# $fich_source est de la forme /media/SH/grub/fichier-grub/grub-2UUID.cfg
# servira à préciser les fichiers grub-OK,grub-sup
precision=$(sed 's/\//-/g' <<< "$fich_source") # remplace les / par des -
# /media/SH/grub/fichier-grub/grub-2UUID.cfg
# precision devient -media-SH-grub-fichier-grub-grub-2UUID.cfg
fich_sauv="$ZZZnum/grub-OK-$num$precision.txt"
fich_sup="$ZZZnum/grub-sup-$num$precision.txt"
fich_transforme="$ZZZnum/grub-mod-$num$precision.txt"
#### lecture et traitement du fichier GRUB #######
trier_fichier # création des 3 fichiers de 1 à 10 linux 10 linux à 40 custom 40 custom à la fin
################# traitement jusqu'à 10_linux #####################
IFS="~"
prem=0
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]]
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
echo $ligne >> "$fich_sauv"
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
fi
done < "$fich_source_0"
################# traitement de 10_linux à 40_custom
while read ligne
do
((nb_lignes_lues++))
if [[ $prem -eq 0 ]] # pourrait être supprimé depuis V34
then
modif_ligne1_grub "$ligne" ; ((prem++))
else
# entre les crochets on a tab et espace élargisement après {
res=`echo "$ligne" | grep "^[ ]*menuentry.*{[ ]*$"`
mem=`echo "$ligne" | grep "^[ ]*menuentry ['\"]Memory test.*{[ ]*$"`
# res est vide s'il n'y a pas menuentry {
# mem est non vide si on a Memory test -ne pas traiter menuentry 'Memory test
if [[ -n $mem ]]
then # si Memory test on force res à vide
res=""
fi
if [[ -z $res ]]
then # pas menuentry
subm=`echo "$ligne" | grep "^[ ]*submenu.*{[ ]*$"`
if [[ -z $subm ]]
then # pas menuentry pas submenu
echo "$ligne" >> $fich_sauv # écriture de cette ligne dans sauv
((nb_lignes_cons++)) # stat
((nb_lignes_hors_menu++)) # stat
echo -e ".\c" # trace écran
else # contient submenu
echo -e "S\c" # trace
traite_ligne_submenu "$ligne" # traitement de submenu
fi
else # on a menuentry
lire_menuentry # mettre en mémoire dans menu[0..n]
trt_menu2 "${menu[0]}" # rem : 1 si /dev/sd /dev/sd
code_dev_dev=$?
if [[ $code_dev_dev -eq 1 ]] # si 1 on supprime
then # le bloc menuentry contient /dev /dev
sort_menu_1 " " "menu supprimé : trop de /dev/sd" # fich_sup
((nb_menu_sup++))
else # menuentry ne contient pas /dev/sd /dev/sd
critere_suppression_2 # analyse des uuid et recherche de label
code_crit2=$?
case $code_crit2 in
0) # les uuid sont égaux
transforme_ligne_menuentry "$chaine_search" # mettre un label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat
;;
1) # menu sans modif (ni search ni linux)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé (pas de ligne search ou linux)"
((nb_menu_cons++)) # stat
;;
2) # uuid différents on supprime ce menu
sort_menu_1 " " "menu supprimé : uuid différents" # écrire dans fich_sup
((nb_menu_sup++)) # stat
;;
3) # uuid non trouvé (search et linux existent)
sort_menu_0 # écrire le menu dans fich_sauv
sort_info_transforme "${menu[0]}" "menu conservé : UUID search ou linux non trouvé dans $blkid_choisi"
((nb_menu_cons++)) # ce menu étant conservé
((nb_menu_sans_uuid++))
;;
4) # uuid != mais boot séparé
transforme_ligne_menuentry "$chaine_linux" # met label dans menu[0]
sort_menu_0 # écrire le menu dans fich_sauv
((nb_menu_cons++)) # stat non prévu dans memorise_menuentry
((nb_menu_boot_cons++))
;;
esac
fi # [[ $code_dev_dev -eq 1 ]]
fi #[[ -z $res ]]
fi #[[ $prem -eq 0 ]]
done < "$fich_source_1"
echo $nb_lignes_lues
################# traitement 40_custom à fin #####################
if [[ -e "$fich_source_2" ]] # en cas d'essai sans ligne 40_custom
then
while read ligne
do
((nb_lignes_lues++))
((nb_lignes_cons++))
((nb_lignes_hors_menu++))
echo $ligne >> "$fich_sauv"
done < "$fich_source_2"
fi
#################################################################
IFS="$OLDIFS"
echo "###################################################################" | tee -a "$fich_stat"
printf "%-40s %s\n" "fichier traité" " : " | tee -a "$fich_stat"
echo "$fich_source" | tee -a "$fich_stat"
printf "%-40s %s\n" "le résultat se trouve dans" " : " | tee -a "$fich_stat"
echo "$fich_sauv" | tee -a "$fich_stat"
echo | tee -a "$fich_stat"
printf "%-39s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup" | tee -a "$fich_stat"
if [[ $nb_lignes_sup -gt 0 ]]
then
printf "%-40s %s\n" "fichier des lignes supprimées" " : " | tee -a "$fich_stat"
echo "$fich_sup" | tee -a "$fich_stat"
echo | tee -a "$fich_stat"
fi
printf "%-40s %s %5d\n" "nombre de menus conservés" " : " "$nb_menu_cons" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "nombre de menus supprimés" " : " "$nb_menu_sup" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "nombre de menus avec boot conservés" " : " "$nb_menu_boot_cons" | tee -a "$fich_stat"
if [[ $nb_menu_sans_uuid -gt 0 ]]
then
printf "%-40s %s %5d\n" "nombre de menus sans uuid trouvé" " : " "$nb_menu_sans_uuid" | tee -a "$fich_stat"
fi
echo | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées (hors menu)" " : " "$nb_lignes_hors_menu" | tee -a "$fich_stat"
printf "%-40s %s %5d\n" "lignes conservées (menu)" " : " "$nb_lignes_menu_cons" | tee -a "$fich_stat"
echo "###################################################################" | tee -a "$fich_stat"
echo "après avoir vérifié manuellement le fichier"
echo "$fich_sauv"
echo "en réel vous pourrez remplacer grub.cfg à vos risques et périls"
echo | tee -a "$fich_stat"
texte_attention=""
if [[ $fich_source =~ /boot/grub/grub.cfg$ ]]
then
texte_attention_grub_reel="====> Attention vous avez choisi de traiter un fichier grub réel
/boot/grub sera remplacé par le fichier résultant ... prenez vos précautions
mais je rapelle qu'une sauvegarde du grub original est effectué
donc récupérable"
fi
rep=""
while [[ $rep != [oOyYnN] ]]
do
################ mise à jour du fichier traité ou non ###########################
titre=" ################ remplacement de GRUB ###########"
texte="
Voulez-vous remplacer le fichier choisi
$fich_source
par le nouveau fichier généré
$fich_sauv
par précaution si vous répondez oui le fichier
$fich_source (fichier original choisi)
sera sauvegardé dans
$fich_source-$num
puis
$fich_source
sera remplacé par le contenu du fichier
$fich_sauv
$texte_attention_grub_reel
répondez par (oOyYnN)"
rep=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $rep in
[oOyY] ) # sauvegarde de "grub" , je conserve $num
echo "
vous avez demandé le remplacement du fichier
OK mais avant je sauvegarde le fichier original
$fich_source
dans
$fich_source-$num
(mot de passe administrateur requis)
sudo cp "$fich_source" "$fich_source-$num""
sudo cp "$fich_source" "$fich_source-$num"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors de la sauvegarde du fichier
(code erreur : $code)"
suppression_fichiers_temporaires
echo "je sors"
exit 0
fi
#et fich_sauv remplace grub
echo "
OK je remplace
$fich_source
par
$fich_sauv
(mot de passe administrateur requis)
sudo mv "$fich_sauv" "$fich_source""
sudo mv "$fich_sauv" "$fich_source"
code=$?
if [[ $code != 0 ]]
then
echo "il y a eu un problème lors du remplacement du fichier $fich_source
(code erreur : $code)"
suppression_fichiers_temporaires
echo "je sors"
exit 0
else
echo
echo "fichier $fich_source remplacé"
fi
;;
[nN] )
echo ; echo "fichier oiginal non remplacé"
echo " mais le fichier résultant"
echo " $fich_sauv"
echo " est à disposition"
;;
* ) echo "utilisez seulement oOyYnN S.V.P."
;;
esac
done
suppression_fichiers_temporaires
echo "taper entrée pour terminer"
read g #pour attendre
exit 0
Dernière modification par ar barzh paour (Le 08/04/2018, à 08:41)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#173 Le 07/04/2018, à 19:33
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
le code de recup_fstab_V7 ( il faut conserver ce nom)
#!/bin/bash
# V1 récupère le contenu des fichiers fstab qui peuvent exister sur la machine
# comment ?
# récupération des dev présents par blkid
# création du fichier blkid-res.txt
# pour les partitions déjà montées (via mount)
# lecture et traitement de <partition>/etc/fstab
# et pour chacune des autres partitions
# montage
# lecture et traitement de <point de montage>/etc/fstab
# démontage
# le traitement consiste à écrire dans le fichier DevSd_UBoot_UPart.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSd="/dev/sdxx" UPart="uuid de la partition avec boot" UBoot="uuid du boot"
# le traitement consiste à écrire dans le fichier DevSd_Uboot_Upart-date.txt
# pour chaque partition qui sera reconnue comme ayant un boot séparé
# DevSD="/dev/sdxx" UBoot="uuid du boot" UPart="uuid de la partition avec boot"
# V2 création fichier UBoot_UPart contenant les uuid d'un système avec boot séparé
# format uuid1-uuid2 et uuid2-uuid1 servira lors du traitement modif-grub
# V3 remise en forme
# V4 supprime aussi les fichiers inutiles
# les fichiers créés sont
# UBoot-Upart.txt blkid-res.txt
# et dans ZZZnum : UBoot_Upart-<date>.txt DevSd_UBoot_UPart-<date>.txt
# V5 pour des raisons d'affichage , les _ des noms de fichiers sont remplacés par des -
# V6 2018/02 vérifie les doublons label et uuid
function OK {
# à cause de problème d'affichage
#declare ffich_fstab_conc=$(sed "s/[_ ]/*/g" <<< $fich_fstab_conc)
#declare fres_blkid=$(sed "s/[_ ]/*/g" <<< $res_blkid)
#declare ffich_fstab_long=$(sed "s/[_ ]/*/g" <<< $fich_fstab_long)
#declare ffich_recup=$(sed "s/[_ ]/*/g" <<< $fich_recup)
reponse=""
while [[ $reponse != [oOyYnN] ]]
do
titre="programme $0"
texte="
0- ===> il est préférable pour un résultat plus correct
de partir d'un fichier gub.cfg tout neuf
donc auparavant , lancer un sudo update-grub
1-le but principal de ce sous programme est de créer un fichier
$fich_fstab_conc
qui contiendra les uuid des systèmes qui ont un boot séparé
2-il met a disposition le fichier
$res_blkid
qui contient le résultat de la commande sudo blkid
3-il crée aussi (pour info d'analyse) le fichier
$fich_fstab_long
qui contient le fichier $fich_recup des partitions présentes
comment ?
- récupération des dev existants par sudo blkid
- pour les partitions déjà montées (via mount)
lecture et traitement de <partition>/etc/fstab
- pour chacune des partitions non montées (sauf ntfs , swap)
montage
lecture et traitement de <point de montage>$fich_recup
démontage
SOUS-PROGRAMME RECUP DE MODIF GRUB
tapez O puis valider pour continuer
tapez A puis valider pour arrêter
O pour continuer / A pour arrêter le programme"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) : ;;
[aAnN] ) exit 1 ;;
* ) echo "utilisez seulement oOyYaAnN S.V.P." ;;
esac
done
}
# affiche le fichier des doublons trouvés et demande s'il faut continuer ou non
function continuer {
titre="$1"
texte="
$(cat $fich_double_label_uuid)
Continuer quand même ? Répondez par : (oOyYnNaA) "
reponse=""
while [[ $reponse != [oOyYnNaAcC] ]]
do
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) : ;;
[aAnN] ) exit 65 ;;
* ) echo "utilisez seulement oOyYaAnN S.V.P." ;;
esac
done
}
function rech_uuid_dev { # si $1 est dans dev[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${dev[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function rech_uuid_label { # si $1 est dans label[] renvoi l'uuid correspondant
for i in ${!dev[@]}
do
[[ "$1" = ${label[$i]} ]] && uuid=${uuid[$i]} && break
done
}
function ecrit_uuid1_uuid2 { # recoit $1 $2 sous la fore UUID= ou LABEL= ou /dev/sdxx
# écrit uuid1-uuid2 et uuid2-uuid1 dans $fich_fstab_conc
# en remplacant le label ou le /dev/sdxx par l'uuid correspondant
# et en enlevant UUID= et LABEL=
uuid1=""
uuid2=""
echo "fonction ecrit_uuid1_uuid2 $1 $2"
#pour le premier paramètre
debut=`echo "$1" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$1" # /dev/sdxx on recherche l'uuid correspondant
uuid1="$uuid"
;;
UUID\= )
uuid1=`echo "$1" | cut -c6-` # si UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$1" | cut -c7-` # si LABEL on prend ce qui se trouve après =
uuid1="$uuid" # et on recherche l'uuid correspondant
;;
esac
#même chose pour le deuxième paramètre
debut=`echo "$2" | cut -c1-5`
uuid=""
case "$debut" in
\/dev\/ )
rech_uuid_dev "$2" # /dev/sdxx on recherche l'uuid correspondant
uuid2="$uuid"
;;
UUID\= )
uuid2=`echo "$2" | cut -c6-` # UUID= on prend ce qui se trouve après =
;;
LABEL )
rech_uuid_label `echo "$2" | cut -c7-` # LABEL on prend ce qui se trouve après =
uuid2="$uuid" # et on recherche l'uuid corespondant
;;
esac
if [[ -n $uuid1 ]] && [[ -n $uuid2 ]]
then
# on écrit les deux combinaisons possibles , plus simple à traiter ensuite
echo $uuid1-$uuid2 >> $fich_fstab_conc
echo $uuid2-$uuid1 >> $fich_fstab_conc
fi
echo "fin de fonction ecrit_uuid1 uuid2 =1=>$uuid1<=== =2=>$uuid2<==="
}
function ecrit_ligne_court { # si $3 (UBoot) non vide
# uuid1-uuid2 dans UBoot_UPart
if [[ -n "$3" ]] # si uboot non vide
then
ecrit_uuid1_uuid2 "$2" "$3" # envoie uuid de partition et uuid de boot
fi
}
function trans_ligne_fstab { # récupère les champs d'une ligne
# champ1 champ2 champn mais on ne s'intérese qu'aux champs 1 et 2
# champ1 : UUID=uuid ou LABEL=label ou le dev [non traités : PARTUUID= PARTLABEL=]
# champ2 : le point de montage
champ1=`echo "$1"|awk -F" " '{printf ("%s",$1)}'` # bloc spécial ou système de fichiers distant à monter
champ2=`echo "$1"|awk -F" " '{printf ("%s",$2)}'` # c'est le point de montage
case "$champ2" in
\/ )
dev_part=$champ1 # si champ2 est / on positionne dev_part sur champ1
;;
\/boot )
dev_boot=$champ1 # si champ2 est /boot on positionne dev_boot sur champ1
;;
esac
}
# début du programme
echo "début de programme $0 "
if [[ $# -eq 0 ]]
then
echo "sans le paramètre répertoire"
ZZZnum="ZZZnum"
else
echo "avec le paramètre répertoire $1"
ZZZnum="$1" # modif_grub doit envoyer ZZZnum
fi
echo "Répertoire : "$ZZZnum
! [[ -e "$ZZZnum" ]] && mkdir "$ZZZnum"
#########################################################################################
# variables
num=`date +%Y:%m:%d`-`date +%H:%M:%S`
res_blkid="blkid-res.txt" # résultat de sudo blkid
fich_fstab_long="$ZZZnum/DevSd-UBoot-UPart-$num.txt" # résultant commenté
fich_fstab_conc="UBoot-UPart.txt" # résultant concaténé UUID1-UUID2
fich_fstab_conc_num="$ZZZnum/UBoot-UPart-$num.txt" # sauvegarde,à supprimer manuellement
rep_mnt=/mnt/jpb-$num # répertoire pour montages/démontages
fich_recup=/etc/fstab # fichier à récupérer dans part.
fich_double_label_uuid="$ZZZnum/doublon.txt" # contient les label ou uuid truvés plusieurs fois
#########################################################################################
OK # présentation du programme / sortie ou non
reponse=""
while [[ $reponse != [oOyYnNaAcC] ]]
do
titre="récupération des UUID et LABEL des partitions des disques"
texte="
Récupération des infos dans les fichiers $fich_recup des partitions
ce programme travaille avec sudo pour
récupérer les dev (blkid)
effectuer des montages/démontages
(mot de passe d'administration requis)
répondez par
(oOyY) pour lancer la commande sudo blkid ( remise à jour du fichier)
(aA) pour arrêter ce programme
O pour récupérer les devices via \"sudo blkid\"
A Arrêter
"
reponse=`zenity --entry --title "$titre" --text "$texte" --width "800"`
case $reponse in
[oOyY] ) echo "sudo blkid" ; sudo blkid > $res_blkid ;;
[aA] ) echo "arrêt du programme" ; exit 1 ;;
* ) echo "$reponse utilisez seulement oOyYaA S.V.P." ;;
esac
done
rm "$fich_fstab_conc"
touch "$fich_fstab_conc"
#echo "# $num : couples uuid-boot - uuid-systeme des menuentry en boot séparé" > $fich_fstab_conc
# récupération des dev label et UUID
unset uuid
unset label
unset bdev # V31 pour boot séparé
unset bmont # pour le point de montage à cause du boot séparé
unset btype # le type de la partition
maxuuid=-1
while read ligne # lecture et traitement du fichier généré par sudo blkid
do
# c'est le même script que dans modif-grub
# certaine lignes sont inutiles mais je les ai laissées
[[ -z $ligne ]] && echo "ligne vide je passe" && continue # correction ligne vide
((maxuuid++))
# d'abord le dev
DEV=$(awk -F":" '{print $1}' <<< "$ligne") # donne aussitôt /dev/sda1
# pour les autres , à cause d'espaces possibles (dans le label)
if grep "LABEL" <<< $ligne
then
LABEL=${ligne#*LABEL=?}
echo "LABEL1=" $LABEL
LABEL=${LABEL%%\"*} #"
echo "LABEL2=" $LABEL
else
LABEL=""
echo "pas de LABEL"
fi
if grep UUID <<< $ligne
then
UUID=${ligne#*UUID=?}
UUID=${UUID%%\"*} #"
else
UUID=""
echo "pas d'UUID"
fi
if grep TYPE <<< $ligne
then
TYPE=${ligne#*TYPE=?}
TYPE=${TYPE%%\"*} #"
else
TYPE=""
echo "pas de type"
fi
if grep PARTUUID <<<$ligne
then
PARTUUID=${ligne#*PARTUUID=?}
PARTUUID=${PARTUUID%%\"*} #"
else
PARTUUID=""
echo "pas de partuuid"
fi
[[ -z `grep "^\/dev" <<< $DEV` ]] && echo \
&& echo "il manque /dev dans la ligne $ligne du fichier de référence UUID-LABEL" \
&& exit 1
# init variables d indice maxuuid
dev[maxuuid]=$DEV # le dev de la ligne blkid
label[maxuuid]="$LABEL" # le label de la ligne blkid
uuid[maxuuid]="$UUID" # l uuid de la ligne blkid
btype[maxuuid]="$TYPE" # le type de la ligne blkid
mnt_dev[maxuuid]="1" # modifié par mount : 0 si le dev est monté
p_dev[maxuuid]="" # modifié par mount : point de montage
done <$res_blkid
# artifice pour créer un uuid en double
# uuid[11]="78684472684430E4"
# artifice pour créer un label en double
# label[8]="U16.04-b10-64b"
# mise à zéro du fichier
rm "$fich_double_label_uuid"
touch "$fich_double_label_uuid"
#vérifier l'unicité des LABEL dans le tableau label
for i in ${!label[@]}
do
for j in ${!label[@]}
do
[[ $i -ne $j ]] && [[ ${label[$i]} = ${label[$j]} ]] && [[ -n ${label[$i]} ]] && echo "${dev[$i]} ${label[$i]} ${uuid[$i]}" >> "$fich_double_label_uuid"
done
done
#vérifier l'unicité des UUID ( cas de disques ajoutés ) dans le tableau uuid
for i in ${!uuid[@]}
do
#echo ${uuid[$i]}
for j in ${!uuid[@]}
do
#echo ${uuid[$i]} ${uuid[$j]}
[[ $i -ne $j ]] && [[ ${uuid[$i]} = ${uuid[$j]} ]] && [[ -n ${uuid[$i]} ]] && echo "${dev[$i]} ${label[$i]} ${uuid[$i]}" >> "$fich_double_label_uuid"
done
done
# si le fichier n'est pas vide , avertir et sortir si demande
[[ -s "$fich_double_label_uuid" ]] && continuer "ATTENTION LABEL et/ou UUID en DOUBLE"
#récupération des partitions déjà montées
mount | grep '^\/dev' > tmp.txt
# 1 2 3 4 5 6
# /dev/sda11 on /media/SH type ext4 (rw,relatime,data=ordered)
# remarque :
# awk -F" " '{printf ("%s ",$1)}' tmp.txt
# donne
# tous les dev séparés par une espace grace à "%s "
# awk -F" " '{printf ("%s ",$3)}' tmp.txt
# donne
# tous les points de montage séparés par une espace grace à "%s "
mdev=(`awk -F" " '{printf ("%s ",$1)}' tmp.txt`) # les dev montés dans un tableau
mont=(`awk -F" " '{printf ("%s ",$3)}' tmp.txt`) # les points de montage dans un tableau
rm "tmp.txt"
# positionnement montée ou non de chaque dev
for i in ${!dev[@]} # pour tous les indices des dev
do
for j in ${!mdev[@]} # pour tous les indices des partitions montées
do
if [[ "${dev[$i]}" = "${mdev[$j]}" ]]
then
mnt_dev[i]="0" # 0 indique que le dev est montée
p_dev[i]=${mont[$j]} # le point de montage du dev
break
fi
done
done
# sortie des uuid label pour info
[[ -e "tmp_u_l.txt" ]] && rm "tmp_u_l.txt"
echo
p=0
while [[ $p -le $maxuuid ]]
do
aff_dev="${dev[$p]}" # jamais vide
aff_mnt_dev="${mnt_dev[$p]}" # vaut 0 (monté) ou 1 (non monté)
aff_p_dev="${p_dev[$p]}" # (affichage en fonction du précédent)
# pour les corrections d'affichage
aff_uuid="${uuid[$p]}" && [[ -z "$aff_uuid" ]] && aff_uuid="_"
aff_label="${label[$p]}" && [[ -z "$aff_label" ]] && aff_label="_"
aff_btype="${btype[$p]}" && [[ -z "$aff_btype" ]] && aff_btype="_"
case $aff_mnt_dev in
0)
printf "%02s %-10s %-36s LABEL %-20s sur %-20s TYPE : %-10s\n" "$p" "$aff_dev" "$aff_uuid" "$aff_label" "$aff_p_dev" "$aff_btype" | tee -a tmp_u_l.txt ;;
1)
printf "%02s %-10s %-36s LABEL %-20s TYPE : %-10s\n" "$p" "$aff_dev" "$aff_uuid" "$aff_label" "$aff_btype" | tee -a tmp_u_l.txt ;;
esac
((p++))
done
reponse=""
titre="concordances dev<=>LABEL<=>UUID<=>point de montage (de blkid) Visualiser puis Valider pour continuer"
zenity --text-info --title "$titre" --filename "tmp_u_l.txt" --height "640" --width "1280" --font "Courier New Bold 10"
code=$?
[[ -e "tmp_u_l.txt" ]] && rm "tmp_u_l.txt" # supprime ce fichier devenu inutile
if [[ $code -eq 0 ]]
then
echo "OK je continue"
else
echo ; echo "Annulation demandée" ; echo ; exit 63
fi
##################################################
# pour cette partie il est absolument nécessaire d'avoir une liste des dev corrects
# d'où le sudo blkid effectué plus haut !
##################################################
echo "récupération des fstab de toutes les partitions" > $fich_fstab_long
echo >> $fich_fstab_long
############################################################
echo "pour les partitions déjà montées :" >> $fich_fstab_long
echo ${!dev[@]}
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]} ${mnt_dev[$i]}
[[ ${mnt_dev[$i]} = "1" ]] && continue # non monté suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
# on pourrait en ajouter d'autres
echo >> $fich_fstab_long
echo ${dev[$i]} "montée sur" ${p_dev[$i]} >> $fich_fstab_long
#pour chaque dev monté on récupére les infos de fstab
fich=${p_dev[$i]}$fich_recup
fich=`sed 's/\/\//\//g' <<< $fich` # supprime les doubles // (à cause de //etc/fstab)
echo $fich #soit /etc/fstab soit /xxx/xxx/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo "$fich de ${dev[$i]}" >> $fich_fstab_long
# on ne garde que les lignes non commentées et non vide
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
#si tmp n est pas vide , elle commence par #
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
done
echo >> $fich_fstab_long
##############################################################
echo "pour les partitions non montées :" >> $fich_fstab_long
if [[ -e "/mnt" ]]
then
echo "réperoire /mnt présent"
else
echo "le répertoire /mnt n'existe pas !!!"
exit 1
fi
rep_mnt_tmp="/mnt/jpb-$num"
echo "création du répertoire $rep_mnt_tmp pour monter les partitions"
sudo mkdir $rep_mnt_tmp
for i in ${!dev[@]} # pour tous les indices du tableau dev
do
echo $i ${dev[$i]}
[[ ${mnt_dev[$i]} = "0" ]] && continue # montée suivant !
[[ ${btype[$i]} = "ntfs" ]] && continue # ntfs suivant !
[[ ${btype[$i]} = "swap" ]] && continue # swap suivant !
echo
echo "traitement de $i ${dev[$i]} (${btype[$i]})"
echo "montage de ${dev[$i]} sur $rep_mnt_tmp"
sudo mount ${dev[$i]} $rep_mnt_tmp
code=$?
echo "code de retour montage de ${dev[$i]} sur $rep_mnt_tmp : $code"
if [[ $code = 0 ]] # si le montage est réussi
#################### montage réussi ####################
then
fich=$rep_mnt_tmp/etc/fstab
if [[ -e $fich ]]
then
echo >> $fich_fstab_long
echo ${dev[$i]} montée sur $rep_mnt_tmp >> $fich_fstab_long
dev_part=""
dev_boot=""
while read l_fstab
do
tmp=` grep '^[[:blank:]]*\#' <<< $l_fstab`
# si ne commence pas par # , tmp est vide
# et si la ligne n'est pas vide on l'écrit
if [[ -z $tmp ]] && [[ -n $l_fstab ]]
then
echo $l_fstab >> $fich_fstab_long
trans_ligne_fstab "$l_fstab"
fi
done < $fich
ecrit_ligne_court "${dev[$i]}" "$dev_part" "$dev_boot"
else
echo >> $fich_fstab_long
echo "pour ${dev[$i]} (${label[$i]}) /etc/fstab est inexistant" >> $fich_fstab_long
fi
# puis on le démonte avec boucle sinon le démontage ne se fait pas toujours
boucle=0
code=1
while [[ $code -ne 0 ]]
do
sudo umount "$rep_mnt_tmp"
code=$?
echo "boucle $boucle : ${dev[$i]} code de retour de umount $code"
if [[ $code = 0 ]]
then
echo
echo "boucle $boucle : ${dev[$i]} démontage effectué (code retour $code)"
ls -ails $rep_mnt_tmp
else
echo
echo "boucle $boucle : ${dev[$i]} non démonté (code retour $code)"
sleep 1 # attente en cas de non démontage
((boucle++))
if [[ $boucle -ge 10 ]]
then
echo "problème de démontage de ${dev[$i]}"
exit 1
fi
fi
done # boucle while
############################ échec de montage ###################
else
echo >> $fich_fstab_long
echo "impossible de monter ${dev[$i]} code echec de montage :$code" >> $fich_fstab_long
fi
done # boucle for i dev
echo ; echo
echo "fin de récupération des données de /etc/fstab des partitions présentes sur la machine"
echo ; echo
# sauvegarde de UBoot_UPart pour une utilisation personnelle
cp "$fich_fstab_conc" "$fich_fstab_conc_num"
echo "suppression du répertoire $rep_mnt_tmp en cours"
sudo rmdir $rep_mnt_tmp
code=$?
if [[ $code -ne 0 ]]
then
#rmdir: échec de suppression de '/mnt/jpb-2017:03:11-12:02:43': Périphérique ou ressource occupé
echo
ls -ails /mnt/jpb*
echo "vérifier le contenu du répertoire /mnt/jpb"
echo "faire le ménage dans ce répertoire"
exit 1
fi
echo "suppression réussie"
echo "fin normale du programme $0"
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#174 Le 08/04/2018, à 00:35
- Bougron
Re : [Projet terminé] correction anomalie de grub
Bonsoir
C'est vérifié.......
menuentry 'U 16 04 1 : GNU/Linux' --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-299d7644-ae32-43ff-b3db-16987328b52f'
Dernière modification par Bougron (Le 08/04/2018, à 00:36)
Hors ligne
#175 Le 08/04/2018, à 08:48
- ar barzh paour
Re : [Projet terminé] correction anomalie de grub
@ bougron
OK merci pour le retour
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne