diff --git a/src/disk.sh b/src/disk.sh index 341e380..824087f 100644 --- a/src/disk.sh +++ b/src/disk.sh @@ -373,7 +373,8 @@ createDevice () { ;; "ide" ) result+=",if=none \ - -device ide-hd,drive=${DISK_ID},bus=ide.$DISK_INDEX,rotation_rate=$DISK_ROTATION${index}" + -device ich9-ahci,id=ahci${DISK_INDEX},addr=$DISK_ADDRESS,iothread=io2 \ + -device ide-hd,drive=${DISK_ID},bus=ahci$DISK_INDEX.0,rotation_rate=$DISK_ROTATION${index}" echo "$result" ;; "blk" | "virtio-blk" ) @@ -416,7 +417,8 @@ addMedia () { ;; "ide" ) result+=",if=none \ - -device ide-cd,drive=${DISK_ID},bus=ide.${DISK_BUS}${index}" + -device ich9-ahci,id=ahci${DISK_BUS},addr=$DISK_ADDRESS,iothread=io2 \ + -device ide-cd,drive=${DISK_ID},bus=ahci${DISK_BUS}.0${index}" echo "$result" ;; "blk" | "virtio-blk" ) @@ -529,10 +531,30 @@ html "Initializing disks..." case "${DISK_TYPE,,}" in "ide" | "usb" | "scsi" | "blk" | "auto" ) ;; - * ) error "Invalid DISK_TYPE, value \"$DISK_TYPE\" is unrecognized!" && exit 80 ;; + * ) error "Invalid DISK_TYPE specified, value \"$DISK_TYPE\" is unrecognized!" && exit 80 ;; esac -[[ "${MACHINE,,}" != "virt" ]] && MEDIA_TYPE="ide" || MEDIA_TYPE="auto" +if [ -z "${MEDIA_TYPE:-}" ]; then + case "${DISK_TYPE,,}" in + "ide" | "usb" | "scsi" ) + if [[ "${MACHINE,,}" == "virt" ]]; then + MEDIA_TYPE="auto" + else + MEDIA_TYPE="$DISK_TYPE" + fi ;; + "blk" | "auto" ) + if [[ "${MACHINE,,}" != "virt" ]] && [[ "${MACHINE,,}" != "pc-i440fx-2"* ]]; + MEDIA_TYPE="ide" + else + MEDIA_TYPE="auto" + fi ;; + esac +fi + +case "${MEDIA_TYPE,,}" in + "ide" | "usb" | "scsi" | "blk" | "auto" ) ;; + * ) error "Invalid MEDIA_TYPE specified, value \"$MEDIA_TYPE\" is unrecognized!" && exit 80 ;; +esac if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then ADD_OPTS=$(addMedia "$BOOT" "$MEDIA_TYPE" "0" "$BOOT_INDEX" "0x5") @@ -543,7 +565,12 @@ DRIVERS="/drivers.iso" [ ! -f "$DRIVERS" ] || [ ! -s "$DRIVERS" ] && DRIVERS="$STORAGE/drivers.iso" if [ -f "$DRIVERS" ] && [ -s "$DRIVERS" ]; then - ADD_OPTS=$(addMedia "$DRIVERS" "$MEDIA_TYPE" "1" "" "0x6") + if [[ "${MACHINE,,}" != "virt" ]] && [[ "${MACHINE,,}" != "pc-i440fx-2"* ]]; + DRIVER_TYPE="ide" + else + DRIVER_TYPE="auto" + fi + ADD_OPTS=$(addMedia "$DRIVERS" "$DRIVER_TYPE" "1" "" "0x6") DISK_OPTS+=" $ADD_OPTS" fi