Hi Laurent, I opened a github pull request for this at https://github.com/ceph/ceph/pull/378 We might consider putting /etc/rbdmap in /etc/ceph/rbdmap to avoid polluting /etc... Dan, can you take a look? Thanks! sage On Fri, 21 Jun 2013, Laurent Barbe wrote: > Init script for mapping/unmapping rbd device on startup and shutdown. > On start, map rbd dev according to /etc/rbdmap, and force mount -a > On stop, umount file system depending on rbd and unmap all rbd > Since some distribution use symlink for /etc/mtab, the user-space attribute _netdev is not enough to umount file system before rbd dev. > (also concern: #1790) > > Signed-off-by: Laurent Barbe <laurent@xxxxxxxxxxx> > --- > src/init-rbdmap | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/rbdmap | 3 ++ > 2 files changed, 106 insertions(+) > create mode 100755 src/init-rbdmap > create mode 100644 src/rbdmap > > diff --git a/src/init-rbdmap b/src/init-rbdmap > new file mode 100755 > index 0000000..a2187ce > --- /dev/null > +++ b/src/init-rbdmap > @@ -0,0 +1,103 @@ > +#!/bin/bash > + > +### BEGIN INIT INFO > +# Provides: rbdmap > +# Required-Start: $network > +# Required-Stop: $network > +# Default-Start: 2 3 4 5 > +# Default-Stop: 0 1 6 > +# Short-Description: Ceph RBD Mapping > +# Description: Ceph RBD Mapping > +### END INIT INFO > + > +DESC="RBD Mapping" > +RBDMAPFILE="/etc/rbdmap" > + > +. /lib/lsb/init-functions > + > +do_map() { > + if [ ! -f "$RBDMAPFILE" ]; then > + log_warning_msg "$DESC : No $RBDMAPFILE found." > + exit 0 > + fi > + > + log_daemon_msg "Starting $DESC" > + # Read /etc/rbdtab to create non-existant mapping > + newrbd= > + RET=0 > + while read DEV PARAMS; do > + case "$DEV" in > + ""|\#*) > + continue > + ;; > + */*) > + ;; > + *) > + DEV=rbd/$DEV > + ;; > + esac > + OIFS=$IFS > + IFS=',' > + for PARAM in ${PARAMS[@]}; do > + CMDPARAMS="$CMDPARAMS --$(echo $PARAM | tr '=' ' ')" > + done > + IFS=$OIFS > + if [ ! -b /dev/rbd/$DEV ]; then > + log_progress_msg $DEV > + rbd map $DEV $CMDPARAMS > + [ $? -ne "0" ] && RET=1 > + newrbd="yes" > + fi > + done < $RBDMAPFILE > + log_end_msg $RET > + > + # Mount new rbd > + if [ "$newrbd" ]; then > + log_action_begin_msg "Mounting all filesystems" > + mount -a > + log_action_end_msg $? > + fi > +} > + > +do_unmap() { > + log_daemon_msg "Stopping $DESC" > + RET=0 > + # Unmap all rbd device > + for DEV in /dev/rbd[0-9]*; do > + log_progress_msg $DEV > + # Umount before unmap > + MNTDEP=$(findmnt --mtab --source $DEV --output TARGET | sed 1,1d | sort -r) > + for MNT in $MNTDEP; do > + umount $MNT || sleep 1 && umount -l $DEV > + done > + rbd unmap $DEV > + [ $? -ne "0" ] && RET=1 > + done > + log_end_msg $RET > +} > + > + > +case "$1" in > + start) > + do_map > + ;; > + > + stop) > + do_unmap > + ;; > + > + reload) > + do_map > + ;; > + > + status) > + rbd showmapped > + ;; > + > + *) > + log_success_msg "Usage: rbdmap {start|stop|reload|status}" > + exit 1 > + ;; > +esac > + > +exit 0 > diff --git a/src/rbdmap b/src/rbdmap > new file mode 100644 > index 0000000..9d34e9e > --- /dev/null > +++ b/src/rbdmap > @@ -0,0 +1,3 @@ > +# RbdDevice Parameters > +#rbd/rbddevice id=client,keyring=/etc/ceph/ceph.client.keyring > + > -- > 1.8.1.2 > > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html