# mount -o loop /var/tmp/cdrom.iso /mnt
# vnconfig /dev/vn0c /var/tmp/cdrom.iso # mount -t cd9660 /dev/vn0c /mnt
# umount /mnt # vnconfig -u /dev/vn0c
# mdconfig -a -t vnode -u 0 -f /var/tmp/cdrom.iso
# mdconfig -l md0
# mdconfig -l -u md0 md0 vnode 2.2G /var/tmp/cdrom.iso
oder
# mdconfig -l -u 0 md0 vnode 2.2G /var/tmp/cdrom.iso
# mount -t cd9660 /dev/md0 /mnt
# umount /mnt # mdconfig -d -u 0
Will man alle gemounteten vnodes ausführlich sehen, geht das so ganz gut:
# for i in $(mdconfig -l);do mdconfig -l -u ${i};done
md0 vnode 2.2G /var/tmp/cdrom.iso
md1 swap 1024M
md2 vnode 679M /home/kontor/technik/edv/iso/ubuntu/ubuntu-11.10-server-i386.iso
#!/bin/sh
#
################################################################################
#
# 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 /mnt
#
#
# Unmounten des Images (loesen vom Image):
#
# umount /mnt
# 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 /mnt
#
#
# Unmounten des Images (loesen vom Image):
#
# for i in $(mdconfig -l);do mdconfig -l -u ${i};done
#
# umount /mnt
# mdconfig -d -u md1
#
# umount /mnt
# mdconfig -d -u 1
#
################################################################################
if [ "$(uname -s)" != "FreeBSD" ] ; then
echo ""
echo "Dieses Script laeft nur auf FreeBSD!"
echo "ABBRUCH!"
exit 1
fi
VERSION="$(uname -r|cut -f1 -d'.')"
if [ "${VERSION}" -lt "5" ] ; then
echo "Dieses Script arbeitet erst ab FreeBSD 5."
exit 1
fi
if [ -n "${1}" ] ; then
case "${1}" in
[Cc][Dd])
# CD9660 - mount
DATEISYSTEM="cd9660"
;;
[Ee][Xx][Tt])
# EXT2FS - mount
DATEISYSTEM="ext2fs"
;;
[Dd][Oo][Ss])
# MSDOSFS - mount
DATEISYSTEM="msdosfs"
;;
[Nn][Tt][Ff][Ss])
# NTFS - mount
# ntfs-3g -o permissions /dev/da6s1 /mnt/
DATEISYSTEM="ntfs-3g"
;;
[Uu][Ff][Ss])
# UFS - mount
DATEISYSTEM="ufs"
;;
[Uu])
# normales unmounten
#echo "Welcher Mountpoint soll geloest werden (z.B. /mnt):"
if [ -d "${2}" ] ; then
VNODE="$(df "${2}" | awk '/^\/dev\// && /\/md[0-9]/ {print $1}')"
if [ -n "${VNODE}" ] ; then
echo "umount \"${2}\""
umount "${2}"
echo "mdconfig -d -u ${VNODE}"
mdconfig -d -u ${VNODE}
else
echo "
# umount des gemounteten Images
${0} u [MountPoint]
${0} u /mnt
"
fi
else
echo "
# umount des gemounteten Images
${0} u [MountPoint]
${0} u /mnt
"
fi
;;
*)
echo "
${0} cd [cdrom.iso] [/mnt]
${0} ext [linux.img] [/mnt]
${0} dos [msdos.img] [/mnt]
${0} ntfs [mswin.img] [/mnt]
${0} ufs [bsd.img] [/mnt]
oder
${0} u [/mnt] # umount des gemounteten Images
"
;;
esac
if [ -n "${DATEISYSTEM}" ] ; then
if [ -f "${2}" ] ; then
IMAGEFILE="${2}"
else
echo "
${0} cd [cdrom.iso] [/mnt]
${0} ext [linux.img] [/mnt]
${0} dos [msdos.img] [/mnt]
${0} ntfs [mswin.img] [/mnt]
${0} ufs [bsd.img] [/mnt]
"
fi
if [ -d "${3}" ] ; then
MOUNTPOINT="${3}"
else
MOUNTPOINT="/mnt"
fi
VNODE="$(mdconfig -a -t vnode -f "${IMAGEFILE}")"
if [ "${DATEISYSTEM}" != "ntfs-3g" ] ; then
mount -t "${DATEISYSTEM}" /dev/${VNODE} "${MOUNTPOINT}"
else
ntfs-3g -o permissions /dev/${VNODE} "${MOUNTPOINT}"
fi
fi
else
echo "
${0} cd [cdrom.iso] [/mnt]
${0} ext [linux.img] [/mnt]
${0} dos [msdos.img] [/mnt]
${0} ntfs [mswin.img] [/mnt]
${0} ufs [bsd.img] [/mnt]
oder
${0} u [/mnt] # umount des gemounteten Images
"
fi
Leider kann mount_udf oft (in meinem Fall) eine UDF-DVD nicht mounten:
# mdconfig -l md0
# mount -t udf /dev/md0 /mnt mount_udf: /dev/md0: Invalid argument
das geht mit FreeBSD 8.0 leider nicht per mount, sondern nur mit udfclient:
# portinstall -prO sysutils/udfclient # udfclient /var/tmp/cdrom.iso
mit FreeBSD 9.0 hat das mounten einer UDF-DVD geklappt:
# mount -t udf /dev/cd0 /cdrom
# vi /etc/sysctl.conf vfs.usermount=1
# vi /etc/devfs.conf link acd0 cdrom own acd0 root:operator perm acd0 0660