|
Lines 137-162
Link Here
|
| 137 |
continue |
137 |
continue |
| 138 |
fi |
138 |
fi |
| 139 |
|
139 |
|
| 140 |
if [ -b "$FILENAME" ] ; then |
140 |
# resolve one symlink level if needed, e.g. for |
| 141 |
dev=`basename "$FILENAME"` |
141 |
# LVM: /dev/lvg/lvolume-name to /dev/mapper/name |
| 142 |
part=$dev |
142 |
if [ -L "$FILENAME" ] ; then |
| 143 |
dev=${dev/[0-9]*/} |
143 |
REALNAME=$(/usr/bin/readlink "$FILENAME" 2>/dev/null) |
| 144 |
[ "$part" == "$dev" ] && part="" |
144 |
if [ -z "$REALNAME" ] || \ |
| 145 |
sys="/sys/block/$dev/$part/size" |
145 |
[ ! -e "$REALNAME" ] || \ |
| 146 |
BLOCKS=`cat $sys 2>&1` >> ${UNH_ISCSI_LOG} |
146 |
[ -L "$REALNAME" ] ; then |
| 147 |
if [ $? -ne 0 ]; then |
147 |
unh_log "error in export file: invalid symlink '${FILENAME}'" |
| 148 |
unh_log "Failed to query the size of '$FILENAME' block device." |
|
|
| 149 |
error=1 |
148 |
error=1 |
| 150 |
break |
149 |
break |
| 151 |
fi |
150 |
fi |
| 152 |
else |
151 |
else |
| 153 |
BLOCKS=`stat --format="%s" "${FILENAME}" 2>&1` >> ${UNH_ISCSI_LOG} |
152 |
REALNAME=$FILENAME |
|
|
153 |
fi |
| 154 |
|
| 155 |
if [ -b "$REALNAME" ] ; then |
| 156 |
BLOCKS="" |
| 157 |
major=$(printf "%d" 0x$(stat --format="%t" "$REALNAME")) |
| 158 |
minor=$(printf "%d" 0x$(stat --format="%T" "$REALNAME")) |
| 159 |
case "$major" in |
| 160 |
253) # device-mapper / LVM |
| 161 |
for dev in /sys/block/dm-*/dev ; do |
| 162 |
[ "/sys/block/dm-*/dev" == "$dev" ] && continue |
| 163 |
num=$(cat $dev 2>/dev/null) |
| 164 |
if [ "$num" == "${major}:${minor}" ] ; then |
| 165 |
BLOCKS=$(cat ${dev%dev}size 2>> ${UNH_ISCSI_LOG}) |
| 166 |
break |
| 167 |
fi |
| 168 |
done |
| 169 |
;; |
| 170 |
|
| 171 |
*) # other (/dev/sdaX, /dev/hda, ...) |
| 172 |
dev=`basename "$REALNAME"` |
| 173 |
part=$dev |
| 174 |
dev=${dev/[0-9]*/} |
| 175 |
[ "$part" == "$dev" ] && part="" |
| 176 |
sys="/sys/block/$dev/$part/size" |
| 177 |
BLOCKS=`cat $sys 2>> ${UNH_ISCSI_LOG}` |
| 178 |
;; |
| 179 |
esac |
| 180 |
|
| 181 |
if [ -z "$BLOCKS" ] && [ $(($BLOCKS)) -le 0 ]; then |
| 182 |
unh_log "Failed to query the size of '$FILENAME' block device." |
| 183 |
error=1 |
| 184 |
break |
| 185 |
fi |
| 186 |
elif [ -f "$REALNAME" ] ; then |
| 187 |
BLOCKS=`stat --format="%s" "${REALNAME}" 2>> ${UNH_ISCSI_LOG}` |
| 154 |
if [ $? -ne 0 ]; then |
188 |
if [ $? -ne 0 ]; then |
| 155 |
unh_log "Failed to query size of '$FILENAME' file." |
189 |
unh_log "Failed to query size of '$FILENAME' file." |
| 156 |
error=1 |
190 |
error=1 |
| 157 |
break |
191 |
break |
| 158 |
fi |
192 |
fi |
| 159 |
BLOCKS=$(( (BLOCKS+511) / 512 )) |
193 |
BLOCKS=$(( (BLOCKS+511) / 512 )) |
|
|
194 |
else |
| 195 |
unh_log "error in export file: '${FILENAME}' is not file or block device" |
| 196 |
error=1 |
| 197 |
break |
| 160 |
fi |
198 |
fi |
| 161 |
|
199 |
|
| 162 |
unh_log "Exporting target: $TID $LUN $FILENAME $SCRIPT" |
200 |
unh_log "Exporting target: $TID $LUN $FILENAME $SCRIPT" |