[Problem] USB Stick wird nicht automatisch gemountet

Meine Klo-Partition wird über Label "LOGS" gemountet, ja das klappt auch.
 
Ich hatte in letzter Zeit mehrere USB-Sticks in der Hand und die hatten allesamt keine Partitionstabelle.

Gruß
Oliver
 
Hallo,

ich habe endlich mal wieder etwas Zeit gefunden um meinem Problem auf die Spur zu kommen.
Dazu habe ich zunächst einmal ein neues Image mit den tagesaktuellen Patches aus dem svn erstellt.
Leider funktioniert das automatische mounten damit immer noch nicht :(
Also habe ich mich mal auf die Suche begeben und herausgefunden, das das mounten über das libmodmount.sh stattfindet.
Dabei ist mir aufgefallen, das die Meldungen im Log nicht unbedingt etwas damit zu tun haben was tatsächlich gerade passiert.
So wird z.B. in der Funktion do_mount_locked() innerhalb der while Schleife ausgegeben, "Mounting ..."
Tatsächlich wird aber lediglich das Verzeichnis uStor01 angelegt.
Das eigentliche mounten findet viel später in einer anderen Funktion statt.

Um dem Problem auf die Schliche zu kommen habe ich daher mal das libmodmount.sh etwas modifiziert.

Code:
# mount according to type of filesystem
# return code:
#  true - all went well
#  other - something went wrong
mount_fs() {
	local dev_node=$1                                                         # device node
	local mnt_path=$2                                                         # mount path
	[ $# -ge 3 ] && local rw_mode=$3 || local rw_mode=rw                      # read/write mode
	[ $# -ge 4 ] && local ftp_uid=$4 || local ftp_uid=0                       # ftp user id
	[ $# -ge 5 ] && local ftp_gid=$5 || local ftp_gid=0                       # ftp group id

	fs_type=`blkid $dev_node | sed -nr 's!.*TYPE="([^"]*).*!\1!p'`            # fs type detection

	log_freetz notice "fs:$fs_type path:$mnt_path dev:$mnt_dev"

	case "$fs_type" in
		vfat)
			mount -t vfat -o $rw_mode,uid=$ftp_uid,gid=$ftp_gid,fmask=0000,dmask=0000 $dev_node $mnt_path
			err_mo=$?
			;;
		ext2|ext3|ext4|reiserfs)
			mount -t $fs_type $dev_node $mnt_path -o noatime,nodiratime,rw,async
			err_mo=$?
			;;
		hfs|hfsplus)
			mount -t $fs_type $dev_node $mnt_path
			err_mo=$?
			;;
		ntfs)
			local ntfs_bin="/bin/ntfs-3g"
			[ -x "$ntfs_bin" ] && { $ntfs_bin $dev_node $mnt_path -o force ; err_mo=$? ; } || err_mo=111
			;;
		swap)
			/etc/init.d/rc.swap autostart $dev_node
			err_mo=$((17+$?))
			;;
		*)      
			fs_type="unknown"                                    # set unknown file system type if detection failed
			mount $dev_node $mnt_path
			err_mo=$?
			;;
	esac
	echo -n "$fs_type"
	return $err_mo
}

