mount.glusterfs: getopts support and cleanup

This patch is an attempt to provide some much needed
cleanup for future maintenance of `mount.glusterfs`

- Add checks for command failures
- Spliting large code into subsequent simpler functions
- Standardized variables
- use 'bash' instead of 'sh' - since string manipulation
  and variable handling is far superior
- Overall code cleanup and Copyright change to Red, Hat Inc.
- Add new style of mounting with a comma separated list
  ~~~
  $ mount -t glusterfs <IP1/HOSTNAME1>,<IP2/HOSTNAME2>,..<IPN/HOSTNAMEN>:/<VOLUME> <MNT>
  ~~~
- Update age old `manpage` with new options :-)

Change-Id: I294e4d078a067d67d9a67eb8dde5eb2634cc0e45
BUG: 1040348
Signed-off-by: Harshavardhana <harsha@harshavardhana.net>
Reviewed-on: http://review.gluster.org/5931
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@gmail.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
Harshavardhana 2013-09-14 19:51:13 -07:00 committed by Vijay Bellur
parent ea89a25b0b
commit 0404be9ca1
2 changed files with 387 additions and 221 deletions

View File

@ -1,4 +1,4 @@
.\" Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com>
.\" Copyright (c) 2008-2013 Red Hat, Inc. <http://www.redhat.com>
.\" This file is part of GlusterFS.
.\"
.\" This file is licensed to you under your choice of the GNU Lesser
@ -8,21 +8,24 @@
.\"
.\"
.\"
.TH GlusterFS 8 "Cluster Filesystem" "18 March 2010" "Gluster Inc."
.TH GlusterFS 8 "Cluster Filesystem" "14 September 2013" "Red Hat, Inc."
.SH NAME
mount.glusterfs - script to mount native GlusterFS volume
.B mount.glusterfs - script to mount native GlusterFS volume
.SH SYNOPSIS
.B mount -t glusterfs
.I [-o <options>] <volumeserver>:<volumeid> <mountpoint>
.B mount -t glusterfs [-o <options>] <volumeserver>:/<volume>
.B <mountpoint>
.TP
.B mount -t glusterfs
.I [-o <options>] <path/to/volumefile> <mountpoint>
.B mount -t glusterfs [-o <options>] <server1>,<server2>,
.B <server3>,..<serverN>:/<volname> <mount_point>
.TP
.TP
.B mount -t glusterfs [-o <options>] <path/to/volumefile> <mountpoint>
.PP
.SH DESCRIPTION
This tool is part of \fBglusterfs\fR(8) package, which is used to mount using
GlusterFS native binary.
\fBmount.glusterfs\fR is meant to be used by the mount(8) command for mounting
\fBmount.glusterfs\fR is meant to be used by the mount(8) command for mounting
native GlusterFS client. This subcommand, however, can also be used as a
standalone command with limited functionality.
@ -38,17 +41,46 @@ File to use for logging [default:/var/log/glusterfs/glusterfs.log]
Logging severity. Valid options are TRACE, DEBUG, WARNING, ERROR, CRITICAL
INFO and NONE [default: INFO]
.TP
\fBacl
Mount the filesystem with POSIX ACL support
.TP
\fBfopen\-keep\-cache
Do not purge the cache on file open
.TP
\fBselinux
Enable SELinux label (extened attributes) support on inodes
.TP
\fBworm
Mount the filesystem in 'worm' mode
.TP
\fBaux\-gfid\-mount
Enable access to filesystem through gfid directly
.TP
\fBro\fR
Mount the filesystem read-only
.TP
\fBenable\-ino32=\fRBOOL
Use 32-bit inodes when mounting to workaround broken applications that don't
support 64-bit inodes
.PP
.SS "Advanced options"
.PP
.TP
\fBvolfile\-id=\fRKEY
Volume key or name of the volume file to be fetched from server
\fBattribute\-timeout=\fRSECONDS
Set attribute timeout to SECONDS for inodes in fuse kernel module [default: 1]
.TP
\fBtransport=\fRTRANSPORT-TYPE
Transport type to get volume file from server [default: tcp]
\fBentry\-timeout=\fRSECONDS
Set entry timeout to SECONDS in fuse kernel module [default: 1]
.TP
\fBbackground\-qlen=\fRN
Set fuse module's background queue length to N [default: 64]
.TP
\fBgid\-timeout=\fRSECONDS
Set auxilary group list timeout to SECONDS for fuse translator [default: 0]
.TP
\fBnegative\-timeout=\fRSECONDS
Set negative timeout to SECONDS in fuse kernel module [default: 0]
.TP
\fBvolume\-name=\fRVOLUME-NAME
Volume name to be used for MOUNT-POINT [default: top most volume in
@ -56,6 +88,25 @@ VOLUME-FILE]
.TP
\fBdirect\-io\-mode=\fRdisable
Disable direct I/O mode in fuse kernel module
.TP
\fBcongestion\-threshold=\fRN
Set fuse module's congestion threshold to N [default: 48]
.TP
.TP
\fBbackup\-volfile\-servers=\fRSERVERLIST
Provide list of backup volfile servers in the following format [default: None]
\fB$ mount -t glusterfs -obackup-volfile-servers=<server2>:\fR
\fB <server3>:...:<serverN> <server1>:/<volname> <mount_point>\fR
.TP
.TP
\fBbackupvolfile\-server=\fRSERVER
Provide list of backup volfile servers in the following format [default: None]
\fB $ mount -t glusterfs -obackupvolfile-server=<server2>
\fB <server1>:/<volname> <mount_point>
.TP
.PP
.SH FILES
@ -63,16 +114,16 @@ Disable direct I/O mode in fuse kernel module
.I /etc/fstab
A typical GlusterFS entry in /etc/fstab looks like below
server1.gluster.com:mirror /mnt/mirror glusterfs log-file=/var/log/mirror.vol,ro,defaults 0 0
\fBserver1:/mirror /mnt/mirror glusterfs log-file=/var/log/mirror.log,acl,selinux 0 0\fR
.TP
.I /etc/mtab
An example entry of a GlusterFS mountpoint in /etc/mtab looks like below
.I /proc/mounts
An example entry of a GlusterFS mountpoint in /proc/mounts looks like below
mirror.vol /mnt/glusterfs fuse.glusterfs rw,allow_other,default_permissions,max_read=131072 0 0
\fBserver1:/mirror /mnt/glusterfs fuse.glusterfs rw,allow_other,default_permissions,max_read=131072 0 0\fR
.SH SEE ALSO
\fBglusterfs\fR(8), \fBmount\fR(8), \fBgluster\fR(8)
.SH COPYRIGHT
Copyright(c) 2006-2011 Gluster, Inc. <http://www.gluster.com>
Copyright(c) 2006-2013 Red Hat, Inc. <http://www.redhat.com>

