{ pkgs, writeShellScriptBin }: writeShellScriptBin "disk-mapper-part" '' set -x DISK=$1 DM_NAME=$(basename $DISK) if [[ ! -e /dev/mapper/$DM_NAME ]]; then DISK_ID=''${2-$(printf %s "$DM_NAME" | sha256sum)} DISK_TYPE=7 # NTFS MBR_FILE=$(mktemp -t vm-$DM_NAME-XXXXXXXX.mbr) BLOCK=$(basename $(readlink $DISK)) BLOCK_START=$(cat /sys/class/block/$BLOCK/start) BLOCK_SIZE=$(cat /sys/class/block/$BLOCK/size) DISK_SIZE=$(((BLOCK_SIZE + 2048 + 2047) / 2048 * 2048)) dd if=/dev/zero of=$MBR_FILE bs=512 count=2048 status=none LDEV=$(losetup --show -f $MBR_FILE) END_GUARD=$((DISK_SIZE - 2048 - BLOCK_SIZE)) if [[ $END_GUARD -ne 0 ]]; then END_GUARD="$((BLOCK_SIZE + 2048)) $END_GUARD zero" else END_GUARD= fi dmsetup create $DM_NAME <