ISO-Image mounten unter FreeBSD 5.x

moonlook

Meteorist
Also, ich bin heut grad mal drüber gestolpert, dass ich ein Iso-image mounten wollte unter fbsd5.x und mich nur dunkel dran erinnerte, wie das unter linux mal ging.
Marzl hat mich drauf gebracht, die Info dazu findet Ihr unter

file:/usr/share/doc/handbook/disks-virtual.html

Mich verwunderte, dass mount-cd9660 von mir ein Device haben wollte als Input. O.g. Datei erläutert, dass man auch Iso-Dateien als Device einhängen kann.
Und zwar mit mdconfig, welches als Modul geladen md.ko oder als Kerneloption "device md" vorraussetzt.
Also Modul schnell geladen:

kldload md.ko

und auch gleich ab damit in die /boot/loader.conf:

md_load="YES"

So, Vorraussetzung fertig, man legt nun mit mdconfig und einem ISO-Image ein Device an:

mdconfig -a -t vnode -f /Pfad/zum/ISO-Image -u 0

Danach das Device mounten:

mount /dev/md0 /mnt

Je nach Image kann es natürlich sein, dass Ihr andere Bereiche mounten wollt, also in der Art:
mount /dev/md0c /mnt

Jetzt kann sich das Image anschauen usw.
Falls man es wieder ausgehängt hat, besteht immernoch das Device /dev/md0.
Dies muss nun auch wieder entfernt werden mit mdconfig:

mdconfig -d -u 0

Auskunft über die Optionen mdconfig's stehen in der zugehörigen Manpage.
 
Zuletzt bearbeitet:
Und unter 4.8 gehts mit vnconfig.
Siehe Handbuch, da steht das naemlich in beiden Versionen drin :D
 
Saubere Sache, aber mal etwas anderes.
Was würde denn passieren wenn ich das Image rw mounte und dann anfange darin rumzueditieren, zB einen neuen Ordner erstelle, etc.
Einfach nur ein unbrauchbares Image?

buebo
 
mhmmmm, interessante these.....
ma testen. ich denke es kommt darauf an in welchen format das iso erstellt wurde.
 
Original geschrieben von buebo
Saubere Sache, aber mal etwas anderes.
Was würde denn passieren wenn ich das Image rw mounte und dann anfange darin rumzueditieren, zB einen neuen Ordner erstelle, etc.
Einfach nur ein unbrauchbares Image?

buebo
Das ist afaik problemlos möglich.
 
Meines Wissens nach unterstützen bisher weder das cd9660 noch das udf Filesystem schreibende Zugriffe.
 
Meines Wissens nach unterstützen bisher weder das cd9660 noch das udf Filesystem schreibende Zugriffe.

Ja, das stimmt, siehe /usr/src/sys/isofs/cd9660/cd9660_vfsops.c:

...
VFS_SET(cd9660_vfsops, cd9660, VFCF_READONLY);


und /usr/src/sys/fs/udf/udf_vfsops.c:

...
VFS_SET(udf_vfsops, udf, VFCF_READONLY);

@buebo: Du hast also nicht mal die Chance, das Image kaputt zu machen (zumindest nicht über den loopback mount)... :-)
 
ISO9660 ist kein RAM-Dateisystem, deshalb kann man da nichts vernuenftig dran editieren. Um einzelne Bytes rumzuschubbsen reicht es natuerlich allemal.
 
buebo schrieb:
Saubere Sache, aber mal etwas anderes.
Was würde denn passieren wenn ich das Image rw mounte und dann anfange darin rumzueditieren, zB einen neuen Ordner erstelle, etc.
Einfach nur ein unbrauchbares Image?

buebo

rw-mount hat bei mir weder unter 4.x noch unter 5.x funktioniert...
cd9660 kann das nicht!
 
Zuletzt bearbeitet:
was muss ich machen damit das image ein User mounten kann? den das anlegen von den virtuellen devices gehts bereits, nur das mounten klappt nicht! der root muss erstmal nach dem anlegen von dem md0 durch den user das hier "/etc/rc.d/devfs restart" machen. und in der devfs.conf sind ist natürlich das laufwerk md0 richtig gesetzt. dann kann der user auch das image mounten, vorher nicht.
wie kann ich das umgehen ?
 
cd9660 Filesystem mounten

Hallo,

da happy den Thread mir gerade in´s Blickfeld geholt hat,
habe ich das gerade mal mit einem *.iso Image ausprobiert.
Allerdings funktionierte bei mir eben der mount Befehl
erst nach genauer Angabe des Filesystems,
das ich mounten wollte, in meinem Fall cd9660.

