Publicar nuevo tema   Responder al tema
Ver tema anterior Versión imprimible Entre para ver sus mensajes privados Ver tema siguiente
Autor Mensaje
jokobau
Asunto: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 27 Sep, 2011 - 07:45 AM



Registrado: 08 Jul, 2006
Mensajes: 976
Ubicación: Sömmerda / Thüringen
Código:


#! /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





Ultima edición por jokobau el 18 Abr, 2012 - 08:44 AM, editado 6 veces
 
 Ver perfil de usuario Enviar mensaje privado Enviar email  
Responder citando Volver arriba
Kano
Asunto: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 27 Sep, 2011 - 11:12 AM



Registrado: 17 Dic, 2003
Mensajes: 16818

Verwende mal code tags.
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
thebluesman
Asunto:   MensajePublicado: 27 Sep, 2011 - 12:05 PM



Registrado: 06 Oct, 2007
Mensajes: 389
Ubicación: Leipzig
wollte es mal testen, habs unter "fstabscript" gespeichert und ausführbar gemacht, bekomme aber Fehlermeldung:

Código:
root@claudiasrechner:/home/claudi/Dokumente# chmod +x fstabscript
root@claudiasrechner:/home/claudi/Dokumente# ./fstabscript
bash: ./fstabscript: bash: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
root@claudiasrechner:/home/claudi/Dokumente#
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
Kano
Asunto:   MensajePublicado: 27 Sep, 2011 - 12:18 PM



Registrado: 17 Dic, 2003
Mensajes: 16818

Código:
#!/bin/bash
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
thebluesman
Asunto:   MensajePublicado: 27 Sep, 2011 - 01:15 PM



Registrado: 06 Oct, 2007
Mensajes: 389
Ubicación: Leipzig
@kano
thx.
Smilie
@jokobau
script funzt, wenn man die 1. Zeile lt kano korrigiert hat.

Danke!
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
jokobau
Asunto: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 27 Sep, 2011 - 02:51 PM



Registrado: 08 Jul, 2006
Mensajes: 976
Ubicación: Sömmerda / Thüringen
Kano escribió:
Verwende mal code tags.


Code Tags sind wohl die Textformatierung hier, oder?
Problem: ich schreibe in kate und kopiere dann hier rein.
Dann ist die ganze schöne Formatierung futsch. Geht das anders?
 
 Ver perfil de usuario Enviar mensaje privado Enviar email  
Responder citando Volver arriba
Kano
Asunto: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 27 Sep, 2011 - 04:07 PM



Registrado: 17 Dic, 2003
Mensajes: 16818

[ code ] am anfang [ / code ] am ende (ohne leerzeichen). Was hat das mit dem editor zu tun?
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
jokobau
Asunto: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 27 Sep, 2011 - 04:24 PM



Registrado: 08 Jul, 2006
Mensajes: 976
Ubicación: Sömmerda / Thüringen
ach so
 
 Ver perfil de usuario Enviar mensaje privado Enviar email  
Responder citando Volver arriba
jokobau
Asunto: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  MensajePublicado: 18 Abr, 2012 - 08:45 AM



Registrado: 08 Jul, 2006
Mensajes: 976
Ubicación: Sömmerda / Thüringen
Neue Version eingestellt.
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 der alten /etc/fstab wird nachgefragt.
 
 Ver perfil de usuario Enviar mensaje privado Enviar email  
Responder citando Volver arriba
Mostrar mensajes anteriores:     
Cambiar a:  
Todas las horas son GMT + 1 Hora
Publicar nuevo tema   Responder al tema
Ver tema anterior Versión imprimible Entre para ver sus mensajes privados Ver tema siguiente
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Créditos