./src/buildroot/package/fog/scripts/usr/share/fog/lib/funcs.sh pigz $PIGZ_COMP < $fifo | split -a 3 -d -b 200m - ${file}. & mainuuidfilename="$imagePath/d${disk_number}.original.uuids" swapuuidfilename="$imagePath/d${disk_number}.original.swapuuids" sfdiskoriginalpartitionfilename="$imagePath/d${disk_number}.partitions" sfdisklegacyoriginalpartitionfilename="$imagePath/d${disk_number}.original.partitions" sfdiskminimumpartitionfilename="$imagePath/d${disk_number}.minimum.partitions" sgdiskoriginalpartitionfilename="$imagePath/d${disk_number}.sgdisk.original.partitions" fixed_size_file="$imagePath/d${disk_number}.fixed_size_partitions" hasgrubfilename="$imagePath/d${disk_number}.has_grub" [[ -n $sgdisk ]] && hasgrubfilename="$imagePath/d${disk_number}.grub.mbr" [[ -n $sgdisk && $hasGRUB -eq 1 ]] && \ mbr="$imagePath/d${disk_number}.grub.mbr" || \ mbr="$imagePath/d${disk_number}.mbr" ebrfilename="$path/d${disk_number}p${part_number}.ebr" # Save enough MBR and embedding area to capture all of GRUB # Strategy is to capture EVERYTHING before the first partition. # Then, leave a marker that this is a GRUB MBR for restoration. # We could get away with less storage, but more details are required # to parse the information correctly. It would make the process # more complicated. # $1 is the disk # $2 is the disk number # $3 is the image path to save the file to. # $4 is the determinator of sgdisk use or not saveGRUB() { # Determine the number of sectors to copy # Hack Note: print $4+0 causes the column to be interpretted as a number # so the comma is tossed local count=$(sfdisk -d $disk 2>/dev/null | awk /start=\ *[1-9]/'{print $4+0}' | sort -n | head -n1) local has_grub=$(dd if=$disk bs=512 count=1 2>&1 | grep -i 'grub') # Ensure that no more than 1MiB of data is copied (already have this size used elsewhere) [[ $count -gt 2048 ]] && count=2048 local mbrfilename="" MBRFileName "$imagePath" "$disk_number" "mbrfilename" "$sgdisk" dd if=$disk of=$mbrfilename count=$count bs=512 >/dev/null 2>&1 } hasGrubFileName() { local imagePath="$1" # e.g. /net/dev/foo local disk_number="$2" # e.g. 1 local sgdisk="$3" [[ -z $imagePath ]] && handleError "No image path passed (${FUNCNAME[0]})\n Args Passed: $*" [[ -z $disk_number ]] && handleError "No disk number passed (${FUNCNAME[0]})\n Args Passed: $*" hasgrubfilename="$imagePath/d${disk_number}.has_grub" [[ -n $sgdisk ]] && hasgrubfilename="$imagePath/d${disk_number}.grub.mbr" } savePartitionTablesAndBootLoaders() { case $hasgpt in 0) strdots="Saving Partition Tables (MBR)" case $osid in 4|50|51) [[ $disk_number -eq 1 ]] && strdots="Saving Partition Tables and GRUB (MBR)" ;; esac dots "$strdots" saveGRUB "$disk" "$disk_number" "$imagePath" sfdisk -d $disk 2>/dev/null > $sfdiskfilename [[ $have_extended_partition -ge 1 ]] && saveAllEBRs "$disk" "$disk_number" "$imagePath" echo "Done" ;; 1) dots "Saving Partition Tables (GPT)" saveGRUB "$disk" "$disk_number" "$imagePath" "true" sgdisk -b "$imagePath/d${disk_number}.mbr" $disk >/dev/null 2>&1 if [[ ! $? -eq 0 ]]; then echo "Failed" debugPause handleError "Error trying to save GPT partition tables (${FUNCNAME[0]})\n Args Passed: $*" fi sfdisk -d $disk 2>/dev/null > $sfdiskfilename echo "Done" ;; esac }o clearPartitionTables() { sgdisk -Z $disk >/dev/null 2>&1 } restorePartitionTablesAndBootLoaders() { if [[ $table_type == GPT ]]; then dots "Restoring Partition Tables (GPT)" restoreGRUB "$disk" "$disk_number" "$imagePath" "true" sgdisk -gel $tmpMBR $disk >/dev/null 2>&1 [[ ! $? -eq 0 ]] && handleError "Error trying to restore GPT partition tables (${FUNCNAME[0]})\n Args Passed: $*" global_gptcheck="yes" echo "Done" else [big cheat for MBR, dd, sfdisk for EBRs] fi } savePartition() { case $fstype in swap) echo " * Saving swap partition UUID" swapUUIDFileName "$imagePath" "$disk_number" saveSwapUUID "$swapuuidfilename" "$part" ;; *) case $parttype in 0x5|0xf) echo " * Not capturing content of extended partition" debugPause EBRFileName "$imagePath" "$disk_number" "$part_number" touch "$ebrfilename" ;; *) echo " * Using partclone.$fstype" debugPause imgpart="$imagePath/d${disk_number}p${part_number}.img" uploadFormat "$fifoname" "$imgpart" partclone.$fstype -fsck-src-part -c -s $part -O $fifoname -N -f 1 case $? in 0) mv ${imgpart}.000 $imgpart >/dev/null 2>&1 echo " * Image Captured" ;; *) handleError "Failed to complete capture (${FUNCNAME[0]})\n Args Passed: $*" ;; esac ;; esac ;; esac