1
0

Amélioration des unmount/unloop

This commit is contained in:
Jybz 2019-11-05 21:42:12 +00:00
parent 3122435982
commit c02a9a2a94

View File

@ -309,6 +309,7 @@ function createImageWrap()
BOOTFS="ext4"
fi
formatpartitions ${BOOTFS} ext4
return 0
}
@ -343,13 +344,11 @@ function createimage()
info "making partitions"
echo -e "${FDISK_SCRIPT}" | /sbin/fdisk ${DEVICE}
# Activate loop device
info "device to detach ${DEVICE}"
/sbin/losetup -d "${DEVICE}"
DEVICE=$(/sbin/partx -va "${INSTALL_PATH}/${IMAGE}" | /bin/grep -m 1 -E -o '/dev/loop.?')
info "New attached device ${DEVICE}"
info "partitions list:"
info "$(/sbin/partx -v "${INSTALL_PATH}/${IMAGE}")"
#Activate 'pY' : /dev/loopXpY
partx -vu "${DEVICE}"
#Previous function give us a list of partition. It is easy to get it and define prior this list the partition.
#But... How to distinguish between the boot p1 and the root p2 if both are empty and ext4 ? ...
if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then
BOOTP="${DEVICE}p1"
ROOTP="${DEVICE}p2"
@ -446,6 +445,7 @@ function copyingsystem()
copyingcommon
sync
warning "You can now burn the image ( ${INSTALL_PATH}/${IMAGE} ) on SD card"
return 0
}
@ -491,24 +491,40 @@ function unmountingPartitions()
# Syncing devices before unmounting
/usr/bin/sync
if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then
/usr/bin/umount "${BOOT}"
if [ -z "${BOOTP}" ] && [ -z "${ROOTP}" ] ; then
warning "Root partition and Boot partition not defined !"
for LOOP in $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) ; do
IFS=$'\n'
for PARTITION in $(mount -l | grep ${LOOP}); do
MOUNTPOINT=$(echo "$PARTITION" | cut -d ' ' -f 3)
PARTITION=$(echo "$PARTITION" | cut -d ' ' -f 1)
info "unmount ${PARTITION} and remove ${MOUNTPOINT}"
/usr/bin/umount "${PARTITION}"
if [ ${?} -eq 0 ]; then
/bin/rmdir "${MOUNTPOINT}"
else
error "line ${LINENO} error unmounting ${BOOT}..."
fi
done
unset IFS
done
else
if [ ! -z "${BOOTP}" ]; then
/usr/bin/umount "${BOOTP}"
if [ ${?} -eq 0 ]; then
/bin/rmdir "${BOOT}"
else
error "line ${LINENO} error unmounting ${BOOT}..."
fi
fi
/usr/bin/umount "${ROOTP}"
if [ ${?} -eq 0 ]; then
/bin/rmdir "${BOOT}"
/bin/rmdir "${ROOT}"
else
error "line ${LINENO} error unmounting ${BOOT}: exiting"
exit ${ERR_1}
error "line ${LINENO} error unmounting ${ROOT}..."
fi
fi
/usr/bin/umount "${ROOT}"
if [ ${?} -eq 0 ]; then
/bin/rmdir "${ROOT}"
else
error "line ${LINENO} error unmounting ${ROOT}: exiting"
# exit ${ERR_1}
fi
return 0
}
@ -518,32 +534,17 @@ function unloopingImage(){
# Syncing devices before unmounting
/usr/bin/sync
if [ 1 -eq ${SEPARATE_BOOT_PARTITION} ]; then
/usr/sbin/partx -d "${BOOTP}"
if [ ${?} -ne 0 ]; then
error "line ${LINENO} warning : error unmounting ${BOOTP} "
# exit ${ERR_1}
fi
/usr/sbin/partx -d "${ROOTP}"
if [ ${?} -ne 0 ]; then
error "line ${LINENO} warning : error unmounting ${ROOTP} "
# exit ${ERR_1}
fi
else
/usr/sbin/partx -d "${ROOTP}"
if [ ${?} -ne 0 ]; then
error "line ${LINENO} warning : error unmounting ${ROOTP} "
# exit ${ERR_1}
fi
fi
# [root@jabztop mageia4arm (master)]# losetup -l -O NAME,BACK-FILE -n
# /dev/loop0 /home/jibz/workspaces/mageia4arm/build/Mageia-7-bananaPro1.img (deleted)
info "Looped devices to unmount : $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) "
for LOOP in $(losetup -l -O NAME,BACK-FILE -n | grep "${IMAGE}" | cut -d ' ' -f 1 ) ; do
info "removing ${LOOP}"
losetup -d "${LOOP}"
for PARTITION in ${LOOP}p* ; do
partx -dv "${PARTITION}"
done
# losetup -d "${LOOP}"
kpartx -d "${INSTALL_PATH}/${IMAGE}"
done
return 0
@ -599,19 +600,6 @@ function clean()
warning "${IMAGE} does not exists"
fi
# Removing boot and root directory
if [ -d "${BOOT}" ]; then
info "Removing ${BOOT}"
/bin/rm -rf "${BOOT}"
else
warning "${BOOT} does not exists"
fi
if [ -d "${ROOT}" ]; then
info "Removing ${ROOT}"
/bin/rm -rf "${ROOT}"
else
warning "${ROOT} does not exists"
fi
return 0
}