noob met bash scripten

Door loreom op zondag 20 juli 2008 20:36 - Reacties (7)
Categorie: meuk, Views: 6.729

Ondanks dat ik al weer een lange tijd een fervent gebruiker van linux op de desktop ben, heb ik nog maar weinig met de ware kracht van linux geŽxperimenteerd.
MIjn eerste ervaring met linux was het installeren van Freesco op een 386. Dit zal ergens in 1999 zijn geweest. Later (2001) mezelf voor een uitdaging gesteld door installatie-cd van Slackware 8 aan te schaffen. Mijn idee hier achter was het uitproberen van linux op de desktop. Na veel uit te proberen, en vooral lezen is het gelukt, maar de definitieve overstap van Windows naar een linux-desktop kwam in 2004, met de introductie van Ubuntu. 4.10 kwam, zag en overwon op mijn desktop. Sindsdien niet meer anders.

Nu heb ik een aantal weken geleden een nieuwe laptop aangeschaft, en hierop heb ik Ubuntu 8.04 geÔnstalleerd. Ook hier weer de spreekwoordelijke trein. Aangezien ik behoorlijk wat zooi op een nfs-server heb staan, wil ik deze regelmatig aanroepen op mijn laptop. Nu kan dat natuurlijk makkelijk door /etc/fstab aan te passen, en daarna sudo mount /media/Files en sudo umount /media/Files te gebruiken, maar ik dacht dat het met een scriptje makkelijker moet kunnen.

Zie hier mijn eerste bashscript:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

#***********************************************#
#           mount.sh                     #
#       written by loreom                # 
#         July 20, 2008                  #
#***********************************************#

# script om nfs shares te mounten

# variables
SERVER_IP="10.0.1.6"
SHARE_1="/shared/media"
SHARE_2="/shared/files"
MOUNTPOINT_1="/media/Media"
MOUNTPOINT_2="/media/Files"
TYPE="-t nfs"
OPTIONS="-o tcp,rsize=8192,wsize=8192,intr,rw,bg,nosuid,port=2049,mountport=65003"

# mount shares
mounting ()
{
 sudo mount $TYPE $SERVER_IP":"$SHARE_1 $MOUNTPOINT_1 $OPTIONS
 sudo mount $TYPE $SERVER_IP":"$SHARE_2 $MOUNTPOINT_2 $OPTIONS
}
# umount shares
umounting ()
{
 sudo umount $MOUNTPOINT_1 $MOUNTPOINT_2
}

## check status
# controle door mount te greppen op shares en dit in mount.log op te slaan
# md5sum controle of mount.log overeenkomst met mount.md5
# mount.md5 bevat md5 hash van mount.log indien shares gemount zijn
# dus als mount.md5test niet gelijk is aan mount.md5 zijn de shares niet gemount

# tmpfiles aanmaken
touch mount.log
touch mount.md5test
# tmpfiles vullen
mount | grep $MOUNTPOINT_1 > mount.log
mount | grep $MOUNTPOINT_2 >> mount.log
md5sum mount.log > mount.md5test
# md5sum test
if (diff mount.md5 mount.md5test > /dev/null)
 then
  echo "unmounting shares"
  umounting
 else
  echo "mounting shares"
  mounting
fi

# tmpfiles verwijderen
rm mount.log
rm mount.md5test

exit



Waarschijnlijk is het nodeloos complex, maar het werkt. Enige aanvullingen?

Volgende: fifi2008 11-'08 fifi2008
Volgende: Eindelijk....? 07-'08 Eindelijk....?

Reacties


Door Tweakers user Kerneldump, zondag 20 juli 2008 21:28

Je zou de mount status ook kunnen testen door iets met het commando 'mount'


code:
1
2
3
4
rick@kobalt:~$ DEVICE='/dev/sda1' ; OUTPUT=`mount | grep ${DEVICE} | wc -l` ; if [ ${OUTPUT} -eq 1 ]; then echo "Device mounted" ; else echo "Device not mounted" ; fi
Device mounted
rick@kobalt:~$ DEVICE='/dev/sdz1' ; OUTPUT=`mount | grep ${DEVICE} | wc -l` ; if [ ${OUTPUT} -eq 1 ]; then echo "Device mounted" ; else echo "Device not mounted" ; fi
Device not mounted


Door Tweakers user Pumbaa82, maandag 21 juli 2008 08:34

Ook pas met bash aan de gang gegaan, dit was mijn manier om te testen of een mount bestond, gewoon de map waar de mount aan gekoppeld is uitlezen en als dit niks teruggeeft is de mount niet aanwezig.


code:
1
2
3
4
5
6
7
8
9
10
11
mnttst=`ls /mnt/media`;
#controle of lokale mount locatie te lezen

#Controleren of de mount aanwezig is.
if [ "$mnttst" != "" ]
then
        echo "mount is aanwezig, geen actie nodig.";
