Message ID | 1371827829-1025-1-git-send-email-laurent@ksperis.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@ksperis.com> > --- > 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@vger.kernel.org > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Laurent, I went ahead and merged this. Thanks! sage On Mon, 24 Jun 2013, Sage Weil wrote: > 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@ksperis.com> > > --- > > 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@vger.kernel.org > > 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@vger.kernel.org > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 +
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@ksperis.com> --- src/init-rbdmap | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/rbdmap | 3 ++ 2 files changed, 106 insertions(+) create mode 100755 src/init-rbdmap create mode 100644 src/rbdmap