| 
 Code: 
 
 
#! /bin/bash
 
# fstab-rebuild.sh
 
VERSION="April 2012"
 
# Farbe Variablen zuweisen
 
ROT="\033[31m"
 
ROT_HELL="\033[41m"    
 
GRUEN="\033[32m"
 
GRUEN_HELL="\033[42m"    
 
GELB="\033[33m"
 
GELB_HELL="\033[43m"
 
BLAU="\033[34m"
 
BLAU_HELL="\033[44m"
 
MAGENTA="\033[35m"
 
MAGENTA_HELL="\033[45m"
 
ENDE="\033[0m\n" 
 
ENDE1="\033[0m" 
 
 
NUTZER=$(users |awk '{print $1}')
 
 
if [ $(id -u) != 0 ]; then
 
 echo -e "$ROT_HELL Script erfordert root - Rechte \n  $ENDE "
 
  su
 
  exit 1
 
fi
 
 
echo -e "$ROT_HELL"
 
cat <<EOT
 
Diese script schreibt die /etc/fstab
 
LABEL wird abgefragt.
 
Falls kein LABEL vorhanden wird eins erzeugt in einer Mischung von Laufwerk und UUID.
 
Gleichzeitig wird der Mountpoint in /media entsprechend der Auswahl in einem Menü  geändert.
 
alle anderen Mountpoints in /media werden gelöscht.
 
Vorhandene /etc/fstab wird mehrfach gesichert.
 
Vor dem Überschreiben der alten /etc/fstab gibt es eine Abfrage.
 
Ich habe da nun mehrfache Sicherheiten eingebaut, damit kein Müll entsteht.
 
Kritik ist gerne willkommen. Zumal ich noch zimlich wenig Ahnung habe.
 
 
Neu ist:
 
Menü zum Auswählen von Optionen.
 
z.B. auch atime
 
Problem wheezy dass root-Partition als solche nicht erkannt wird behoben.
 
Vor überschreiben wird nachgefragt.
 
 
EOT
 
# read
 
 
echo -e "$ENDE $ENDE1"
 
 
 
AUSW=`dialog --checklist "Wie soll die fstab.aussehen ??? " 0 0 0 \
 
 System "Linux Systeme als auto mounten ? " off \
 
 "homes mounten" "Partitionen mit home-Verzeichissen automounten?" off \
 
 automount "andere beim Start mounten?" on \
 
 noatime "noatime ? " off \
 
 Floppy "vorhanden ?" off \
 
 "USB-Laufwerke" "und andere bewegliche - normal nicht!!!!" off \
 
 "Mountpoint zusammenstellen aus:" "" off \
 
 "Laufwerk z.B. sda5" "falls hier  " off \
 
 UUID "mehrer angekreuzt werden *1 " off \
 
 Label "alle aneinandergehängt  " on \
 
 3>&1 1>&2 2>&3`
 
 
if [[ "$AUSW" == *homes* ]] ; then
 
HOMEAUTO=auto
 
else
 
HOMEAUTO=noauto
 
fi
 
 
 
if [[ "$AUSW" == *automount* ]] ; then
 
ALLAUTO=auto
 
else
 
ALLAUTO=noauto
 
fi
 
 
if [[ "$AUSW" == *noatime* ]] ; then
 
KEINATIME=noatime
 
else
 
 KEINATIME=atime
 
fi
 
 
if [[ "$AUSW" == *System* ]] ; then
 
  SYSTEMAUTO=auto
 
else
 
  SYSTEMAUTO=noauto
 
fi
 
 
SAVEROOT=$(cat /etc/fstab | grep errors=remount)
 
KURZUUIDSAVEROOT=$(cat /etc/fstab | grep errors=remount | awk '{print $1}'| cut -b 1-3 )
 
cd /
 
umount -a
 
# mögliche wichtige Mountpoints zum erhalten
 
mount /
 
mount $(cat /etc/fstab | grep errors=remount | awk '{print $1}')
 
mount /home
 
mount /home/$NUTZER
 
mount /root
 
mkdir /etc/fstab.backup
 
 
# mv --backup=t funktioniert nicht, machen wirs halt selbst
 
for (( I=1; $I <= 200; I++ )) ; do
 
   if [ -e /etc/fstab.backup/fstab.bak~$I ] ; then
 
   continue
 
   fi
 
mv --backup=t  /etc/fstab.bak /etc/fstab.backup/fstab.bak~$I
 
break
 
done 
 
 
# mv /etc/fstab /etc/fstab.bak
 
 
echo -e "# /etc/fstab: static file system information. \n# \n#\t <file system>\t\t\t\t<mount point> \t<type>\t\t<options>\t<dump><pass> " > /etc/fstab.neu  # /etc/fstab wir damit überschrieben
 
 
 