else
        echo "mount niet aanwezig, begin mount actie.";
        mount 10.0.1.6:/shared/media /mnt/media
fi;


Door Tweakers user loreom, maandag 21 juli 2008 10:29

@Pumbaa82,
Je oplossing lijkt eenvoudiger, maar is naar mijn idee niet helemaal volledig. Wat nu als de mount wel aanwezig is, maar de share geen gegevens bevat. Dan zal jouw oplossing alsnog proberen de share te mounten.

Door Tweakers user chewbacca, maandag 21 juli 2008 22:22

Speel eens met autofs.

Met name de executable map '/etc/auto.net'. Deze is erg makkelijk voor het dynamisch mounten van nfs-exports. De filesystems worden dan gemount onder '/net/<hostname>/<pad naar het geexporteerde filesystem>'.

In jou geval dus '/net/10.0.1.6/shared/media' en '/net/10.0.1.6/shared/files'

Door Tweakers user TD-er, dinsdag 22 juli 2008 12:23

Je zou ook eens kunnen experimenteren met NFS4.
Die is een stuk sneller en robuster wanneer de serverkant ineens onbereikbaar is, wat met een laptop niet ondenkbaar is.

Met NFS4 kun je een hele export-structuur ineens mounten.

NFSv4 exporteren
NFSv4 heeft een paar nieuwe dingen, waaronder het kunnen exporteren van losse filesystemen in 1 path, zodat je op een machine eigenlijk alleen maar 1 mount hoeft te doen om alle onderliggende exports te mounten.

Voorbeeld /etc/exports :

code:
1
2
3
4
5
/nfs4exports 192.168.1.0/24(ro,sync,insecure,root_squash,no_subtree_check,fsid=0)
/nfs4exports/data   192.168.1.0/24(rw,nohide,sync,insecure,root_squash,no_subtree_check)
/nfs4exports/home   192.168.1.0/24(rw,nohide,sync,insecure,no_root_squash,no_subtree_check)
/nfs4exports/ftp   192.168.1.0/24(rw,nohide,sync,insecure,root_squash,no_subtree_check)
/nfs4exports/www   192.168.1.0/24(rw,nohide,sync,insecure,root_squash,no_subtree_check)



NFSv4 mounten
Een voorbeeld voor het definieren van mounts in de fstab:

code:
1
2
3
4
5
6
7
8
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>         <dump>  <pass>
/dev/xvda1        /             ext3    rw,noatime        0       1
/dev/xvdb1        none          swap    defaults          0       0
192.168.1.5:/ftp  /FTPmap       nfs4    rw,_netdev,noauto 0       0
192.168.1.5:/home /home         nfs4    rw,_netdev,noauto 0       0
192.168.1.5:/www  /www          nfs4    rw,_netdev,noauto 0       0



Snelheid NFSv4
De metingen met bonnie++ (filesystembenchmark) zijn gedaan op een NFSv4 mount naar de fileserver over gbit.

code:
1
2
3
4
5
6
7
8
9
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
mailserver    2560M 51158  82 45530   5 26788   3 45326  73 60513   2 283.8   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16   253   0 11048   2   666   0   295   0 12370   0   697   0
mailserver,2560M,51158,82,45530,5,26788,3,45326,73,60513,2,283.8,0,16,253,0,11048,2,666,0,295,0,12370,0,697,0



Problemen onder Debian

Het mounten onder Debian gaat fout tijdens het booten, dus als omweg kun je dit proberen: Een file (executable) /etc/init.d/mymount

code:
1
2
3
4
#!/bin/bash
mount /FTPmap
mount /home
mount /www


En een symlink vanuit het gewenste runlevel naar dat scriptje:

code:
1
2
webserver:~# ls -l /etc/rc2.d/ |grep mymount
lrwxrwxrwx 1 root root  17 Mar 17 10:30 S99mymount -> ../init.d/mymount


Omdat het mounten het booten heel erg vertraagd en uiteindelijk alsnog faalt, is de optie noauto nodig in de fstab.

Je kunt de structuur in de export-tree ook samenstellen met de --bind optie van mount. Dan kun je bijv je /home ook mounten op /nfsexports.

Door Tweakers user loreom, dinsdag 22 juli 2008 22:18

@TD-er, ik zal eens gaan kijken naar NFSv4. Voorlopig doet mijn scriptje wat ie moet doen, nl met 1 commando mijn shares mounten / unmounten op het moment dat ik het aanroep. Ik heb niet altijd een netwerk, en dan gaat het sowieso niet lukken, en vanaf een andere locatie zal ik toch eerst een VPN verbinding open moeten hebben.

Door Tweakers user pjottum, vrijdag 28 november 2008 17:10

nja, de automounter is hier een stuk handiger voor - en ook voor bedacht.
Check ook de autofs manpage eens..

Reageren is niet meer mogelijk