View File

@ -1,20 +1,12 @@
#!/bin/sh
# (C) 2006, 2007, 2008 Gluster Inc. <http://www.gluster.com>
#!/bin/bash
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
# Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com>
# This file is part of GlusterFS.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301 USA
# This file is licensed to you under your choice of the GNU Lesser
# General Public License, version 3 or any later version (LGPLv3 or
# later), or the GNU General Public License, version 2 (GPLv2), in all
# cases as published by the Free Software Foundation.
_init ()
{
@ -33,28 +25,43 @@ _init ()
exec_prefix=@exec_prefix@;
cmd_line=$(echo "@sbindir@/glusterfs");
case `uname -s` in
NetBSD)
getinode="stat -f %i"
getdev="stat -f %d"
lgetinode="${getinode} -L"
lgetdev="${getdev} -L"
# check whether getfattr exists
getfattr=$(which getfattr 2>/dev/null);
if [ $? -ne 0 ]; then
echo "WARNING: getfattr not found, certain checks will be skipped.."
fi
mounttab=/proc/mounts
;;
Linux)
getinode="stat -c %i $i"
getdev="stat -c %d $d"
lgetinode="${getinode} -L"
lgetdev="${getdev} -L"
mounttab=/etc/mtab
;;
alias lsL='ls -L'
mounttab=/proc/mounts
uname_s=`uname -s`
case ${uname_s} in
NetBSD)
getinode="stat -f %i"
getdev="stat -f %d"
lgetinode="${getinode} -L"
lgetdev="${getdev} -L"
;;
Linux)
getinode="stat -c %i"
getdev="stat -c %d"
lgetinode="${getinode} -L"
lgetdev="${getdev} -L"
;;
esac
UPDATEDBCONF=/etc/updatedb.conf
}
is_valid_hostname ()
{
local server=$1
length=$(echo $server | wc -c)
if [ ${length} -gt ${HOST_NAME_MAX} ]; then
return 1
fi
}
parse_backup_volfile_servers ()
{
local server_list=$1
@ -63,40 +70,43 @@ parse_backup_volfile_servers ()
servers=$(echo ${server_list} | sed 's/\:/ /g')
for server in ${servers}; do
length=$(echo $server | wc -c)
if [ ${length} -gt ${HOST_NAME_MAX} ]; then
echo "Hostname:${server} provided is too long.. skipping"
is_valid_hostname ${server}
if [ $? -eq 1 ]; then
continue
fi
new_servers=$(echo "$new_servers $server")
new_servers=$(echo "${new_servers} ${server}")
done
echo ${new_servers}
}
parse_backupvolfile_server ()
parse_volfile_servers ()
{
local server=$1
local server_list=$1
local servers=""
local new_servers=""
length=$(echo $server | wc -c)
if [ ${length} -gt ${HOST_NAME_MAX} ]; then
echo "Hostname:${server} provided is too long.. exiting"
exit 1
fi
servers=$(echo ${server_list} | sed 's/,/ /g')
for server in ${servers}; do
is_valid_hostname ${server}
if [ $? -eq 1 ]; then
continue
fi
new_servers=$(echo "${new_servers} ${server}")
done
echo ${server}
echo ${new_servers}
}
start_glusterfs ()
{
# lets the comparsion be case insensitive for all strings
if [ -n "$log_level_str" ]; then
case "$( echo $log_level_str | tr '[a-z]' '[A-Z]')" in
case "$( echo $log_level_str | awk '{print toupper($0)}')" in
"ERROR")
log_level=$LOG_ERROR;
;;
"INFO")
log_level=$LOG_INFO
log_level=$LOG_INFO;
;;
"DEBUG")
log_level=$LOG_DEBUG;
@ -120,7 +130,7 @@ start_glusterfs ()
esac
fi
#options without values start here
# options without values start here
if [ -n "$read_only" ]; then
cmd_line=$(echo "$cmd_line --read-only");
fi
@ -130,7 +140,7 @@ start_glusterfs ()
fi
if [ -n "$selinux" ]; then
cmd_line=$(echo "$cmd_line --selinux");
cmd_line=$(echo "$cmd_line --selinux");
fi
if [ -n "$enable_ino32" ]; then
@ -157,7 +167,7 @@ start_glusterfs ()
cmd_line=$(echo "$cmd_line --aux-gfid-mount");
fi
#options with values start here
# options with values start here
if [ -n "$log_level" ]; then
cmd_line=$(echo "$cmd_line --log-level=$log_level");
fi
@ -207,8 +217,7 @@ start_glusterfs ()
fi
if [ -n "$xlator_option" ]; then
xlator_option=$(echo $xlator_option | sed s/"xlator-option="/"--xlator-option "/g)
cmd_line=$(echo "$cmd_line $xlator_option");
cmd_line=$(echo "$cmd_line --xlator-option=$xlator_option");
fi
# for rdma volume, we have to fetch volfile with '.rdma' added
@ -218,18 +227,31 @@ start_glusterfs ()
if [ -z "$volfile_loc" ]; then
if [ -n "$server_ip" ]; then
cmd_line=$(echo "$cmd_line --volfile-server=$server_ip");
servers=$(parse_volfile_servers ${server_ip});
if [ -n "$servers" ]; then
for i in $(echo ${servers}); do
cmd_line=$(echo "$cmd_line --volfile-server=$i");
done
else
echo "ERROR: No valid servers found on command line.. exiting"
print_usage
exit 1
fi
if [ -n "$backupvolfile_server" ]; then
if [ -z "$backup_volfile_servers" ]; then
server=$(parse_backupvolfile_server ${backupvolfile_server})
cmd_line=$(echo "$cmd_line --volfile-server=$server");
is_valid_hostname ${backupvolfile_server};
if [ $? -eq 1 ]; then
echo "ERROR: Invalid backup server specified.. exiting"
exit 1
fi
cmd_line=$(echo "$cmd_line --volfile-server=$backupvolfile_server");
fi
fi
if [ -n "$backup_volfile_servers" ]; then
servers=$(parse_backup_volfile_servers ${backup_volfile_servers})
for i in $(echo ${servers}); do
backup_servers=$(parse_backup_volfile_servers ${backup_volfile_servers})
for i in $(echo ${backup_servers}); do
cmd_line=$(echo "$cmd_line --volfile-server=$i");
done
fi
@ -261,205 +283,307 @@ start_glusterfs ()
fi
cmd_line=$(echo "$cmd_line $mount_point");
err=0;
$cmd_line;
inode=$( ${getinode} $mount_point 2>/dev/null);
# this is required if the stat returns error
if [ -z "$inode" ]; then
inode="0";
fi
if [ $inode -ne 1 ]; then
err=1;
fi
if [ $err -eq "1" ]; then
echo "Mount failed. Please check the log file for more details."
umount $mount_point > /dev/null 2>&1;
exit 1;
if [ $? -ne 0 ]; then
echo "Mount failed. Please check the log file for more details."
umount $mount_point > /dev/null 2>&1;
exit 1;
fi
}
usage ()
print_usage ()
{
echo "Usage: mount.glusterfs <volumeserver>:<volumeid/volumeport> -o <options> <mountpoint>
cat << EOF
Usage: $0 <volumeserver>:<volumeid/volumeport> -o<options> <mountpoint>
Options:
man 8 mount.glusterfs
To display the version number of the mount helper:
mount.glusterfs --version"
man 8 $0
To display the version number of the mount helper: $0 -V
EOF
}
# check for recursive mounts. i.e, mounting over an existing brick
check_recursive_mount ()
{
if [ $1 = "/" ]; then
echo Cannot mount over root;
echo "Cannot mount over root";
exit 2;
fi
# GFID check first
# remove trailing / from mount point
mnt_dir=${1%/};
export PATH;
# check whether getfattr exists
which getfattr > /dev/null 2>&1;
if [ $? -ne 0 ]; then
return;
fi
getfattr -n trusted.gfid $mnt_dir 2>/dev/null | grep -iq "trusted.gfid=";
if [ $? -eq 0 ]; then
echo "ERROR: $mnt_dir is in use as a brick of a gluster volume";
exit 2;
if [ -n ${getfattr} ]; then
${getfattr} -n trusted.gfid $mnt_dir 2>/dev/null | grep -iq "trusted.gfid=";
if [ $? -eq 0 ]; then
echo "ERROR: $mnt_dir is in use as a brick of a gluster volume";
exit 2;
fi
fi
# check if the mount point is a brick's parent directory
GLUSTERD_WORKDIR="/var/lib/glusterd";
ls -L "$GLUSTERD_WORKDIR"/vols/*/bricks/* > /dev/null 2>&1;
lsL "$GLUSTERD_WORKDIR"/vols/*/bricks/* > /dev/null 2>&1;
if [ $? -ne 0 ]; then
return;
fi
brick_path=`grep ^path "$GLUSTERD_WORKDIR"/vols/*/bricks/* | cut -d "=" -f 2`;
brick_path=`grep ^path "$GLUSTERD_WORKDIR"/vols/*/bricks/* 2>/dev/null | cut -d "=" -f 2`;
root_inode=`${lgetinode} /`;
root_dev=`${lgetdev} /`;
mnt_inode=`${lgetinode} $mnt_dir`;
mnt_dev=`${lgetdev} $mnt_dir`;
for brick in "$brick_path";
do
for brick in "$brick_path"; do
# evaluate brick path to see if this is local, if non-local, skip iteration
ls $brick > /dev/null 2>&1;
if [ $? -ne 0 ]; then
continue;
fi
getfattr -n trusted.gfid "$brick" 2>/dev/null | grep -iq "trusted.gfid=";
if [ $? -ne 0 ]; then
continue;
if [ -n ${getfattr} ]; then
${getfattr} -n trusted.gfid "$brick" 2>/dev/null | grep -iq "trusted.gfid=";
if [ $? -eq 0 ]; then
# brick is local
while [ 1 ]; do
tmp_brick="$brick";
brick="$brick"/..;
brick_dev=`${lgetdev} $brick`;
brick_inode=`${lgetinode} $brick`;
if [ "$mnt_inode" -eq "$brick_inode" \
-a "$mnt_dev" -eq "$brick_dev" ]; then
echo "ERROR: ${mnt_dir} is a parent of the brick ${tmp_brick}";
exit 2;
fi
[ "$root_inode" -ne "$brick_inode" \
-o "$root_dev" -ne "$brick_dev" ] || break;
done;
else
continue;
fi
else
# brick is local
while [ 1 ];
do
tmp_brick="$brick";
brick="$brick"/..;
brick_dev=`${lgetdev} $brick`;
brick_inode=`${lgetinode} $brick`;
if [ "$mnt_inode" -eq "$brick_inode" -a "$mnt_dev" -eq "$brick_dev" ]; then
echo ERROR: $mnt_dir is a parent of the brick $tmp_brick;
exit 2;
fi
[ "$root_inode" -ne "$brick_inode" -o "$root_dev" -ne "$brick_dev" ] || break;
done;
continue;
fi
done;
}
main ()
with_options()
{
helper=$(echo "$@" | sed -n 's/.*\--[ ]*\([^ ]*\).*/\1/p');
in_opt="no"
pos_args=0
for opt in "$@"; do
if [ "$in_opt" = "yes" ]; then
for pair in $(echo "$opt" | tr "," " "); do
# Handle options without values.
case "$pair" in
"ro") read_only=1 ;;
"acl") acl=1 ;;
"selinux") selinux=1 ;;
"worm") worm=1 ;;
"fopen-keep-cache") fopen_keep_cache=1 ;;
"enable-ino32") enable_ino32=1 ;;
"mem-accounting") mem_accounting=1;;
"aux-gfid-mount")
if [ `uname -s` = "Linux" ]; then
aux_gfid_mount=1
fi
;;
# "mount -t glusterfs" sends this, but it's useless.
"rw") ;;
# these ones are interpreted during system initialization
"noauto") ;;
"_netdev") ;;
*)
key=$(echo "$pair" | cut -f1 -d'=');
value=$(echo "$pair" | cut -f2- -d'=');
local key=$1
local value=$2
# Handle options with values.
case "$key" in
"log-level") log_level_str=$value ;;
"log-file") log_file=$value ;;
"transport") transport=$value ;;
"direct-io-mode") direct_io_mode=$value ;;
"volume-name") volume_name=$value ;;
"volume-id") volume_id=$value ;;
"volfile-check") volfile_check=$value ;;
"server-port") server_port=$value ;;
"attribute-timeout")
attribute_timeout=$value ;;
"entry-timeout") entry_timeout=$value ;;
"negative-timeout") negative_timeout=$value ;;
"gid-timeout") gid_timeout=$value ;;
"background-qlen") bg_qlen=$value ;;
"backup-volfile-servers") backup_volfile_servers=$value ;;
## Place-holder backward compatibility
"backupvolfile-server") backupvolfile_server=$value ;;
"congestion-threshold") cong_threshold=$value ;;
"xlator-option") xlator_option=$xlator_option" "$pair ;;
"fuse-mountopts") fuse_mountopts=$value ;;
"use-readdirp") use_readdirp=$value ;;
*)
# Passthru
[ -z "$fuse_mountopts" ] || fuse_mountopts="$fuse_mountopts,"
fuse_mountopts="$fuse_mountopts$pair"
;;
esac
esac
done
in_opt="no"
elif [ "$opt" = "-o" ]; then
in_opt="yes"
# Handle options with values.
case "$key" in
"log-level")
log_level_str=$value
;;
"log-file")
log_file=$value
;;
"transport")
transport=$value
;;
"direct-io-mode")
direct_io_mode=$value
;;
"volume-name")
volume_name=$value
;;
"volume-id")
volume_id=$value
;;
"volfile-check")
volfile_check=$value
;;
"server-port")
server_port=$value
;;
"attribute-timeout")
attribute_timeout=$value
;;
"entry-timeout")
entry_timeout=$value
;;
"negative-timeout")
negative_timeout=$value
;;
"gid-timeout")
gid_timeout=$value
;;
"background-qlen")
bg_qlen=$value
;;
"backup-volfile-servers")
backup_volfile_servers=$value
;;
"backupvolfile-server")
backupvolfile_server=$value
;;
"congestion-threshold")
cong_threshold=$value
;;
"xlator-option")
xlator_option=$value
;;
"fuse-mountopts")
fuse_mountopts=$value
;;
"use-readdirp")
use_readdirp=$value
;;
*)
echo "Invalid option: $key"
exit 0
;;
esac
}
without_options()
{
local option=$1
# Handle options without values.
case "$option" in
"ro")
read_only=1
;;
"acl")
acl=1
;;
"selinux")
selinux=1
;;
"worm")
worm=1
;;
"fopen-keep-cache")
fopen_keep_cache=1
;;
"enable-ino32")
enable_ino32=1
;;
"mem-accounting")
mem_accounting=1
;;
"aux-gfid-mount")
if [ ${uname_s} = "Linux" ]; then
aux_gfid_mount=1
fi
;;
# "mount -t glusterfs" sends this, but it's useless.
"rw")
;;
# these ones are interpreted during system initialization
"noauto")
;;
"_netdev")
;;
*)
echo "Invalid option $option";
exit 0
;;
esac
}
parse_options()
{
local optarg=${1}
for pair in $(echo ${optarg//,/ }); do
key=$(echo "$pair" | cut -f1 -d'=');
value=$(echo "$pair" | cut -f2- -d'=');
if [ "$key" = "$value" ]; then
without_options $pair;
else
case $pos_args in
0) volfile_loc=$opt ;;
1) mount_point=$opt ;;
*) echo "extra arguments at end (ignored)" ;;
esac
pos_args=$((pos_args+1))
with_options $key $value;
fi
done
if [ $in_opt = "yes" -o $pos_args -lt 2 ]; then
usage
exit 1
fi
}
update_updatedb()
{
# Append fuse.glusterfs to PRUNEFS variable in updatedb.conf(5).
# updatedb(8) should not index files under GlusterFS, indexing
# GlusterFS is not necessary and should be avoided.
# Following code disables updatedb crawl on 'glusterfs'
test -f $UPDATEDBCONF && {
if ! grep -q 'glusterfs' $UPDATEDBCONF; then
sed 's/\(PRUNEFS.*\)"/\1 fuse.glusterfs"/' $UPDATEDBCONF \
> ${UPDATEDBCONF}.bak
mv -f ${UPDATEDBCONF}.bak $UPDATEDBCONF
fi
}
}
main ()
{
volfile_loc=$1
mount_point=$2
## `mount` specifies options as a last argument
shift 2;
while getopts "Vo:h" opt; do
case "${opt}" in
o)
parse_options ${OPTARG};
;;
V)
${cmd_line} -V;
exit 0;
;;
h)
print_usage;
exit 0;
;;
?)
print_usage;
exit 0;
;;
esac
done
[ -r "$volfile_loc" ] || {
server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:.\-]*\):.*/\1/p');
test_str=$(echo "$volfile_loc" | sed -n 's/.*:\([^ ]*\).*/\1/p');
[ -n "$test_str" ] && {
volume_id="$test_str";
volume_str=$(echo "$volfile_loc" | sed -n 's/.*:\([^ ]*\).*/\1/p');
[ -n "$volume_str" ] && {
volume_id="$volume_str";
}
volfile_loc="";
}
#
[ -n "$helper" ] && {
cmd_line=$(echo "$cmd_line --$helper");
exec $cmd_line;
[ -z "$volume_id" -o -z "$server_ip" ] && {
cat <<EOF
ERROR: Server name/volume name unspecified cannot proceed further..
Please specify correct format
Usage:
man 8 $0
EOF
exit 0;
}
grep_ret=$(echo ${mount_point} | grep '^\-o');
[ "x" != "x${grep_ret}" ] && {
cat <<EOF
ERROR: -o options cannot be specified in either first two arguments..
Please specify correct style
Usage:
man 8 $0
EOF
exit 0;
}
# No need to do a ! -d test, it is taken care while initializing the
# variable mount_point
[ -z "$mount_point" -o ! -d "$mount_point" ] && {
echo "ERROR: Mount point does not exist."
usage;
cat <<EOF
ERROR: Mount point does not exist
Please specify a mount point
Usage:
man 8 $0
EOF
exit 0;
}
@ -472,16 +596,7 @@ main ()
check_recursive_mount "$mount_point";
# Append fuse.glusterfs to PRUNEFS variable in updatedb.conf(5). updatedb(8)
# should not index files under GlusterFS, indexing will slow down GlusteFS
# if the filesystem is several TB in size.
test -f $UPDATEDBCONF && {
if ! grep -q 'glusterfs' $UPDATEDBCONF; then
sed 's/\(PRUNEFS.*\)"/\1 fuse.glusterfs"/' $UPDATEDBCONF \
> ${UPDATEDBCONF}.bak
mv -f ${UPDATEDBCONF}.bak $UPDATEDBCONF
fi
}
update_updatedb;
start_glusterfs;
}