This chapter contains a guide to migrate a classic SE to dCache.
The convertion of a classic SE to dCache is not complicated, but has to be done very carefully to prevent data losses.
We assume, that dCache is installed and configured.( the section called “Installing a Single Node dCache Instance”). To be on the safe side, we recommend to install a new pool on a different host, since there is no easy way to switch back to classic SE.
create a new pool.
for each file in the classic SE an entry in
pnfshas to be created. then the file has to be moved to data directory in the pool control directory and the owner, group and size must be set inpnfs. To avoid mistakes we recomend to use a script developed and tested by the dCache developers. Run the script for each file which goes into dCache:[root] #find . -type f -exec file2dcache.sh {} </pnfs/desy.de/data/fromSE> </pool/pool1> \;start the pool. Since the pool has to recreate the inventory, the start up time will be longer than usually..
connect to the dCache via admin interface and register the newly created files:
cd pool1 pnfs register .. logoff
The newly migrated files shall be available already.
#!/bin/sh
if [ $# -ne 3 ]
then
echo "Usage: $0 <file> <pnfs path> <pool base>"
exit 1;
fi
SRC=$1
FILE=`basename $1`
DIR=`dirname $1`
PNFS_PRFIX=$2
POOL_BASE=$3
PNFS_FILE="${PNFS_PRFIX}/${DIR}/${FILE}"
if [ ! -f "${SRC}" ]
then
echo "File ${SRC} do not exist."
exit 1
fi
if [ -f "${PNFS_FILE}" ]
then
echo "File ${PNFS_FILE} already exist."
exit 2
fi
if [ ! -d "${POOL_BASE}/control" ]
then
echo "Creating directory [control]"
mkdir ${POOL_BASE}/control
fi
if [ ! -d "${POOL_BASE}/data" ]
then
echo "Creating directory [data]"
mkdir ${POOL_BASE}/data
fi
if [ ! -f "setup" ]
then
echo "Creating dummy [setup] file"
touch ${POOL_BASE}/setup
fi
echo "Creating file in pnfs"
if [ ! -d ${PNFS_PRFIX}/${DIR} ]
then
mkdir -p ${PNFS_PRFIX}/${DIR} > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Failed to create directory ${PNFS_PRFIX}/${DIR}"
exit 3;
fi
fi
touch ${PNFS_FILE}
FILE_SIZE=`stat -c "%s" ${SRC}`
touch "${PNFS_PRFIX}/${DIR}/.(fset)(${FILE})(size)(${FILE_SIZE})"
chmod --reference=${SRC} ${PNFS_FILE}
chown --reference=${SRC} ${PNFS_FILE}
echo "Creating control file for pnfsID $PNFS_ID"
PNFS_ID=`cat "${PNFS_PRFIX}/${DIR}/.(id)(${FILE})"`
echo "precious" > ${POOL_BASE}/control/${PNFS_ID}
echo "Copy ${SRC} to ${POOL_BASE}/data/${PNFS_ID}"
cp ${SRC} ${POOL_BASE}/data/${PNFS_ID}
exit 0