Как записать ISO на флешку

Автор simonflex, 12 апреля 2019, 09:20:46

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

simonflex

Всем доброго дня.
Понадобилось сделать загрузочную флешку с dos.
Пробовал записать несколько образов с помощью dd if=file.iso of=/dev/sdb
Но с флешки невозможно загрузится видимо потому что файловая система после записи iso 9660 или UDF
Подскажите как правильно или чем записать образ чтобы возможно было загрузится с флешки.
Я всегда с пониманием оцениваю любую помощь !

symon2014

#1
fdisk -l    с воткнутой флешкой . Покажи только строки о ней.
А вообщето винда не пишется с помощью dd обычно.

simonflex

fdisk у меня нету.
lsblk -f
sdb    iso9660 DOS71CD 2019-04-12-04-23-24-00
Я всегда с пониманием оцениваю любую помощь !

simonflex

Цитата: symon2014 от 12 апреля 2019, 09:24:36А вообщето винда не пишется с помощью dd обычно.
к х-м винду, мне нужно попробовать bios обновить. Что-то мне не нравится то что выдает dmesg
[    0.000000] DMI: Acer Aspire 5750G/JE50_HR, BIOS V1.21 08/09/2012
[    0.240945] Calgary: detecting Calgary via BIOS EBDA area
[    0.356227] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[   13.377303] ACPI BIOS Error (bug): Could not resolve [\_SB.PCI0.GFX0.DD02._BCL], AE_NOT_FOUND (20180810/psargs-330)
[   13.385571] MXM: GUID detected in BIOS
[   13.385896] pci 0000:01:00.0: optimus capabilities: enabled, status dynamic power, hda bios codec supported
[   13.432324] nouveau 0000:01:00.0: bios: version 70.08.3c.00.22
[   13.959328] intel_rapl: RAPL package 0 domain package locked by BIOS

На оффиц сайте версия 1.21 а вот даты не совпадают
Я всегда с пониманием оцениваю любую помощь !

symon2014

Если честно , то я с вас фигею. Такое разнообразие вопросов , компов и систем , что складывается впечатление , буддто вы подрабатываете эникейщиком и заходите на форум за консультацией.
К делу. Что за ось , если нет fdisk ? File.iso это винда , нужная для перепрошивки биос?
Если без подробностей , то винда ставиться на флешку по такому принципу. Флешка форматируется в фат32 , создается раздел , которому в руки вставляют флаг boot , и на него копируют содержимое исошника. :)

simonflex

Цитата: symon2014 от 12 апреля 2019, 10:00:46File.iso это винда , нужная для перепрошивки биос?
еще раз для вас персонально !!!!!!!
Мне не нужна винда. Мне нужна голая dos ! *.iso это образы dos Но заливая их на флешку, не грузится с нее
Я всегда с пониманием оцениваю любую помощь !

simonflex

Цитата: symon2014 от 12 апреля 2019, 10:00:46Флешка форматируется в фат32 , создается раздел , которому в руки вставляют флаг boot , и на него копируют содержимое исошника.
щас попробую
Я всегда с пониманием оцениваю любую помощь !

symon2014

Что за голая дос ? Имя есть ? Msdos 6.2.2. что ли.

simonflex

Я всегда с пониманием оцениваю любую помощь !

ferum

А попробуйте скрипт bootiso
Открыть содержимое (спойлер)
#!/bin/bash

