2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-07-01 18:35:36 +00:00

localdisk feature support sync contents from image rootfs to localdisk (#4152)

* Support sync to localdisk at the first time

* Fix #3936, httpd is not starting on stateless SN
This commit is contained in:
Bin Xu
2017-10-24 14:43:24 +08:00
committed by yangsong
parent fc751b5ea5
commit 28d4f32c86

View File

@ -346,7 +346,7 @@ while [ ! -s $LITEFILE ]; do
# the file is empty, we should retry several times
RETRY=$(( $RETRY+1 ))
if [ $RETRY -eq $MAX_RETRIES ]; then
echo "Error: Cannot get the partition configuration file from xCAT server." >>$LOG
echo "Error: Cannot get the litefile configuration from xCAT server." >>$LOG
echo "Error to configure localdisk"
exit 1
fi
@ -363,8 +363,27 @@ while [ ! -s $LITEFILE ]; do
> $LITEFILE
done
# If the first time, we need to sync from image to localdisk for stateless
SYNCTOLOCAL=1
# Node is statelite if /proc/cmdline have flag `STATEMNT='
if [ -f "/proc/cmdline" ]; then
if grep --quiet --no-messages "STATEMNT=" "/proc/cmdline"; then
echo "DEBUG: Ignored syncing to local as this is a statelite installation." >>$LOG
SYNCTOLOCAL=0
fi
fi
# If stateless then check the flag file
if [ $SYNCTOLOCAL -eq 1 ]; then
if [ -f "$MNTDIR$LOCAL/.NOTSYNC2LOCAL" ]; then
echo "DEBUG: Ignored syncing to local as flag file exists." >>$LOG
SYNCTOLOCAL=0
fi
fi
echo "DEBUG: SYNCTOLOCAL=$SYNCTOLOCAL" >>$LOG
while read TYPE FPATH
do
needsync=$SYNCTOLOCAL
if [ x$TYPE = x"localdisk" ]; then
dir=`echo $FPATH | egrep '\/$'`
if [ x$dir = x ]; then
@ -372,21 +391,33 @@ do
if [ ! -f ${MNTDIR}${FPATH} ]; then
touch ${MNTDIR}${FPATH}
echo "touch ${MNTDIR}${FPATH}" >>$LOG
needsync=0
fi
if [ ! -f ${MNTDIR}${LOCAL}${FPATH} ]; then
touch ${MNTDIR}${LOCAL}${FPATH}
echo "touch ${MNTDIR}${LOCAL}${FPATH}" >>$LOG
fi
fi
if [ $needsync -eq 1 ]; then
echo "Sync contents of ${FPATH} to localdisk" >>$LOG
cp -af "${MNTDIR}${FPATH}" "${MNTDIR}${LOCAL}${FPATH}" >>$LOG 2>&1
fi
else
# it's a dir
if [ ! -d ${MNTDIR}${FPATH} ]; then
mkdir -p ${MNTDIR}${FPATH}
echo "mkdir -p ${MNTDIR}${FPATH}" >>$LOG
needsync=0
elif [ "x`ls -A $DIRECTORY`" = "x" ]; then
needsync=0
fi
if [ ! -d ${MNTDIR}${LOCAL}${FPATH} ]; then
mkdir -p ${MNTDIR}${LOCAL}${FPATH}
echo "mkdir -p ${MNTDIR}${LOCAL}${FPATH}" >>$LOG
fi
if [ $needsync -eq 1 ]; then
echo "Sync contents of ${FPATH} to localdisk" >>$LOG
cp -af "${MNTDIR}${FPATH}*" "${MNTDIR}${LOCAL}${FPATH}" >>$LOG 2>&1
fi
fi
# do the mount
@ -396,3 +427,4 @@ do
done < $LITEFILE
touch "$DONEFLAG"
touch "$MNTDIR$LOCAL/.NOTSYNC2LOCAL"