# mount function
# used by /etc/hotplug/run_mount
# seperated from do_mount since fw 04.89
do_mount_locked() {
	local mnt_failure=0
	local rcftpd="/etc/init.d/rc.ftpd"
	local tammnt="/var/tam/mount"
	local mnt_rw=rw
	[ $# -ge 2 ] && local mnt_dev=$2 || return 1
	[ $# -ge 3 ] && local mnt_part_num=$3 || return 1
	local mnt_blk_dev=${mnt_dev##/dev/}
	local mnt_main_dev=$(echo $mnt_blk_dev | sed -e 's#\(.\{0,3\}\).*#\1#g')
	local mnt_med_num=0
	local mnt_name
	local mnt_path
#	local fs_type
	mount | grep -q "$mnt_dev on /var/media/" && return 0                     # device already mounted
	while [ $mnt_med_num -le 9 ]; do                                          # sda1...sda9
		mnt_name=$(find_mnt_name $mnt_main_dev $mnt_med_num $mnt_part_num)    # find name
		mnt_path=$FTPDIR/$mnt_name
		if [ ! -d $mnt_path ]; then
			log_freetz notice "creating $mnt_path for device $mnt_dev"
			mkdir -p $mnt_path
			break
		fi
		let mnt_med_num++
	done
	chmod 755 $FTPDIR                                                         # chmod for ftp top directory
	local old_umask=$(umask)                                                  # store actual mask
	umask 0
	log_freetz notice "Mounting device $mnt_dev ($mnt_rw,$FTPUID,$FTPGID) on $mnt_path"
#	fs_type=$(mount_fs $mnt_dev $mnt_path $mnt_rw $FTPUID $FTPGID)            # FREETZ mount
	mount_fs $mnt_dev $mnt_path $mnt_rw $FTPUID $FTPGID                       # FREETZ mount
	local err_fs_mount=$?
	if [ $err_fs_mount -eq 0 ]; then
		umask $old_umask
		eventadd 140 "$mnt_name ($mnt_dev)"
		log_freetz notice "Partition $mnt_name ($mnt_dev / $fs_type) mounted successfully"
		if [ -x $rcftpd ]; then                                               # start/enable ftpd
			[ -x "$(which inetdctl)" ] && inetdctl enable ftpd || $rcftpd start
		fi
		/etc/init.d/rc.swap autostart $mnt_path                               # swap

In meinem Log finde ich jetzt folgendes:
Code:
[INFO] creating /var/media/ftp/uStor01 for device /dev/sda1
[INFO] Mounting device /dev/sda1 (rw,0,0) on /var/media/ftp/uStor01
[INFO] Partition uStor01 (/dev/sda1 / ) mounted successfully

Die Log Ausgaben zeigen, das sda1 als Device erkannt wird und dann zunächst das Verzeichnis uStor01 angelegt wird.
Das läßt sich auch über telnet so verifizieren.
Anschließend sollte laut log die Funktion mount_fs mit den richtigen Parametern aufgerufen werden.
Hier vermisse ich allerdings die log Ausgabe. Ist der Aufruf nun erfolgt, oder nicht?
Jedenfalls ist nach dem Funktionsaufruf die Variable fs_type leer, denn sonst hätte der Dateisystemtyp hinter "/dev/sda1 / " auftauchen müssen.
Ich erinnere mich, das in der originalen libmodmount.sh dort die ersten Zeichen der Ausgabe von mount aufgetaucht sind.

Leider bin ich nicht der bash Profi, so das ich erst einmal nicht weiter weiss.

Für mich sieht es so aus als ob einige Passagen aus dem Script nicht funktionsfähig sind.
So schien die Anweisung
Code:
fs_type=$("...")
völlig ins Nirwana zu laufen.

Im übrigen kann man den USB Stick beliebig oft abziehen und wieder neu einstecken.
Die Log Ausgaben bleiben gleich, ein mount erfolgt nicht.

Wenn ich jedoch über telnet ein
Code:
mount /dev/sda1 /var/media/ftp/uStor01
absetze, erfolgt das mounten ohne Probleme.

Ich hoffe die Experten hier können ein wenig Licht ins Dunkel bringen ....
 
Hallo,

noch eine Frage.
Kann man das libmodmount.sh script irgendwie ändern und testen, ohne die Box neu flashen zu müssen?

Gruß
Henning
 
Code:
cd ~/
cp /usr/lib/libmodmount.sh .
mount -o bind ./libmodmount.sh /usr/lib/libmodmount.sh
Gruß
Oliver
 
Hallo,

@Oliver
Vielen Dank für den Tip. Das erleichtert das Testen ungemein.

@All
Ich habe bei meinen Tests einen interessanten Effekt beobachtet.
Wenn ich die Funktion mount_fs() und natürlich auch den Aufruf der Funktion im libmodmount.sh z.B. in mount_freetz_fs() umbenenne, dann funktioniert das automatische mounten zumindest im Testmodus einwandfrei.
Kann es sein, das es irgendwo anders noch eine Funktion mount_fs gibt, die an Stelle der libmodmount.sh internen Funktion aufgerufen wird, und damit die Ganze Verwirrung stiftet?

Gruß
Hennning
 
So,

es ist jetzt amtlich.
Wenn ich im libmodmount.sh die Funktion mount_fs() umbenenne, dann funktioniert das mounten einwandfrei.
Ansonsten wird scheinbar die Funktion mount_fs() aus dem speed2fritz ext2 patch aufgerufen. Und die scheint im hotplug angezogen zu werden.
Leider tickt die anders, so das nichts geht :(
Es wäre schön, wenn die Funktionen zukünftig eindeutigen Namen hätten, damit keine Verwirrung aufkommt.

Gruß
Henning
 
Und warum müssen wir uns an speed2fritz anpassen? Die Funktion hies bei uns schon immer so.

MfG
 
Hallo,

warum die Aufregung?

Ich weiss gar nicht wer aktuell für welchen Teil verantwortlich ist.
Und ich habe auch nicht gesagt, wer etwas tun soll, oder muss.

Ich weiss auch nicht seit wann es zu dem Problem kommt. Ende 2009 war es jedenfalls noch nicht da.
Ich habe lediglich festgestellt, das es ein Problem gibt. Und da aus meiner Sicht das Freetzmount nicht funktioniert hat, habe ich davon ausgehend eine Lösung gesucht.
Und schließlich einen von vermutlich mehreren Lösungsansätzen gefunden und diesen aufgezeigt.
Außerdem habe ich im Bereich Linux nur rudimentäre Programmierkenntnisse, so das ich mir niemals anmaßen würde Vorschriften machen zu wollen.
Wenn jemand Fragen zu COBOL und Mainframes hat bin ich aber gern bereit mit meinen Erfahrungen zu helfen.

Nach meiner (unmaßgeblichen) Erfahrung macht es sich jedoch unabhängig von der Progarammiersprache immer gut, wenn etwas eindeutig gelöst ist.
Und das würde unter anderem für jedes Script bedeuten, das intern aufgerufene Funktionen immer eine gleichartige Nomenklatur verwenden.
Also hier z.B. statt mount_fs() libmodmount_mount_fs() um deutlich zu machen, das diese Funktion lokal im libmodmount liegt.
Damit könnte man sich ohne großen Zusatzaufwand bereits im Vorfeld potentiellen Ärger ersparen.

Aber wie gesagt, das ist nur eine Anmerkung, die man gern diskutieren kann, aber nicht muss. Dabei gilt es natürlich zu bedenken, das zu viele Einschränkungen bzw. Vorgaben auch schnell kontraproduktiv werden können, da sie die Kreativität der Entwickler bremsen könnten.

Gruß
Henning
 
1. Du verwendest zusätzlich zu FREETZ noch speed2fritz und wenn dort etwas nicht passt, dann sind wir hier eine falsche Anlaufstelle.
2. FREETZMOUNT ist eng mit AVM-eigenen hotplug-Skripten verankert. Die Namensgebung für Funktionen ist in meisten Fällen durch AVM und nicht durch uns entstanden. Aus Kompatibilitätsgründen ist es besser die Namen (da wo es erforderlich ist) auch so zu behalten.
3. FREETZMOUNT wurde von mir als Ersatz für zuvor im FREETZ vorhandene mount-Patches ins Leben gerufen. speed2fritz verwendet anscheinend die alte Methode mit dem rumpatchen noch. Daher hackt es bei dir. Im Grunde genommen wollen beide (sowohl FREETZMOUNT als auch speed2fritz) schon die gleiche Funktion ersetzen/nutzen, leider ist speed2fritz anscheinend in diesem Fall nicht auf FREETZMOUNT abgestimmt.
4. Letzte Zeit hat AVM ziemlich viel an Ihren eigenen hotplug-Skripten geändert. Mal gab es ext2-Module schon bei AVM, mal wurden sie von AVM weg gelassen. Ich vermute mal, dass Speedports eine etwas ältere (oder sagen wir besser andere) Realisierung bezüglich ext2 und hotplug-Skripte haben, als die "original"-Fritz!Boxen. Daher ist anscheinend diese Rumpatcherei von speed2fritz erforderlich. Leider ist sie nach deiner Beobachtung nicht mit FREETZMOUNT kompatibel. Aber das ist nicht die Frage hierher, sondern zu speed2fritz.

MfG
 
JPascher hat mir auf die PN geantwortet. So wie ich ihn verstanden habe, dann ist der angesprochene Patch in speed2fritz optional und wird kaum genutzt. Falls du also weiterhin das Tandem speed2fritz + Freetz nutzen willst, dann solltest du diesen ext2-Patch in speed2fritz deaktivieren.

Gruß
Oliver
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.