# Author: jules randolph <jules.sam.randolph@gmail.com> https://github.com/jsamr
# License: MIT
# Version 2.5.2
#
# Usage: [<options>...] <file.iso>
#
# Create a bootable FAT32 USB device from a linux-GNU/unix ISO.
#
# Options
#  -h, --help, help             Display this help message.
#  -v, --version                Display version and exit.
#  -d, --device  <device>       Select <device> block file as USB device.
#                               If <device> is not connected through USB, bootiso will fail and exit.
#                               Device block files are usually situated in /dev/sXX or /dev/hXX.
#                               You will be prompted to select a device if you don't use this option.
#  -b, --bootloader             Install a bootloader with syslinux (safe mode). Does not work with --dd option.
#  -y, --assume-yes             bootiso won't prompt the user for confirmation before erasing and partitioning USB device.
#  -a, --autoselect             Enable autoselecting USB devices in conjunction with -y option.
#                               Autoselect will automatically select a USB drive device if there is exactly one connected to the system.
#                               Enabled by default when neither -d nor --no-usb-check options are given.
#  -J, --no-eject               Do not eject device after unmounting.
#  -l, --list-usb-drives        List available USB drives and exit.
#  -M, --no-mime-check          bootiso won't assert that selected ISO file has the right mime-type.
#  -s, --strict-mime-check      Disallow loose application/octet-stream mime type in ISO file.
#  --                           POSIX end of options.
#  --dd                         Use dd utility and create an iso9660 fs instead of mounting + rsync.
#                               Does not allow bootloader installation with syslinux.
#  --no-usb-check               bootiso won't assert that selected device is a USB (connected through USB bus).
#
# How it works
#
# The script walks through the following steps:
# 1. Request sudo.
# 2. Check commandDependencies and prompt user to install any missing.
# 3. If not given the -M, --no-mime-check option, assert that provided ISO exists and has the expected application/x-iso9660-image mime-type via `file' utiltiy. If the assertion fails, exit with error status.
# 4. If given the -d, --device option, check that the selected device exists and is not a partition. Otherwise, prompt the user to select a device and perform the above-mentioned controls.
# 5. If not given the --no-usb-check option, assert that the given device is connected through USB via `udevadm' utility. If the assertion fails, exit with error status.
# 6. If not given the -y, --assume-yes option, prompt the user for confirmation that data might be lost for selected device if he goes to next step.
# 7. Unmount the USB if mounted, blank it and delete existing partitions.
# 8. Create a FAT32 partition on the USB device.
# 9. Create a temporary dir to mount the ISO file and mount it.
# 10. Create a temporary dir to mount the USB device and mount it.
# 11. Copy files from ISO to USB device.
# 12. If option -b, --bootloader is selected, install a bootloader with syslinux in slow mode.
# 13. Unmount devices and remove temporary folders.
# 14. Eject USB device if -J, --no-eject is not selected

scriptName=$(basename "$0")
bashVersion=$(echo "$BASH_VERSION" | cut -d. -f1)

if [ -z "$BASH_VERSION" ] || [ "$bashVersion" -lt 4 ]; then
  echo "You need bash v4+ to run this script. Aborting..."
  exit 1
fi

typeset -a commandDependencies=('lsblk' 'sfdisk' 'mkfs' 'blkid' 'wipefs' 'grep' 'file' 'awk' 'mlabel')
typeset -A commandPackages=([lsblk]='util-linux' [sfdisk]='util-linux' [mkfs]='util-linux' [blkid]='util-linux' [wipefs]='util-linux' [grep]='grep' [file]='file' [awk]='gawk' [mlabel]='mtools' [syslinux]='syslinux' [rsync]='rsync')
typeset shortOptions='bydJahlsM'

typeset selectedDevice
typeset selectedPartition
typeset selectedIsoFile
typeset isoLabel
typeset isoMountPoint
typeset usbMountPoint
typeset startTime
typeset endTime
typeset -a devicesList
typeset operationSuccess=false

# options

typeset addSyslinuxBootloader=false
typeset disableMimeCheck=false
typeset disableUSBCheck=false
typeset disableConfirmation=false
typeset useDD=false
typeset shouldMakeFAT32Partition=true
typeset ejectDevice=true
typeset autoselect=false
typeset isEndOfOptions=false
typeset strictMimeCheck=false

typeset version="2.5.2"
typeset help_message="\
Create a bootable USB from any ISO securely.
Usage: $scriptName [<options>...] <file.iso>

Options

