19.03.2024, 08:54 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]

Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
jokobau
Titel: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 27.09.2011, 07:45 Uhr



Anmeldung: 08. Jul 2006
Beiträge: 976
Wohnort: Sömmerda / Thüringen
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





Zuletzt bearbeitet von jokobau am 18.04.2012, 08:44 Uhr, insgesamt 6 Male bearbeitet
 
 Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden  
Antworten mit Zitat Nach oben
Kano
Titel: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 27.09.2011, 11:12 Uhr



Anmeldung: 17. Dez 2003
Beiträge: 16783

Verwende mal code tags.
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
thebluesman
Titel:   BeitragVerfasst am: 27.09.2011, 12:05 Uhr



Anmeldung: 06. Okt 2007
Beiträge: 389
Wohnort: Leipzig
wollte es mal testen, habs unter "fstabscript" gespeichert und ausführbar gemacht, bekomme aber Fehlermeldung:

Code:
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#
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
Kano
Titel:   BeitragVerfasst am: 27.09.2011, 12:18 Uhr



Anmeldung: 17. Dez 2003
Beiträge: 16783

Code:
#!/bin/bash
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
thebluesman
Titel:   BeitragVerfasst am: 27.09.2011, 13:15 Uhr



Anmeldung: 06. Okt 2007
Beiträge: 389
Wohnort: Leipzig
@kano
thx.
Smilie
@jokobau
script funzt, wenn man die 1. Zeile lt kano korrigiert hat.

Danke!
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
jokobau
Titel: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 27.09.2011, 14:51 Uhr



Anmeldung: 08. Jul 2006
Beiträge: 976
Wohnort: Sömmerda / Thüringen
Kano hat folgendes geschrieben::
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?
 
 Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden  
Antworten mit Zitat Nach oben
Kano
Titel: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 27.09.2011, 16:07 Uhr



Anmeldung: 17. Dez 2003
Beiträge: 16783

[ code ] am anfang [ / code ] am ende (ohne leerzeichen). Was hat das mit dem editor zu tun?
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
jokobau
Titel: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 27.09.2011, 16:24 Uhr



Anmeldung: 08. Jul 2006
Beiträge: 976
Wohnort: Sömmerda / Thüringen
ach so
 
 Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden  
Antworten mit Zitat Nach oben
jokobau
Titel: Re: zum schreiben der /etc/fstab und anlegen von Mountpoints  BeitragVerfasst am: 18.04.2012, 08:45 Uhr



Anmeldung: 08. Jul 2006
Beiträge: 976
Wohnort: 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.
 
 Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden  
Antworten mit Zitat Nach oben
Beiträge vom vorherigen Thema anzeigen:     
Gehe zu:  
Alle Zeiten sind GMT + 1 Stunde
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
PNphpBB2 © 2003-2007 
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.