rmdir /media/*
 
 
 
for LAUFWERK in sda sdb sdc sde sdf sdg sdh sdi ; do
 
   
 
if [ ! -e /dev/$LAUFWERK ] ; then
 
   # echo $LAUFWERK existiert nicht
 
   continue
 
fi
 
 
if ! [[ "$AUSW" == *USB-Laufwerke* ]] ; then
 
  REM=$(cat /sys/block/${LAUFWERK#/dev/}/removable 2>/dev/null)
 
  if [ "$REM" = "1" ]; then
 
  continue
 
  fi
 
fi
 
   for (( I=1; $I <= 20; I++ )) ; do
 
      if [ ! -e /dev/$LAUFWERK$I ] ; then
 
      continue
 
      fi 
 
   
 
    TYPE=$(blkid -o list /dev/$LAUFWERK$I | grep $LAUFWERK$I | awk '{print $2}')
 
 
     if [ "x$TYPE" = "x" ] ; then
 
     echo TYPE $TYPE von $LAUFWERK$I nicht ermittelt
 
      continue
 
     fi
 
 
   UUID_ERMITTELT2=$(blkid -o list /dev/$LAUFWERK$I | grep $LAUFWERK$I | awk '{print $7}' )
 
 
    if [ x$UUID_ERMITTELT2 = x ] ; then
 
       UUID_ERMITTELT2=$(blkid -o list /dev/$LAUFWERK$I| grep $LAUFWERK$I  | awk '{print $6}' )
 
     fi
 
     
 
     
 
     if [ x$UUID_ERMITTELT2 = x ] ; then
 
       UUID_ERMITTELT2=$(blkid -o list /dev/$LAUFWERK$I| grep $LAUFWERK$I --max-count=1 | awk '{print $5}' )
 
     fi
 
    
 
     if [ x$UUID_ERMITTELT2 = x ] ; then
 
       UUID_ERMITTELT2=$(blkid -o list /dev/$LAUFWERK$I | grep $LAUFWERK$I --max-count=1 | awk '{print $4}' )
 
     fi
 
 
    
 
   KURZUUID=$(echo $UUID_ERMITTELT2 | cut -b 1-4)
 
 
 
   
 
 
 
   LABELERSATZ=$TYPE-$(echo $LAUFWERK | cut -b 3)$I-$KURZUUID
 
   ERMITTELT=$(e2label /dev/$LAUFWERK$I)
 
   if [ x$ERMITTELT = x ] ; then
 
     e2label /dev/$LAUFWERK$I $LABELERSATZ
 
     ERMITTELT=$LABELERSATZ
 
   fi
 
   if [ ! -e /dev/disk/by-label/$ERMITTELT ] ; then 
 
         LABEL_AUS_BLKID=$(blkid -o list /dev/$LAUFWERK$I | grep $LAUFWERK$I --max-count=1 | awk '{print $3}')
 
       if [ -e /dev/disk/by-label/$LABEL_AUS_BLKID ] ; then 
 
          ERMITTELT=$LABEL_AUS_BLKID
 
        fi
 
   fi
 
   
 
   
 
     SCHONDA=$(cat /etc/fstab.neu | grep $ERMITTELT--max-count=1)
 
     if [ "x" != "x$SCHONDA" ] ; then 
 
     echo das ist schon da $SCHONDA mit LABEL $ERMITTELT
 
     continue
 
     fi
 
       
 
       MOUNTPOINT=$ERMITTELT
 
       
 
       if [[ "$AUSW" == *sda5* ]] ; then
 
        MOUNTPOINT=$LAUFWERK$I
 
         if [[ "$AUSW" == *Label* ]] ; then
 
         MOUNTPOINT=$MOUNTPOINT"_"$ERMITTELT
 
         fi
 
       fi 
 
             
 
      if [[ "$AUSW" == *UUID* ]] ; then
 
       MOUNTPOINT=$MOUNTPOINT"_"$UUID_ERMITTELT2
 
      fi
 
       
 
      
 
      WOEINGH=$(mount |grep $LAUFWERK$I --max-count=1 | awk '{print $3}')   
 
 
     if [ ! -e /dev/disk/by-uuid/$UUID_ERMITTELT2 ] ; then
 
       echo UUID $UUID_ERMITTELT2 nicht gültig mounten nach Device
 
              
 
              if [ $TYPE = swap ] ; then
 
            echo -e "# $LAUFWERK$I ist SWAP " >> /etc/fstab.neu
 
            echo -e "/dev/$LAUFWERK$I \t\tnone \tswap \t\tsw \t\t\t0 0" >> /etc/fstab.neu
 
            continue
 
          elif [ $TYPE = vfat ] ; then
 
            echo -e "# $LAUFWERK$I LABEL=$(dosfslabel $LAUFWERK$I) vfat " >> /etc/fstab.neu
 
            echo -e "/dev/$LAUFWERK$I /media/$MOUNTPOINT vfat $ALLAUTO,users,exec,umask=000,shortname=mixed,rw 0 0" >> /etc/fstab.neu     # UUID=5F76D7A66A61B554 /media/daten ntfs defaults 0 0 
 
           continue
 
          elif [ $TYPE = ntfs ] ; then
 
            echo -e "# $LAUFWERK$I ntfs " >> /etc/fstab.neu
 
            echo -e "/dev/$LAUFWERK$I /media/$MOUNTPOINT $ALLAUTO,ntfs defaults,user,$KEINATIME,rw 0 0" >> /etc/fstab.neu
 
            continue
 
            fi
 
          if [ "x$WOEINGH" = "x/" ] ; then
 
            echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT) ROOT-System \n/dev/$LAUFWERK$I\t\t$WOEINGH\t$TYPE\trw,errors=remount-ro,$KEINATIME \t0 0" >> /etc/fstab.neu 
 
            continue
 
           elif  [[ $SAVEROOT == *$KURZUUID* ]] ; then
 
            echo ist root und lies sich nicht erkennen nach mountpoint
 
            echo rootuuid ist kurz:  $KURZUUIDSAVEROOT
 
            echo ermitteltes für das Laufwerk ist: *$KURZUUID*
 
             echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT)  ROOT-System \n/dev/$LAUFWERK$I\t\t$WOEINGH\t$TYPE\trw,errors=remount-ro,$KEINATIME \t0 0" >> /etc/fstab.neu
 
            continue
 
          elif [ x$WOEINGH != x ] ; then
 
            echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT) \n/dev/$LAUFWERK$I\t/\t$TYPE\tdefaults,user,$KEINATIME,auto\t0 0" >> /etc/fstab.neu
 
            continue
 
          else 
 
            mount /dev/$LAUFWERK$I /mnt
 
         if [ -e /mnt/vmlinuz ] ; then
 
           echo -e "# /dev/$LAUFWERK$I (LABEL=$ERMITTELT) mit einem Linux System \n/dev/$LAUFWERK$I\t/media/$MOUNTPOINT\t$TYPE\tdefaults,user,$KEINATIME,$SYSTEMAUTO\t 0 0" >> /etc/fstab.neu
 
         elif [ -e /mnt/Desktop/ ] ; then
 
           echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT) mit einem Home-Verzeichniss \n/dev/$LAUFWERK$I\t/media/$MOUNTPOINT\t$TYPE\tdefaults,user,$KEINATIME,$HOMEAUTO \t0 0" >> /etc/fstab.neu
 
         else
 
           echo -e "#/dev/$LAUFWERK$I  (LABEL=$ERMITTELT) \n/dev/$LAUFWERK$I\t/media/$MOUNTPOINT\t$TYPE\tdefaults,user,$ALLAUTO,$KEINATIME\t0 0" >> /etc/fstab.neu
 
         fi
 
          fi
 
          
 
          while [[ $(mount | grep mnt) == *mnt* ]]  ; do
 
          umount /mnt
 
          done
 
          mkdir /media/$MOUNTPOINT
 
          chown $NUTZER:$NUTZER /media/$MOUNTPOINT
 
          mount  /media/$ERMITTEL
 
          chown $NUTZER:$NUTZER /media/$MOUNTPOINT/.
 
          continue
 
   fi
 
   
 
   
 
      
 
   SCHONDA=$(cat /etc/fstab.neu | grep $UUID_ERMITTELT2)
 
   if [ "x" != "x$SCHONDA" ] ; then 
 
     echo UUID von Laufwerk $LAUFWERK$I   ist schon da    $SCHONDA
 
     # read     
 
     continue
 
   fi
 
          if [ $TYPE = swap ] ; then
 
            echo -e "# $LAUFWERK$I ist SWAP " >> /etc/fstab.neu
 
            echo -e "UUID=$UUID_ERMITTELT2 \t\tnone \tswap \t\tsw \t\t\t0 0" >> /etc/fstab.neu
 
            continue
 
          elif [ $TYPE = vfat ] ; then
 
            # apt-get install dosfstools
 
            echo -e "# $LAUFWERK$I LABEL=$ERMITTELT (vfat) " >> /etc/fstab.neu
 
            echo -e "UUID=$UUID_ERMITTELT2 /media/$MOUNTPOINT vfat $ALLAUTO,users,exec,umask=000,shortname=mixed,rw 0 0" >> /etc/fstab.neu     # UUID=5F76D7A66A61B554 /media/daten ntfs defaults 0 0 
 
            continue
 
          elif [ $TYPE = ntfs ] ; then
 
            echo -e "# $LAUFWERK$I $ERMITTELT (ntfs) " >> /etc/fstab.neu
 
            echo -e "UUID=$UUID_ERMITTELT2 /media/$MOUNTPOINT ntfs $ALLAUTO,defaults,user,$KEINATIME,rw 0 0" >> /etc/fstab.neu
 
            continue
 
        
 
            elif [ "x$WOEINGH" = "x/" ] ; then
 
            echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT)  ROOT-System \nUUID=$UUID_ERMITTELT2\t\t/\t$TYPE\trw,errors=remount-ro,$KEINATIME \t0 0" >> /etc/fstab.neu 
 
            continue
 
            elif  [[ $SAVEROOT == *$KURZUUID* ]] ; then
 
            echo ist root und lies sich nicht erkennen nach mountpoint
 
            echo rootuuid ist kurz:  $KURZUUIDSAVEROOT
 
            echo ermitteltes für das Laufwerk ist: *$KURZUUID*
 
            echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT)  ROOT-System \nUUID=$UUID_ERMITTELT2\t\t/\t$TYPE\trw,errors=remount-ro,$KEINATIME \t0 0" >> /etc/fstab.neu 
 
            continue
 
           elif [ x$WOEINGH != x ] ; then
 
            echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT) \nUUID=$UUID_ERMITTELT2\t$WOEINGH\t$TYPE\tdefaults,user,$KEINATIME,auto\t0 0" >> /etc/fstab.neu
 
            continue
 
           else 
 
            mount /dev/$LAUFWERK$I /mnt
 
         if [ -e /mnt/vmlinuz ] ; then
 
           echo -e "# /dev/$LAUFWERK$I (LABEL=$ERMITTELT) mit einem Linux System \nUUID=$UUID_ERMITTELT2\t/media/$MOUNTPOINT\t$TYPE\tdefaults,user,$KEINATIME,$SYSTEMAUTO \t0 0" >> /etc/fstab.neu
 
         elif [ -e /mnt/Desktop/ ] ; then
 
           echo -e "# /dev/$LAUFWERK$I  (LABEL=$ERMITTELT) mit einem Home-Verzeichniss \nUUID=$UUID_ERMITTELT2\t/media/$MOUNTPOINT\t$TYPE\tdefaults,user,$KEINATIME,$HOMEAUTO \t0 0" >> /etc/fstab.neu
 
         else
 
           echo -e "#/dev/$LAUFWERK$I  (LABEL=$ERMITTELT) \nUUID=$UUID_ERMITTELT2\t/media/$MOUNTPOINT\t$TYPE\t$ALLAUTO,defaults,user,$KEINATIME\t0 0" >> /etc/fstab.neu
 
         fi
 
         
 
          while [[ $(mount | grep mnt) == *mnt* ]]  ; do
 
          umount /mnt 
 
          done
 
       fi
 
            
 
           while [[ $(mount | grep mnt) == *mnt* ]]  ; do
 
          umount /mnt
 
          done
 
                
 
            mkdir /media/$MOUNTPOINT
 
            chown $NUTZER:$NUTZER /media/$MOUNTPOINT
 
            mount  /media/$MOUNTPOINT
 
            chown $NUTZER:$NUTZER /media/$MOUNTPOINT/.
 
   done
 
 
done
 
echo >> /etc/fstab.neu
 
 
if [[ "$AUSW" == *Floppy* ]] ; then
 
echo /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0  >> /etc/fstab.neu
 
mkdir /media/floppy0
 
fi
 
 
echo /dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0  >> /etc/fstab.neu
 
mkdir /media/cdrom0
 
echo >> /etc/fstab.neu
 
 
 
 
dialog --timeout 35 --exit-label "Das ist die neue /etc/fstab.neu" --textbox "/etc/fstab.neu" 35 130
 
# dialog --timeout 35 "Das ist die neue /etc/fstab.neu" --textbox "/etc/fstab.neu" 35 130
 
dialog --yesno "Ursprüngliche damit überschreiben?" 0 0
 
# 0=ja; 1=nein
 
antwort=$?
 
if [ $antwort = 0 ]; then
 
 
mv /etc/fstab /etc/fstab.bak
 
mv /etc/fstab.neu /etc/fstab
 
fi
 
 
mount -a
 
 
 
 
 
 |