-h, --help, help             Display this help message and exit.
-v, --version                Display version and exit.
-d, --device  <device>       Select <device> block file as USB device.
                             If <device> is not connected through USB, \`$scriptName' will fail and exit.
                             Device block files are usually situated in /dev/sXX or /dev/hXX.
                             You will be prompted to select a device if you don't use this option.
-b, --bootloader             Install a bootloader with syslinux (safe mode) for non-hybrid ISOs. Does not work with \`--dd' option.
-y, --assume-yes             \`$scriptName' won't prompt the user for confirmation before erasing and partitioning USB device.
                             \\033[1;33mUse at your own risks.\\033[0m
-a, --autoselect             Enable autoselecting USB devices in conjunction with -y option.
                             Autoselect will automatically select a USB drive device if there is exactly one connected to the system.
                             Enabled by default when neither -d nor --no-usb-check options are given.
-J, --no-eject               Do not eject device after unmounting.
-l, --list-usb-drives        List available USB drives.
-M, --no-mime-check          \`$scriptName' won't assert that selected ISO file has the right mime-type.
-s, --strict-mime-check      Disallow loose application/octet-stream mime type in ISO file.
--                           POSIX end of options.
--dd                         Use \`dd' utility instead of mounting + \`rsync'.
                             Does not allow bootloader installation with syslinux.
--no-usb-check               \`$scriptName' won't assert that selected device is a USB (connected through USB bus).
                             \\033[0;31mUse at your own risks.\\033[0m

Readme

    Bootiso v$version.
    Author: Jules Samuel Randolph
    Bugs and new features: https://github.com/jsamr/bootiso/issues
    If you like bootiso, please help the community by making it visible:
    * star the project at https://github.com/jsamr/bootiso
    * upvote those SE post: https://goo.gl/BNRmvm https://goo.gl/YDBvFe
"

display_help() {
  echo -e "$help_message"
}

echoerr() {
  >&2 echo -e "\\033[0;31m$1\\033[0m"
}

echowarn() {
  echo -e "\\033[1;33m$1\\033[0m"
}

echogood() {
  echo -e "\\033[0;32m$1\\033[0m"
}

failAndExit() {
  echoerr "$1\\nExiting $scriptName..."
  exit 1
}

hasPackage() {
  which "$1" &> /dev/null
  return $?
}

initPckgManager() {
  if hasPackage apt-get; then # Debian
    pkgmgr="apt-get -y install"
    return 0
  fi
  if hasPackage dnf; then # Fedora
    pkgmgr="dnf -y install"
    return 0
  fi
  if hasPackage yum; then # Fedora
    pkgmgr="yum -y install"
    return 0
  fi
  if hasPackage pacman; then # Arch
    pkgmgr="pacman -S"
    return 0
  fi
  if hasPackage zypper; then # OpenSuse
    pkgmgr="zypper install"
    return 0
  fi
  if hasPackage emerge; then # Gentoo
    pkgmgr="emerge"
    return 0
  fi
  return 1
}

checkSudo() {
  if ((EUID != 0)); then
    echo "Granting root privileges for $scriptName."
    if [[ -t 1 ]]; then
      sudo "$0" "$@"
    else
      exec 1>output_file
      gksu "$0" "$@"
    fi
    exit
  fi
}

failISOCheck() {
  echoerr "Provided file \`$selectedIsoFile' doesn't seem to be an ISO file (wrong mime type: \`$mimetype')."
  echowarn "Try it with \`--no-mime-check' option."
  echoerr "Exiting $scriptName..."
  exit 1
}

assertISOMimeType() {
  typeset mimetype=$(file --mime-type  -b -- "$selectedIsoFile")
  typeset -i isOctetStream
  if [ "$disableMimeCheck" == 'true' ]; then
    echowarn "Mime check has been disabled with \`--no-mime-check'. Skipping."
    return 0
  fi
  [ "$mimetype" == "application/octet-stream"  ]
  isOctetStream=$?
  if [ "$strictMimeCheck" == 'true' ] && ((isOctetStream == 0)); then
    failISOCheck
  fi
  if ((isOctetStream != 0)) &&  [ ! "$mimetype" == "application/x-iso9660-image" ]; then
    failISOCheck
  fi
  if ((isOctetStream == 0)); then
    echowarn "Provided file \`$selectedIsoFile' seems to have a loose mime-type \`application/octet-stream'."
    echowarn "It's possible that it is corrupted and you should control its integrity with a checksum tool."
  else
    echogood "The selected ISO file has the right \`application/x-iso9660-image' mime type."
  fi
  # Label is set to uppercase because FAT32 labels should be
  isoLabel=$(blkid -o value -s LABEL -- "$selectedIsoFile" | awk '{print toupper($0)}')
}

checkpkg() {
  if ! hasPackage "$1"; then
    echowarn "Package '$1' not found!"
    if [ ! -z "$pkgmgr" ]; then
      read -r -n1 -p "Attempt installation? (y/n)>" answer
      echo
      case $answer in
        y) $pkgmgr "${commandPackages["$1"]}"
        ;;
        n)
        read -r -n1 -p "Proceed anyway? (y/n)>" answer2
        echo
        if [[ "$answer2" == "n" ]] ; then exit 1
      fi
      ;;
    esac
  else
    failAndExit "Missing dependency \`$1'."
  fi
fi
}

joinBy() { local IFS="$1"; shift; echo "$*"; }

initDevicesList() {
  typeset -a devices
  mapfile -t devices < <(lsblk -o NAME,TYPE | grep --color=never -oP '^\K\w+(?=\s+disk$)')
  for device in "${devices
  • }" ; do
        if [ "$(getDeviceType "/dev/$device")" == "usb" ] || [ "$disableUSBCheck" == 'true' ]; then
          devicesList+=("$device")
        fi
      done
    }

    listDevicesTable() {
      typeset lsblkCmd='lsblk -o NAME,HOTPLUG,SIZE,STATE,TYPE'
      initDevicesList
      if [ "$disableUSBCheck" == 'false' ]; then
        echo "Listing USB drives available in your system:"
      else
        echo "Listing devices available in your system:"
      fi
      if [ "${#devicesList
  • }" -gt 0 ]; then
        $lsblkCmd | sed -n 1p
        $lsblkCmd | grep --color=never -P "^($(joinBy '|' "${devicesList
  • }"))"
        return 0
      else
        echowarn "Couldn't find any USB drive in your system."
        echowarn "If any is physically plugged in, it's likely that it has been ejected and should be plugged out/in to be discoverable."
        return 1
      fi
    }

    parseOptions() {
      typeset key
      while [[ $# -gt 0 ]]; do
        key="$1"
        if [ "$isEndOfOptions" == 'false' ]; then
          case $key in
            -b|--bootloader)
            addSyslinuxBootloader=true
            checkpkg 'syslinux'
            shift
            ;;
            -y|--assume-yes)
            disableConfirmation=true
            shift
            ;;
            -d|--device)
            selectedDevice="$2"
            shift
            shift
            ;;
            -J|--no-eject)
            ejectDevice=false
            shift
            ;;
            -a|--autoselect)
            autoselect=true
            shift
            ;;
            -h|--help|help)
            display_help
            exit 0
            ;;
            -l|--list-usb-drives)
            listDevicesTable
            exit 0
            ;;
            -v|--version)
            echo "$version"
            exit 0
            ;;
            -M|--no-mime-check)
            disableMimeCheck=true
            shift
            ;;
            -s|--strict-mime-check)
            strictMimeCheck=true
            shift
            ;;
            --dd)
            useDD=true
            shouldMakeFAT32Partition=false
            shift
            ;;
            --no-usb-check)
            disableUSBCheck=true
            shift
            ;;
            --)
            isEndOfOptions=true
            shift
            ;;
            -*)
            if [ ! -f "$key" ]; then
              if [[ "$key" =~ ^-["$shortOptions"]{2,}$ ]]; then
                shift
                typeset options=${key#*-}
                typeset -a extractedOptions
                mapfile -t extractedOptions < <(echo "$options" | grep -o . | xargs -d '\n' -n1 printf '-%s\n')
                set -- "${extractedOptions
  • }" "$@"
              else
                printf '\e[0;31m%s\e[m' "Unknown option: "
                printf '%s' "$key" | GREP_COLORS='mt=00;32:sl=00;31' grep --color=always -P "[$shortOptions]"
                if [[ "$key" =~ ^-[a-zA-Z0-9]+$ ]]; then
                  typeset wrongOptions=$(printf '%s' "${key#*-}" | grep -Po "[^$shortOptions]" | tr -d '\n')
                  echowarn "Unknown stacked flag(s): \\033[0;31m\`$wrongOptions'\\033[0m."
                fi
                echoerr "Exiting $scriptName..."
                exit 2
              fi
            else
              selectedIsoFile=$1
              shift
            fi
            ;;
            *)
            selectedIsoFile=$1
            shift
            ;;
          esac
      else
        selectedIsoFile=$1
        break
      fi
      done
    }

    checkPackages() {
      for pkg in "${commandDependencies
  • }"; do
        checkpkg "$pkg"
      done
      # test grep supports -P option
      if ! echo 1 | grep -P '1' &> /dev/null; then
        failAndExit "You're using an old version of grep which does not support perl regular expression (-P option)."
      fi

    }

    # print the name of the new folder if operation succeeded, fails otherwise
    # arg1 : template name
    createTempFolder() {
      typeset tmpFileTemplate="/tmp/$1.XXX"
      mktemp -d "$tmpFileTemplate"
      typeset status=$?
      if [ ! $status -eq 0 ]; then
        failAndExit "Failed to create temporary folder"
      fi
    }

    mountIsoFile() {
      isoMountPoint=$(createTempFolder iso) || exit 1
      echogood "Created ISO mount point at \`$isoMountPoint'"
      if ! mount -r -o loop -- "$selectedIsoFile" "$isoMountPoint" > /dev/null; then
        failAndExit "Could not mount ISO file."
      fi
    }

    # Given a device like /dev/sdd
    # Return 0 if device is USB, 1 otherwise
    getDeviceType() {
      typeset deviceName=/sys/block/${1#/dev/}
      typeset deviceType=$(udevadm info --query=property --path="$deviceName" | grep -Po 'ID_BUS=\K\w+')
      echo "$deviceType"
    }

    deviceIsDisk() {
      lsblk --nodeps -o NAME,TYPE "$1" | grep -q disk
      return $?
    }

    selectDevice() {
      typeset _selectedDevice
      containsElement () {
        local e match="$1"
        shift
        for e; do [[ "$e" == "$match" ]] && return 0; done
        return 1
      }
      chooseDevice() {
        echo -e "Select the device corresponding to the USB device you want to make bootable among: $(joinBy ',' "${devicesList
  • }")\\nType exit to quit."
        read -r -p "Select device id>" _selectedDevice
        if containsElement "$_selectedDevice" "${devicesList
  • }"; then
          selectedDevice="/dev/$_selectedDevice"
        else
          if [ "$_selectedDevice" == 'exit' ]; then
            echo "Exiting on user request."
            exit 0
          else
            failAndExit "The drive $_selectedDevice does not exist."
          fi
        fi
      }
      handleDeviceSelection() {
        if [ ${#devicesList
  • } -eq 1 ] && [ "$disableUSBCheck" == 'false' ]; then
          # autoselect
          if [ "$disableConfirmation" == 'false' ] || ([ "$disableConfirmation" == 'true' ] && [ "$autoselect" == 'true' ]); then
            typeset selected="${devicesList[0]}"
            echogood "Autoselecting \`$selected' (only USB device candidate)"
            selectedDevice="/dev/$selected"
          else
            chooseDevice
          fi
        else
          chooseDevice
        fi
      }
      if [ -z "$selectedDevice" ]; then
        # List all hard disk drives
        if listDevicesTable; then
          handleDeviceSelection
        else
          echoerr "There is no USB drive connected to your system."
          echowarn "Use \`--no-usb-check' to bypass this detection at your own risk, or replug an plugged device which is likely ejected."
          echoerr "Exiting $scriptName..."
          exit 1
        fi
      fi
      selectedPartition="${selectedDevice}1"
    }

    assertDeviceIsOK() {
      if [ ! -e "$selectedDevice" ]; then
        failAndExit "The selected device \`$selectedDevice' does not exists"
      fi
      if [ ! -b "$selectedDevice" ]; then
        failAndExit "The selected device \`$selectedDevice' is not a valid block file."
      fi
      if ! deviceIsDisk "$selectedDevice"; then
        failAndExit "The selected device \`$selectedDevice' is not a disk (might be a partition or loop). Select a disk instead."
      fi
    }

    assertDeviceIsUSB() {
      typeset deviceType
      if [ "$disableUSBCheck" == 'true' ]; then
        echowarn "USB check has been disabled. Skipping."
        return 0
      fi
      deviceType=$(getDeviceType "$selectedDevice")
      if [ "$deviceType" != "usb" ]  ; then
        echoerr "The device you selected is not connected through USB (found BUS: \`$deviceType')."
        echowarn "Use \`--no-usb-check' option to bypass this limitation at your own risks."
        echoerr "Exiting $scriptName..."
        exit 1
      fi
      echogood "The selected device \`$selectedDevice' is connected through USB."
    }

    shouldWipeUSBKey() {
      typeset answer='y'
      echowarn "\`$scriptName' is about to wipe out the content of device \`$selectedDevice'."
      if [ "$disableConfirmation" == 'false' ]; then
        read -r -p "Are you sure you want to proceed? (y/n)>" answer
      else
        echowarn "Bypassing confirmation with \`-y' option."
      fi
      if [ "$answer" == 'y' ]; then
        return 0
      else
        return 1
      fi
    }

    partitionUSB() {
      if shouldWipeUSBKey; then
        echo "Erasing contents of $selectedDevice..."
        # unmount any partition
        umount "$selectedDevice" &> /dev/null || true;
        umount "$selectedDevice"? &> /dev/null || true;
        # clean signature from selected device
        wipefs --all --force "$selectedDevice" &> /dev/null
        # erase drive
        dd if=/dev/zero of="$selectedDevice" bs=512 count=1 conv=notrunc status=none || failAndExit "Failed to erase USB device.\\nIt's likely that the device has been ejected and needs to be plugged-in again manually."
        sync
        if [ "$shouldMakeFAT32Partition" == 'true' ]; then
          # Create partition table
          echo "$selectedPartition : start=2048, type=b, bootable" | sfdisk "$selectedDevice" > /dev/null  || failAndExit "Failed to write USB device partition table."
          # format
          echo "Creating FAT32 partition on \`$selectedPartition'..."
          mkfs -t vfat -n "$isoLabel" "$selectedPartition" > /dev/null || failAndExit "Failed to create FAT32 partition on USB device.\\nMake sure you have mkfs.vfat installed on your system. Insall with \`$pkgmgr mkfs.vfat'"
        fi
      else
        failAndExit "Discarding operation."
      fi
    }

    mountUSB() {
      typeset type=vfat
      usbMountPoint=$(createTempFolder usb) || exit 1
      echogood "Created USB device mount point at \`$usbMountPoint'"
      if ! mount -t "$type" "$selectedPartition" "$usbMountPoint" > /dev/null; then
        failAndExit "Could not mount USB device."
      fi
    }

    updateProgress() {
      typeset sp="/-\\|"
      # print when launched from terminal
      if tty -s; then
        printf "\\b%s" "${sp:i++%${#sp}:1}"
      fi
      sleep 0.25
    }

    cleanProgress() {
      # print when launched from terminal
      if tty -s; then
        printf "\\b%s\\n" " "
      fi
    }

    syncWithProgress() {
      printProgress() {
        typeset -i isWriting=1
        typeset -i i=1
        echo -n "Synchronizing writes on device \`${selectedDevice}'    "
        while ((isWriting != 0)); do
          isWriting=$(awk '{ print $9 }' "/sys/block/${selectedDevice#/dev/}/stat")
          updateProgress
        done
        cleanProgress
      }
      sync & printProgress
    }

    rsyncWithProgress() {
      typeset -i i=1
      typeset statusFile=$(mktemp)
      (rsync -r -q -I --no-links --no-perms --no-owner --no-group "$isoMountPoint"/. "$usbMountPoint"; echo "$?" > "$statusFile") &
      pid=$!
      echo -n "Copying files from ISO to USB device with \`rsync'    "
      while [ -e "/proc/$pid" ]; do
        updateProgress
      done
      cleanProgress
      typeset status=$(cat "$statusFile")
      rm "$statusFile"
      if [ ! "$status" -eq 0 ]; then
        failAndExit "Copy command with \`rsync' failed. It's likely that your device has not enough space to contain the ISO image."
      fi
    }

    ddWithProgress() {
      typeset -i i=1
      typeset statusFile=$(mktemp)
      (dd if="$selectedIsoFile" of="$selectedDevice" bs=4MB status=none ; echo "$?" > "$statusFile") &
      pid=$!
      echo -n "Copying files from ISO to USB device with \`dd'    "
      while [ -e "/proc/$pid" ]; do
        updateProgress
      done
      cleanProgress
      typeset status=$(cat "$statusFile")
      rm "$statusFile"
      if [ ! "$status" -eq 0 ]; then
        failAndExit "Copy command with \`dd' failed. It's likely that your device has not enough space to contain the ISO image."
      fi
    }

    copyWithRsync() {
      checkpkg 'rsync'
      rsyncWithProgress
      syncWithProgress
    }

    copyWithDD() {
      ddWithProgress
      syncWithProgress
    }

    installSyslinux() {
      if [ "$addSyslinuxBootloader" == 'true' ]; then
        echo "Installing syslinux bootloader..."
        #shellcheck disable=SC2086
        if ! syslinux --stupid "$1"; then
          echowarn "Syslinux could not properly install the bootloader."
        fi
        if [ -d "$usbMountPoint/isolinux" ]; then
          mv "$usbMountPoint/isolinux" "$usbMountPoint"/syslinux
        fi
        if [ -e "$usbMountPoint/syslinux/isolinux.cfg" ]; then
          mv "$usbMountPoint/syslinux/isolinux.cfg" "$usbMountPoint"/syslinux/syslinux.cfg
        fi
      fi
    }

    execWithRsync() {
      mountIsoFile
      partitionUSB
      mountUSB
      copyWithRsync
      installSyslinux "$selectedPartition"
    }

    execWithDD() {
      partitionUSB
      copyWithDD
    }

    checkOptions() {
      if [ -z "$selectedIsoFile" ]; then
        echoerr "Missing argument \`iso-file'."
        display_help
        exit 2
      fi
      if [ -d "$selectedIsoFile" ]; then
        failAndExit "Provided file \`$selectedIsoFile' is a directory."
      fi
      if [ ! -f "$selectedIsoFile" ]; then
        failAndExit "Provided iso file \`$selectedIsoFile' does not exists."
      fi
      if [ "$useDD" == 'true' ] && [ "$addSyslinuxBootloader" == 'true' ]; then
        failAndExit "In \`dd' mode, \`$scriptName' cannot install a bootloader with \`syslinux'."
      fi
      if [ "$autoselect" == 'true' ] && [ "$disableUSBCheck" == 'true' ]; then
        failAndExit "You cannot set autoselect \`-a' option while disabling USB check with \`--no-usb-check'."
      fi
      # warnings (only with sudo)
      if ((EUID == 0)); then
        if [ "$autoselect" == 'true' ] && [ "$disableConfirmation" == 'false' ]; then
          echowarn "Autoselect \`-a' option is enabled by default when \`-y' option is not set."
        fi
      fi
    }

    main() {
      typeset method
      initPckgManager "$@"
      parseOptions "$@"
      checkOptions
      checkSudo "$@"
      checkPackages
      assertISOMimeType
      selectDevice
      assertDeviceIsOK
      assertDeviceIsUSB
      startTime=$(date +%s)
      if [ "$useDD" == 'true' ]; then
        method='dd'
        execWithDD
      else
        method='rsync'
        execWithRsync
      fi
      endTime=$(date +%s)
      echogood "\`$scriptName' took $((endTime - startTime)) seconds to write ISO to USB device with \`$method' method."
      operationSuccess=true
    }

    cleanup() {
      if ((EUID == 0)); then
        if [ -d "$isoMountPoint" ]; then
          if umount "$isoMountPoint"; then
            rmdir "$isoMountPoint"
            echogood "ISO succesfully unmounted."
          else
            echowarn "Could not unmount ISO mount point."
          fi
        fi
        if [ -d "$usbMountPoint" ]; then
          if umount "$usbMountPoint"; then
            rmdir "$usbMountPoint"
            echogood "USB device succesfully unmounted."
          else
            echowarn "Could not unmount USB mount point."
          fi
        fi
        if [ "$operationSuccess" == 'true' ]; then
          if [ "$ejectDevice" == 'true' ]; then
            if eject "$selectedDevice" &> /dev/null; then
              echogood "USB device succesfully ejected."
              echogood "You can safely remove it !"
            fi
          else
            echowarn "USB device ejection skipped with \`-J' option."
          fi
        fi
      fi
    }

    trap cleanup EXIT INT TERM

    main "$@"
[свернуть]
Инструкция для записи linux образов но на файловую систему fat 32 Вдруг поможет.
Открыть содержимое (спойлер)
sudo chmod +x /usr/local/bin/bootiso

  Во-первых, давайте посмотрим сколько имеется USB-накопителей:
 
  $ bootiso -l
 
  имеется только один USB-накопитель. Теперь продолжим и создадим загрузочный USB-диск из файла bionic-desktop-amd64.iso (предварительно перейдя в директорию, где этот файл находится):

 
$ bootiso bionic-desktop-amd64.iso

Если ваш ISO-файл имеет неправильный тип mime, то увидите следующее сообщение об ошибке:

Provided file `bionic-desktop-amd64.iso' doesn't seem to be an iso file (wrong mime type: `application/octet-stream').
Exiting bootiso...


Однако проверку типа mime можно пропустить с помощью опции -no-mime-check:

$ bootiso --no-mime-check bionic-desktop-amd64.iso

Как уже упоминалось,если в вашей системе присутствует только один USB-накопитель Bootiso автоматически выберет его. Поэтому нам не нужно указывать путь к диску USB. Если у вас подключено более одного устройства, то нужно явно указать USB-устройство используя флаг -d:

$ bootiso -d /dev/sdb bionic-desktop-amd64.iso

Замените «/dev/sdb» на свой путь.
Если флаг -d, при использовании нескольких USB-устройств, не будет указан - Bootiso предложит вам выбрать один из доступных USB-накопителей.
Bootiso запросит подтверждение пользователя перед очисткой и разбиением USB-устройства. Чтобы подтвердить это автоматически используйте флаг -y или -assume-yes.
КОД: ВЫДЕЛИТЬ ВСЕ
$ bootiso -y bionic-desktop-amd64.iso

В сочетании с опцией -y можно включить автоматический выбор USB-устройства (если оно одно!):

$ bootiso -y -a bionic-desktop-amd64.iso


$ bootiso --assume-yes --autoselect bionic-desktop-amd64.iso

Помните: это будет работать только в том случае, если у вас есть только один подключенный USB-накопитель.
По умолчанию Bootiso создаст раздел FAT 32, а затем смонтирует и скопирует на ваш USB-накопитель содержимое ISO с помощью программы «rsync». Если хотите - вместо «rsync» можете использовать «dd».

$ bootiso --dd -d /dev/sdb bionic-desktop-amd64.iso

Если вы хотите увеличить вероятность того, что ваш USB будет загрузочным, используйте опцию «-b» или «-bootloader»:

$ bootiso -b bionic-desktop-amd64.iso

Вышеупомянутая команда установит загрузчик с syslinux (безопасный режим). Обратите внимание, что если вы используете опцию «-dd», то это не сработает.
После создания загрузочного устройства Bootiso автоматически отмонтирует USB-накопитель. Если вы не хотите, чтобы он был автоматически отмонтирован, используйте флаг -J или -no-eject.

$ bootiso -J bionic-desktop-amd64.iso

В этом случае устройство USb останется примонтированным. Вы можете отмонтировать его в любое время с помощью команды «umount».
Чтобы вывести справку - запустите:

$ bootiso -h
[свернуть]
Русские дебианщики против цифрового слабоумия !

simonflex

У меня проблема была в том что надо было обновить BIOS. Скачал образы MS-DOS Free-DOS и не смог их примонтировать без защиты от записи чтоб в имидж добавить свою прошивку BIOS. Проблема решена !
Скачал free-dos (.img)
http://www.freedos.org/download/download/FD12FULL.zip
Далееkpartx -av FD12FULL.img
ls -l /dev/mapper
mount /dev/mapper/loop0p1 /mnt/iso
cd /mnt/iso
после чего можно добавить свои файлы или директории
umount /mnt/iso
kpartx -dv FD12FULL.img
все готово, можно писать на флеку
dd status=progress if=FD12FULL.img of=/dev/sdx
x-ваша флешка
Я всегда с пониманием оцениваю любую помощь !

R0Ver

Что бы не плодить темы, решил здесь спросить.
Есть загрузочная флешка с Win, 16Gb. Необходимо сделать образ этой флехи..... вернее Win, для последующей накатки на DVD. Не могу вкурить как:( DD делает полный образ, что ей сказать то чтоб только данные были записаны в iso?

ogost

dd глубоко пофиг, что там - iso, ext, fat, или что там ещё. он просто копирует побайтово всё, что ему дадут на вход туда, где ему укажут.
Насколько я понимаю, такой финт ушами у вас не получится, грубо говоря образ для флешки у винды отличается от образа для dvd.

symon2014

mkisofs -o vasja.iso /home/user/vasja_lol     ??? :)

R0Ver

Цитата: symon2014 от 16 апреля 2019, 08:32:41mkisofs -o vasja.iso /home/user/vasja_lol

то есть вместо /home/user/vasja_lol можно использовать устройство?