Hier die Eingabe, die bei mir funktionierte:
Code:
mount -t cd9660 /dev/md0 /mnt

Danke an moonlook und happy,
das wollte ich schon lange mal ausprobieren. :)

Gruß, Fusselbär
 
Zuletzt bearbeitet:
happy schrieb:
was muss ich machen damit das image ein User mounten kann? den das anlegen von den virtuellen devices gehts bereits, nur das mounten klappt nicht! der root muss erstmal nach dem anlegen von dem md0 durch den user das hier "/etc/rc.d/devfs restart" machen. und in der devfs.conf sind ist natürlich das laufwerk md0 richtig gesetzt. dann kann der user auch das image mounten, vorher nicht.
wie kann ich das umgehen ?
Das hört sich an, als ob du nur mit devfs.conf arbeitest.

Du kannst
Code:
perm md0 0600
own md0 $user:$group
eintragen, das gilt dann aber nur für Devices die beim devfs start vorhanden sind. Daher das 'restart'.

Trag mal folgendes in deine /etc/devfs.rules ein:
Code:
[blahfasel=21]
add path md0 mode 0600 user $user group $group
Und in die /etc/rc.conf
Code:
devfs_enable="YES"
devfs_rulesets="/etc/devfs.rules"
devfs_system_ruleset="blahfasel"
Wichtig is hierbei vor allem das setzen von "devfs_rulesets", damit die mitgelieferten Beispiel-Regelwerke ned aktiviert werden.

Dann noch vfs.usermount auf 1, und User sollten mount_cd9660 ausführen können. Bzw könnte für mount_cd9660 vfs.usermount schon ausreichen, bin da grad nimmer aktuell eingelesen. Die rules brauchste jedenfalls wenn User GBDE devices oder andere, nicht-Wechseldatenträger mounten können sollen.
 
Zuletzt bearbeitet:
Elesser , das wichtigste bei ist, dass man den eintrag "own md0 $user:$group" setzt , dan gehts.
DICKES MERCI :)
 
so werden bei mir IMAGES von normalen Usern gemountet...

happy schrieb:
was muss ich machen damit das image ein User mounten kann? den das anlegen von den virtuellen devices gehts bereits, nur das mounten klappt nicht! der root muss erstmal nach dem anlegen von dem md0 durch den user das hier "/etc/rc.d/devfs restart" machen. und in der devfs.conf sind ist natürlich das laufwerk md0 richtig gesetzt. dann kann der user auch das image mounten, vorher nicht.
wie kann ich das umgehen ?


Also, wie immer führen viele Wege nach Rom, ich gehe davon nur einen und den kann ich hier mal vorstellen, da ich ihn für sehr elegant halte. Denn bei dieser Methode braucht im System nichts konfiguriert werden und man mountet mit einem Knopfdruck immer das was man will, ohne grosse Befehlseingaben. Man wird gefragt und man antwortet, fertig.
Ich mache das bei mir mit "sudo", das mounten wird bei mir mit nem Script gemacht und das Script wird mit "sudo" ausgeführt. Für interessierte lege ich mein Script mal hier rein, da es recht flexibel aurbeitet und alle arten von IMAGES mountet. Natürlich muss der Mountpoint "/IMAGE" vorher angelegt worden sein und "sudo" muss installiert und konfiguriert sein! Dieses Script funktioniert unter FreeBSD 4.x UND FreeBSD 5.x!!!


Der Aufruf durch den Button in meiner Grafischen Oberfläche sieht so aus:

/usr/X11R6/bin/xterm -T "Image-mount + Midnight Commander" -n "Image-mount + Midnight Commander" -fg black -bg white -e sudo /home/bin/mimg k



Das Script selbst (/home/bin/mimg) sieht so aus:

#!/bin/sh
#
################################################################################
# /home/bin/mimg m # mounten eines Images
# /home/bin/mimg k # mounten eines Images und starten von "midc"
# /home/bin/mimg u # umount des gemounteten Images
# /home/bin/mimg f # erzwungenes umounten des gemounteten Images
# /home/bin/mimg c # cfs - mount (Verschlüsseltes Verzeichnis mounten)
################################################################################
#
# Diese Schritte sind nur als "root" ausfuehrbar!
# Ein MS-DOS-Disketten-Image soll gemountet werden:
#
# Beispiel fuer FreeBSD bis zur Version 4:
# ========================================
#
# vnconfig -c /dev/vn0c ~/kontor/SYS/msdos622.img
# mount -t msdos /dev/vn0c /IMAGE
#
#
# Unmounten des Images (loesen vom Image):
#
# umount /IMAGE
# vnconfig -u /dev/vn0c
#
#
# Beispiel fuer FreeBSD ab der Version 5:
# =======================================
#
# mdconfig -a -t vnode -u 1 -f ~/kontor/SYS/msdos622.img
# mount -t msdos /dev/md2 /IMAGE
#
#
# Unmounten des Images (loesen vom Image):
#
# umount /IMAGE
# mdconfig -d -u 1
#
################################################################################

