#151 Le 09/04/2025, à 15:49
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Une partition de données montée dans /media/data avec des liens qui pointent vers Documents etc.
Le message est : « umount: /media/data: la cible est active. »
ha oui , j' ai la meme chose .
En meme temps ca parait normal si elle est deja inscrite dans le fichier /etc/fstab .
Du coup , j ' ai deplacé le test pour démonter la partition qui ne procédera que si pas d ' erreur avant , finalement ca parait bien plus logique comme ça d' ailleurs .
j ' ai viré les " return " que tu avais ajouté et corrigé 2 bricoles au niveau syntaxe .
Et je suis revenu à la version anterieure avec les boucles et les case ( ta version ajustée ) puisque là , au moins , l ' appui sur entrée pour sélection par défaut fonctionne .
#!/bin/bash
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ "$Label" == "$PartLabel" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
break
;;
Y|y|O|o|"")
label
break
;;
*)
unset Rep
;;
esac
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab
echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
exit 3
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 4
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 5
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
umount -v "$Part"
fi
# construction des éléments :
if [[ "$PartFstype" == "ext[2-4]" ]]; then
e2label "$Part" "$Label"
echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
echo " FSTYPE=$PartFstype"
ntfslabel "$Part" "$Label"
echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
mkdir /media/"$Label" 2>/dev/null
systemctl daemon-reload
mount -a 2>/dev/null
mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "Script pour montage de partition de données terminé avec succès !"
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
else
echo "erreur inconnue !"
exit 6
fi
break
;;
*)
unset Rep2
;;
esac
done
puis je remplacer aussi :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
par :
if [[ "$PartFstype" == "ext[2-4]" ]]; then
shellcheck ne me hurle pas dessus
EDIT : Allez hop , j ' ai edité le script au dessus dans une version finalisée que je compte passer dans le 1er post , si rien à redire .
Dernière modification par iznobe (Le 09/04/2025, à 16:12)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#152 Le 09/04/2025, à 17:57
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
j ' ai viré les " return " que tu avais ajouté
Tu as bien fait, il étaient juste là pour éviter les erreurs de script dus au fait que toutes les lignes étaient commentées dans le if.
puis je remplacer aussi :
if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then
par :
if [[ "$PartFstype" == "ext[2-4]" ]]; then
shellcheck ne me hurle pas dessus
Ça devrait le faire, oui (d’ailleurs j’y avais pensé). Et si en plus shellcheck est d’accord…
Hors ligne
#153 Le 09/04/2025, à 18:43
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
en fait ca ne marche pas , faut passer par une regex .
j ' ai supprimer un des 2 tests sur le contrôle dans fstab .
ca à l' air de marcher pas trop mal .
J ' ai posté directement dans le 1er post cette fois vu que ce ne sont que des modifications qui me semblent mineures .
Dernière modification par iznobe (Le 09/04/2025, à 19:02)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#154 Le 09/04/2025, à 19:29
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
$ for i in {1..5}; do [[ ext$i == ext[2-4] ]]; echo "\$i=$i -- \$?=$?"; done
$i=1 -- $?=1
$i=2 -- $?=0
$i=3 -- $?=0
$i=4 -- $?=0
$i=5 -- $?=1
$
sans guillemets !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#155 Le 09/04/2025, à 19:36
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Salut watael .
j ' avais ecrit sans guillemets :
if [[ "$PartFstype" == ext[2-4] ]]; then
...
Curieusement , je n' avais pas d' erreur , mais pas le résultat escompté .
la partie construction des éléments ne s ' exécutait pas .
Apres , je suis pas sur que ca change grand chose au final . Mais au moins je sais que c' est possible .
Mais pas compris pourquoi ca ne marchait pas , ha si probablement a cause de l' imbrication des [ dans la condition .
Dernière modification par iznobe (Le 09/04/2025, à 19:39)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#156 Le 09/04/2025, à 19:36
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
J ' ai posté directement dans le 1er post cette fois vu que ce ne sont que des modifications qui me semblent mineures .
Extrait, lignes 137 à 141 :
else
echo "erreur inconnue !"
exit 6
fi
break
Ajouter deux espaces au début des lignes 138 à 140 pour avoir une indentation parfaite.
Dernière modification par nany (Le 09/04/2025, à 19:38)
Hors ligne
#157 Le 09/04/2025, à 19:40
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
rô , tu pinailles là
Aller , je retourne éditer
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#158 Le 09/04/2025, à 19:41
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
rô , tu pinailles là
Oui, oui.
Hors ligne
#159 Le 09/04/2025, à 19:43
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
En tout cas , merci encore pour ton aide nany
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#160 Le 09/04/2025, à 19:45
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Aller , je retourne éditer
T’as oublié la ligne 140 (le fi).
Hors ligne
#161 Le 09/04/2025, à 19:53
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
En tout cas , merci encore pour ton aide nany
Il n’y a pas de quoi.
Maintenant que ton script tient la route, il te reste à y mettre une licence. Personnellement, j’aime bien la licence beerware.
Hors ligne
#162 Le 09/04/2025, à 20:24
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
effectivement , cette licence vaut la peine d' être ajouté
Elle clôture bien
Dernière modification par iznobe (Le 09/04/2025, à 20:27)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#163 Le 09/04/2025, à 20:51
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Attention !
Tu as recopié tel quel les lignes de la page de Wikipédia. Seulement, en bash, les commentaires doivent se faire avec des croisillons, comme ici par exemple.
(Et pense a changer le nom de l’auteur.)
Hors ligne
#164 Le 09/04/2025, à 21:03
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
oui , j' avais trop faim
j ' ai fait ça à la va vite
C' est corrigé
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#165 Le 10/04/2025, à 11:43
- geole
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour
Il me semble qu'il reste un petit bug. Si la partition est montée, elle est bien démontée. Mais le fichier fstab continue de connaître sa définition.
a@b:/tmp$ sudo bash part_data.sh
[sudo] Mot de passe de a :
1 ⇒ /dev/sda1 ssdWinboot ntfs
2 ⇒ /dev/sda2 ssdWinXP ntfs
3 ⇒ /dev/sda3 ssdWin10 ntfs
4 ⇒ /dev/sda4 ssdUbuntu2404 ext4
5 ⇒ /dev/sdb1 WinXP-2To ntfs
6 ⇒ /dev/sdb2 NosDonnees ntfs
7 ⇒ /dev/sdb3 Win7-2To ntfs
8 ⇒ /dev/sdc2 4ToWinXP-2To ntfs
9 ⇒ /dev/sdc3 4ToWin7-2To ntfs
10 ⇒ /dev/sdc4 4tossdWinboot ntfs
11 ⇒ /dev/sdc5 4ToHOME ext4
12 ⇒ /dev/sdc6 4ToNosDonnees ntfs
13 ⇒ /dev/sdc7 4ToBigDisk ntfs
14 ⇒ /dev/sdc8 4ToReserve ntfs
15 ⇒ /dev/sdc9 4TossdWin10 ntfs
16 ⇒ /dev/sdc11 4ToFamille ext4
17 ⇒ /dev/sdc12 4tossdWin10-OLD ntfs
18 ⇒ /dev/sdc13 4TossdUbuntu2404 ext4
19 ⇒ /dev/sdc15 4ToUbuntu ext4
20 ⇒ /dev/sdd5 ntfs3g ntfs
21 ⇒ /dev/sdd6 ntfs3 ntfs
22 ⇒ /dev/sdd9 Partage ext4
23 ⇒ /dev/sdd10 TESText4 ext4
24 ⇒ /dev/sdd11 TESText3 ext3
25 ⇒ /dev/sdd12 TESText2 ext2
26 ⇒ /dev/sdd13 TESTntfs1 ntfs
27 ⇒ /dev/sdd14 TESTntfs2 ntfs
28 ⇒ /dev/sdd15 TESTntfs3 ntfs
29 ⇒ /dev/md0 ext4
30 ⇒ /dev/md0 ext4
Choisissez le numéro correspondant à votre future partition de données : 28
La partition « /dev/sdd15 » a l’étiquette « TESTntfs3 ».
Voulez-vous changer l’étiquette de la partition « /dev/sdd15 » ? [O/n]
Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : TESTntfsbis
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd15 » en y mettant pour étiquette « TESTntfsbis » ? [O/n]
La partition « /dev/sdd15 » est déjà montée !
umount: /media/TESTntfs3 (/dev/sdd15) démonté
-----------------------------------------------------------------
Script pour montage de partition de données terminé avec succès !
Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/TESTntfsbis/a-TESTntfsbis ».
a@b:/tmp$ tail /etc/fstab
LABEL=TESText4 /media/TESText4 ext4 defaults
LABEL=TESText3 /media/TESText3 ext3 defaults
LABEL=TESText2 /media/TESText2 ext2 defaults
LABEL=TESTntfs1 /media/TESTntfs1 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs2 /media/TESTntfs2 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs3 /media/TESTntfs3 ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
LABEL=TESTntfsbis /media/TESTntfsbis ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
a@b:/tmp$
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#166 Le 10/04/2025, à 14:46
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Salut geole , oui effectivement .
je vois que tu as testé pour une partition en " EXT2 " , ca a fonctionné tout normalement ? pour l' étiquette notamment ?
--------------------------------------------------------------------------
Sinon , au niveau code , comment proceder pour gerer la chose ?
si l' étiquette choisie est deja existante dans le fstab , il faudrait alors tout simplement ne pas ajouter de ligne dans celui ci ?
admettons , mais ca ne change rien au fait , qu ' un utilisateur peut traiter via ce script une partition qui serait déjà indiquée dans le fstab avec une etiquette differente .
il se retrouvera alors avec 2 étiquettes , 2 lignes dans le fstab , dont une invalide .
il faudrait lire les lignes du fstab une a une , en rechercher chaque block device deja indiqué dans celui-ci et alors 2 possibilités :
soit ne pas proposer au choix celle deja traitée dans le fstab .
soit verifier quel block device correspond à une ligne du fstab et alors , en fonction gerer .
Ca demande de reorganiser entierement le code et de repartir quasiement a zero dans les 2 cas ( peut etre un peu moins pour le 1er cas ) .
ce n' est de toute maniere .
Note : théoriquement , si une partition est deja traitée dans le fstab avec la meme etiquette , le script est censé se stopper avant , et meme pas arriver à la ligne ou il va démonter la partition .
En changeant l' étiquette ben oui forcément ...
du coup , je réitère ma question , comment faire pour enlever une des multiples lignes possibles dans le fstab ??
cette partition peut etre ajoutée , avec son UUID , avec une etiquette differente , avec sont part-uuid , avec son block device , sans compter les autres manières que j' oublie ...
une possibilité serait de recuperer le champ du point de montage dans /etc/mtab , puis de supprimer la ligne dans le fstab correspondant au point de montage , en esperant qu ' il n' y ait qu ' une seule partition de montée a cet emplacement , comme on voit de tout ....
Dernière modification par iznobe (Le 10/04/2025, à 15:26)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#167 Le 10/04/2025, à 16:20
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bon , pas trouvé mieux pour le moment :
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
PartMountPoint=$(grep "$Part" /etc/mtab | cut -d " " -f 2)
umount -v "$Part"
Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1)
sed -i "${Num}d" /etc/fstab
fi
je voulais faire directement un :
sed -i /"$PartMountPoint"/d /etc/fstab
Mais pas moyen ...
le script au complet :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
label() {
local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
echo -n "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : "
read -r Label
if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset Label
fi
done
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ "$Label" == "$PartLabel" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
exit
fi
$(lsblk -no path,label,fstype |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/)
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')
nbDev=$(( "${#ListPart[@]}"/3 ))
for (( n=0; n<nbDev; n++ )); do
echo "$(( n+1 )) ⇒ ${ListPart[$n,0]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
done
while [ -z "$PartNum" ]; do
read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
echo "Votre choix doit être compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"
if [[ -z "$PartLabel" ]]; then
echo "La partition « $Part » n’a pas d’étiquette."
label
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while [ -z "$Rep" ]; do
echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
read -r Rep
case "$Rep" in
N|n)
Label="$PartLabel"
break
;;
Y|y|O|o|"")
label
break
;;
*)
unset Rep
;;
esac
done
fi
while [ -z "$Rep2" ]; do
echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
read -r Rep2
case "$Rep2" in
N|n)
echo -e "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if [ ! -e "$Part" ]; then # vérification que la partition existe bien
echo -e "La partition « $Part » n’existe pas !"
exit 1
fi
if ! [[ "$PartFstype" =~ ext[2-4]|ntfs ]]; then # vérifier qu’elle est bien formatée en ext ou ntfs
echo -e "La partition « $Part » n’est pas au bon format !"
exit 2
fi
if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
exit 4
fi
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
echo -e "L’UUID de la partition est déjà présent dans le fstab !"
exit 5
fi
if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
echo -e "La partition « $Part » est déjà montée !"
PartMountPoint=$(grep "$Part" /etc/mtab | cut -d " " -f 2)
umount -v "$Part"
Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1)
sed -i "${Num}d" /etc/fstab
fi
# construction des éléments :
if [[ "$PartFstype" =~ ext[2-4] ]]; then
e2label "$Part" "$Label"
echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
elif [[ "$PartFstype" == "ntfs" ]]; then
ntfslabel "$Part" "$Label"
echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
mkdir /media/"$Label" 2>/dev/null
systemctl daemon-reload
mount -a 2>/dev/null
mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo ""
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
else
echo "erreur inconnue !"
exit 6
fi
break
;;
*)
unset Rep2
;;
esac
done
Dernière modification par iznobe (Le 10/04/2025, à 16:22)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#168 Le 10/04/2025, à 17:35
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
je voulais faire directement un :
sed -i /"$PartMountPoint"/d /etc/fstab
Mais pas moyen ...
Peut-être
sed -i "/$PartMountPoint/d" /etc/fstab
?
(Pas testé.)
Sinon je viens de voir, lignes 22 à 27 :
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ "$Label" == "$PartLabel" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
Pourquoi itérer x fois le même test ?
Ne voulais-tu pas plutôt
for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
if [[ "$Label" == "${ListPart[$n,1]}" ]]; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
exit 7
fi
done
?
(Pas testé non plus.)
Hors ligne
#169 Le 10/04/2025, à 17:43
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour nany ,
iznobe a écrit :je voulais faire directement un :
sed -i /"$PartMountPoint"/d /etc/fstab
Mais pas moyen ...
Peut-être
sed -i "/$PartMountPoint/d" /etc/fstab
?
(Pas testé.)
d' après mes tests non plus ( passé une heure dessus ... ) . je me demande si ca n' a pas un rapport avec le fait que la variable contient des " / " justement ...
Sinon je viens de voir, lignes 22 à 27 :
Vu ligne 64 :
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
cela ne revient il pas au meme ?
j ' ai changé car ça me parait plus lisible .
EDIT , non , ça ne revient pas au même ...
ouarf , tu as l' oeil nany
je re modifie le script en 1er message et y inclus la dernière modif en attendant trouver potentiellement quelque chose de mieux .
PS , dans le doute , j' ai retesté :
sed -i "/$PartMountPoint/d" /etc/fstab
Mais non .
Dernière modification par iznobe (Le 10/04/2025, à 18:13)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#170 Le 10/04/2025, à 19:16
- geole
Re : [ SCRIPT ] pour montage automatique partitions internes
Cela fonctionne. La ligne a bien été virée
a@b:/tmp$ sudo bash part_data.sh
[sudo] Mot de passe de a :
1 ⇒ /dev/sda1 ssdWinboot ntfs
2 ⇒ /dev/sda2 ssdWinXP ntfs
3 ⇒ /dev/sda3 ssdWin10 ntfs
4 ⇒ /dev/sda4 ssdUbuntu2404 ext4
5 ⇒ /dev/sdb1 WinXP-2To ntfs
6 ⇒ /dev/sdb2 NosDonnees ntfs
7 ⇒ /dev/sdb3 Win7-2To ntfs
8 ⇒ /dev/sdc2 4ToWinXP-2To ntfs
9 ⇒ /dev/sdc3 4ToWin7-2To ntfs
10 ⇒ /dev/sdc4 4tossdWinboot ntfs
11 ⇒ /dev/sdc5 4ToHOME ext4
12 ⇒ /dev/sdc6 4ToNosDonnees ntfs
13 ⇒ /dev/sdc7 4ToBigDisk ntfs
14 ⇒ /dev/sdc8 4ToReserve ntfs
15 ⇒ /dev/sdc9 4TossdWin10 ntfs
16 ⇒ /dev/sdc11 4ToFamille ext4
17 ⇒ /dev/sdc12 4tossdWin10-OLD ntfs
18 ⇒ /dev/sdc13 4TossdUbuntu2404 ext4
19 ⇒ /dev/sdc15 4ToUbuntu ext4
20 ⇒ /dev/sdd5 ntfs3g ntfs
21 ⇒ /dev/sdd6 ntfs3 ntfs
22 ⇒ /dev/sdd9 Partage ext4
23 ⇒ /dev/sdd10 TESText4 ext4
24 ⇒ /dev/sdd11 TESText3 ext3
25 ⇒ /dev/sdd12 TESText2 ext2
26 ⇒ /dev/sdd13 TESTntfs1 ntfs
27 ⇒ /dev/sdd14 TESTntfs2 ntfs
28 ⇒ /dev/sdd15 TESTntfsbis ntfs
29 ⇒ /dev/md0 ext4
30 ⇒ /dev/md0 ext4
Choisissez le numéro correspondant à votre future partition de données : 28
La partition « /dev/sdd15 » a l’étiquette « TESTntfsbis ».
Voulez-vous changer l’étiquette de la partition « /dev/sdd15 » ? [O/n]
Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : TESTntfster
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd15 » en y mettant pour étiquette « TESTntfster » ? [O/n]
La partition « /dev/sdd15 » est déjà montée !
umount: /media/TESTntfsbis (/dev/sdd15) démonté
-----------------------------------------------------------------
Script pour montage de partition de données terminé avec succès !
Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/TESTntfster/a-TESTntfster ».
a@b:/tmp$ tail /etc/fstab
LABEL=TESText4 /media/TESText4 ext4 defaults
LABEL=TESText3 /media/TESText3 ext3 defaults
LABEL=TESText2 /media/TESText2 ext2 defaults
LABEL=TESTntfs1 /media/TESTntfs1 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs2 /media/TESTntfs2 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs3 /media/TESTntfs3 ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
LABEL=TESTntfster /media/TESTntfster ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
a@b:/tmp$
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#171 Le 10/04/2025, à 19:23
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Merci pour tes tests @geole
j' espère que ca sera utile à la communauté .
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#172 Le 10/04/2025, à 20:13
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
je me demande si ca n' a pas un rapport avec le fait que la variable contient des " / " justement ...
Ah oui, c’est très certainement à cause de ça.
Dans ce cas :
sed -i "\#$PartMountPoint#d" /etc/fstab
Source.
Bien sûr, $PartMountPoint ne doit pas contenir de croisillon.
Bref, comme on ne connaît pas à l’avance ce que va contenir la variable (à part au moins un slash), ta solution est peut-être meilleure.
Encore que, extrait de mon fstab :
# /media/data was on /dev/sdb3 during curtin installation
/dev/disk/by-uuid/1e8c81ad-ea6c-4993-89d9-b0064fc82344 /media/data ext4 defaults 0 1
Il y a deux lignes avec /media/data et là, ton code va coincer car il y aura deux numéros de ligne.
Solution possible :
Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1 | sort -rV)
for n in $Num; do
sed -i "${n}d" /etc/fstab
done
L’absence de guillemets autour de $Num est volontaire.
Dernière modification par nany (Le 10/04/2025, à 20:38)
Hors ligne
#173 Le 10/04/2025, à 20:50
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
bon j ' adopte ta boucle .
C' est possible de mettre un " # " dans un point de montage ?
je m' étonne encore moi-même de m ' étonner de ce que peuvent faire les gens .
C ' est clair qu ' il vaut mieux ne pas prendre de risque , sait on jamais .
Merci nany
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#174 Le 10/04/2025, à 21:01
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Attention, j’ai édité à 20:38:25, il faut mettre sort -rV.
Petites explications : on supprime ligne par ligne car on ne sait pas si les lignes vont être contiguës donc il faut trier par ordre décroissant des numéros (d’où l’importance du V) pout pouvoir supprimer de la dernière à la première ligne sinon il y aurait méprise dans les numéros des lignes.
Hors ligne
#175 Le 10/04/2025, à 21:33
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
C' est possible de mettre un " # " dans un point de montage ?
Il n’est pas interdit de le mettre dans un nom de répertoire donc je pense que que le dit répertoire peut ensuite servir de point de montage.
Hors ligne