Keep filesystem labels #101
145
rpi-clone
145
rpi-clone
@@ -546,26 +546,80 @@ print_options()
|
||||
printf "%-23s:\n" "-----------------------"
|
||||
}
|
||||
|
||||
ext_label()
|
||||
dst_part_label()
|
||||
{
|
||||
pnum=$1
|
||||
fs_type=$2
|
||||
flag=$3
|
||||
label_arg=""
|
||||
label=""
|
||||
|
||||
if [ "$ext_label" != "" ] && [[ "$fs_type" == *"ext"* ]]
|
||||
then
|
||||
rep="${ext_label: -1}"
|
||||
if [ "$rep" == "#" ]
|
||||
then
|
||||
label_arg=${ext_label:: -1}
|
||||
label_arg="$flag $label_arg$pnum"
|
||||
label="${ext_label:: -1}"
|
||||
elif ((pnum == root_part_num))
|
||||
then
|
||||
label_arg="$flag $ext_label"
|
||||
label="$ext_label"
|
||||
fi
|
||||
fi
|
||||
printf -v "${4}" "%s" "$label_arg"
|
||||
|
||||
if [ -z "$label" -a -n "${src_label[$pnum]}" ]
|
||||
then
|
||||
label="${src_label[$pnum]}"
|
||||
fi
|
||||
printf -v "${3}" "%s" "$label"
|
||||
}
|
||||
|
||||
mkfs_label()
|
||||
{
|
||||
pnum=$1
|
||||
fs_type=$2
|
||||
|
||||
label_flag=""
|
||||
case "$fs_type" in
|
||||
# This list is probably overcomplete, but might simplify
|
||||
# future additions.
|
||||
vfat|msdos|exfat|fat16|fat32)
|
||||
label_flag=-n
|
||||
;;
|
||||
ext2|ext3|ext4|ntfs|xfs)
|
||||
label_flag=-L
|
||||
;;
|
||||
hfs|hfsplus)
|
||||
label_flag=-v
|
||||
;;
|
||||
reiserfs)
|
||||
label_flag=-l
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
label_arg=""
|
||||
dst_part_label "$pnum" "$fs_type" label
|
||||
if [ -n "$label" -a -n "$label_flag" ]
|
||||
then
|
||||
label_arg="$label_flag $label"
|
||||
fi
|
||||
printf -v "${3}" "%s" "$label_arg"
|
||||
}
|
||||
|
||||
change_label()
|
||||
{
|
||||
pnum=$1
|
||||
fs_type=$2
|
||||
dev=$3
|
||||
|
||||
dst_part_label "$pnum" "$fs_type" label
|
||||
if [ "$label" != "" ] && [[ "$fs_type" == *"ext"* ]]
|
||||
then
|
||||
echo " e2label $dev $label"
|
||||
e2label $dev $label
|
||||
elif [ "$label" != "" ] && [[ "$fs_type" == *"fat"* ]]
|
||||
then
|
||||
echo " fatlabel $dev $label"
|
||||
fatlabel $dev $label
|
||||
fi
|
||||
}
|
||||
|
||||
get_src_disk()
|
||||
@@ -636,8 +690,11 @@ fi
|
||||
# src_root_dev, if on device other than booted, is not in src_partition_table
|
||||
# and src_fdisk_table, but is in src_df_table and src_mount_table
|
||||
#
|
||||
src_partition_table=$(parted -m "/dev/$src_disk" unit s print | tr -d ';')
|
||||
src_partition_table=$(parted --script -m "/dev/$src_disk" unit s print | tr -d ';')
|
||||
src_fdisk_table=$(fdisk -l /dev/$src_disk | grep "^/dev/")
|
||||
# Parted seems to force a partition rescan, which hides fs labels from
|
||||
# lsblk output. Wait for kernel/udev to be done processing.
|
||||
udevadm settle
|
||||
|
||||
tmp=$(df | grep -e "^/dev/$src_disk" -e "^/dev/root" -e "$src_root_dev" \
|
||||
| tr -s " ")
|
||||
@@ -739,13 +796,10 @@ do
|
||||
src_name[p]="${src_mounted_dir[p]}"
|
||||
fi
|
||||
|
||||
if [[ "$part_type" == *"ext"* ]]
|
||||
label=`lsblk --raw --output label --noheadings "${src_device[p]}"`
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
label=`e2label ${src_device[p]} 2> /dev/null`
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
src_label[p]="$label"
|
||||
fi
|
||||
src_label[p]="$label"
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -1086,7 +1140,11 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst_partition_table=$(parted -m "/dev/$dst_disk" unit s print | tr -d ';')
|
||||
dst_partition_table=$(parted --script -m "/dev/$dst_disk" unit s print | tr -d ';')
|
||||
# Parted seems to force a partition rescan, which hides fs labels from
|
||||
# lsblk output. Wait for kernel/udev to be done processing.
|
||||
udevadm settle
|
||||
|
||||
n_dst_parts=$(echo "$dst_partition_table" | tail -n 1 | cut -d ":" -f 1)
|
||||
if [ "$n_dst_parts" == "/dev/$dst_disk" ]
|
||||
then
|
||||
@@ -1139,16 +1197,15 @@ do
|
||||
if [[ "$part_type" == *"linux-swap"* ]]
|
||||
then
|
||||
dst_fs_type[p]="swap"
|
||||
elif [[ "$part_type" == *"ext"* ]]
|
||||
elif ((p == ext_num))
|
||||
then
|
||||
label=`e2label ${dst_device[p]} 2> /dev/null`
|
||||
dst_fs_type[p]="EXT"
|
||||
else
|
||||
label=`lsblk --raw --output label --noheadings "${dst_device[p]}"`
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
dst_label[p]="$label"
|
||||
fi
|
||||
elif ((p == ext_num))
|
||||
then
|
||||
dst_fs_type[p]="EXT"
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -1505,9 +1562,9 @@ Use -U for unattended even if initializing.
|
||||
|
||||
if [ "${src_mounted_dir[p]}" == "/boot" ] && ((p == 1))
|
||||
then
|
||||
ext_label $p "$fs_type" "-L" label
|
||||
printf " => mkfs -t $mkfs_type $label $dst_dev ..."
|
||||
yes | mkfs -t $mkfs_type $label $dst_dev &>> /tmp/$PGM-output
|
||||
mkfs_label $p "$fs_type" label_opt
|
||||
printf " => mkfs -t $fs_type $label_opt $dst_dev ..."
|
||||
yes | mkfs -t $mkfs_type $label_opt $dst_dev &>> /tmp/$PGM-output
|
||||
echo ""
|
||||
else
|
||||
if [ "$fs_type" == "swap" ]
|
||||
@@ -1518,9 +1575,9 @@ Use -U for unattended even if initializing.
|
||||
then
|
||||
if [ "${src_mounted_dir[p]}" != "" ] || ((p == n_image_parts))
|
||||
then
|
||||
ext_label $p $fs_type "-L" label
|
||||
printf " => mkfs -t $mkfs_type $label $dst_dev ..."
|
||||
yes | mkfs -t $mkfs_type $label $dst_dev &>> /tmp/$PGM-output
|
||||
mkfs_label "$p" "$fs_type" label_opt
|
||||
printf " => mkfs -t $mkfs_type $label_opt $dst_dev ..."
|
||||
yes | mkfs -t $mkfs_type $label_opt $dst_dev &>> /tmp/$PGM-output
|
||||
echo ""
|
||||
if ((p == n_image_parts))
|
||||
then
|
||||
@@ -1540,12 +1597,7 @@ Use -U for unattended even if initializing.
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
ext_label $p $fs_type "" label
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
echo " e2label $dst_dev $label"
|
||||
e2label $dst_dev $label
|
||||
fi
|
||||
change_label "$p" "$fs_type" "$dst_dev"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -1667,13 +1719,7 @@ do
|
||||
sync_msg_done=1
|
||||
dst_dev=/dev/${dst_part_base}${p}
|
||||
fs_type=${src_fs_type[$p]}
|
||||
ext_label $p $fs_type "" label
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
qecho " e2label $dst_dev $label"
|
||||
e2label $dst_dev $label
|
||||
fi
|
||||
|
||||
change_label "$p" "$fs_type" "$dst_dev"
|
||||
mount_partition ${src_device[p]} $clone_src ""
|
||||
mount_partition $dst_dev $clone "$clone_src"
|
||||
unmount_list="$clone_src $clone"
|
||||
@@ -1685,12 +1731,7 @@ done
|
||||
qprintf "Syncing mounted partitions:\n"
|
||||
|
||||
fs_type=${src_fs_type[$root_part_num]}
|
||||
ext_label $root_part_num $fs_type "" label
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
qecho " e2label $dst_root_dev $label"
|
||||
e2label $dst_root_dev $label
|
||||
fi
|
||||
change_label "$root_part_num" "$fs_type" "$dst_root_dev"
|
||||
|
||||
mount_partition $dst_root_dev $clone ""
|
||||
unmount_list="$clone"
|
||||
@@ -1713,12 +1754,7 @@ do
|
||||
|
||||
dst_dev=/dev/${dst_part_base}${p}
|
||||
fs_type=${src_fs_type[$p]}
|
||||
ext_label $p $fs_type "" label
|
||||
if [ "$label" != "" ]
|
||||
then
|
||||
qecho " e2label $dst_dev $label"
|
||||
e2label $dst_dev $label
|
||||
fi
|
||||
change_label "$p" "$fs_type" "$dst_dev"
|
||||
|
||||
mount_partition "$dst_dev" "$dst_dir" "$unmount_list"
|
||||
rsync_file_system "${src_mounted_dir[p]}/" "${dst_dir}" ""
|
||||
@@ -1770,12 +1806,7 @@ fi
|
||||
|
||||
rm -f $clone/etc/udev/rules.d/70-persistent-net.rules
|
||||
|
||||
dst_root_vol_name=`e2label $dst_root_dev`
|
||||
|
||||
if [ "$dst_root_vol_name" = "" ]
|
||||
then
|
||||
dst_root_vol_name="no label"
|
||||
fi
|
||||
dst_root_vol_name=${dst_label[$root_part_num]}
|
||||
|
||||
if ((have_grub))
|
||||
then
|
||||
|
||||
Reference in New Issue
Block a user