if [ `uname -s` != "FreeBSD" ] ; then
echo ""
echo "Dieses Script laeft nur auf FreeBSD!"
echo "ABBRUCH!"
exit 1
fi

MOUNTPOINT="/IMAGE"
VERSION=`uname -r|tr -s '\.' ' '|tr -s '-' ' '|tr -s '_' ' '|cut -f1 -d' '`


if [ "x${1}" != "x" ] ; then

case "${1}" in
[Mm])
# mounten
echo "find * -name \"*.iso\" -print"
cd
find * -name "*.iso" -print
echo ""
echo "Image Datei mit Pfad eingeben:"
read IMAGEFILE
echo ""
echo "[cd9660] [linux] [msdos] [ntfs] [ufs]"
echo "Welches Dateisystem ist auf der Imagedatei:"
read FILESYSTEM
#echo "Welcher Mountpoint soll verwendet werden (z.B. /IMAGE):"
#read MOUNTPOINT
if [ "${VERSION}" > "4" ] ; then
mdconfig -a -t vnode -u 2 -f "${IMAGEFILE}"
mount -t "${FILESYSTEM}" /dev/md2 "${MOUNTPOINT}"
else
vnconfig -c /dev/vn0c "${IMAGEFILE}"
mount -t "${FILESYSTEM}" /dev/vn0c "${MOUNTPOINT}"
fi
;;


[Kk])
# mounten
echo "find ~/ -name \"*.iso\" -print"
find ~/ -name "*.iso" -print
echo ""
echo "Image Datei mit Pfad eingeben:"
read IMAGEFILE
echo ""
echo "[cd9660] [linux] [msdos] [ntfs] [ufs]"
echo "Welches Dateisystem ist auf der Imagedatei:"
read FILESYSTEM
if [ "${VERSION}" > "4" ] ; then
mdconfig -a -t vnode -u 2 -f "${IMAGEFILE}"
mount -t "${FILESYSTEM}" /dev/md2 "${MOUNTPOINT}"
else
vnconfig -c /dev/vn0c "${IMAGEFILE}"
mount -t "${FILESYSTEM}" /dev/vn0c "${MOUNTPOINT}"
fi
midc "${MOUNTPOINT}"
if [ "${VERSION}" > "4" ] ; then
umount -f "${MOUNTPOINT}"
mdconfig -d -u 2
else
umount -f "${MOUNTPOINT}"
vnconfig -u /dev/vn0c
fi
;;


[Uu])
# normales unmounten
#echo "Welcher Mountpoint soll geloest werden (z.B. /IMAGE):"
#read MOUNTPOINT
if [ "${VERSION}" > "4" ] ; then
umount "${MOUNTPOINT}"
mdconfig -d -u 2
else
umount "${MOUNTPOINT}"
vnconfig -u /dev/vn0c
fi
;;


[Ff])
# erzwungenes unmounten
#echo "Welcher Mountpoint soll geloest werden (z.B. /IMAGE):"
#read MOUNTPOINT
if [ "${VERSION}" > "4" ] ; then
umount -f "${MOUNTPOINT}"
mdconfig -d -u 2
else
umount -f "${MOUNTPOINT}"
vnconfig -u /dev/vn0c
fi
;;


[Cc])
# cfs - mount
/sbin/mount -o port=3049,intr,nfsv2,noinet6 localhost:/var/tmp/crypt /home/crypt
;;


*)
echo "
/home/bin/mimg m # mounten eines Images
/home/bin/mimg u # umount des gemounteten Images
/home/bin/mimg f # erzwungenes umounten des gemounteten Images
/home/bin/mimg c # cfs - mount
"
;;

esac


else

echo "
/home/bin/mimg m # mounten eines Images
/home/bin/mimg u # umount des gemounteten Images
/home/bin/mimg f # erzwungenes umounten des gemounteten Images
/home/bin/mimg c # cfs - mount
"

fi
 
Zuletzt bearbeitet:
Zurück
Oben