Автор Тема: Как записать ISO на флешку  (Прочитано 5893 раз)

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

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Как записать ISO на флешку
« : 12 Апрель 2019, 09:20:46 »
Всем доброго дня.
Понадобилось сделать загрузочную флешку с dos.
Пробовал записать несколько образов с помощью dd if=file.iso of=/dev/sdb
Но с флешки невозможно загрузится видимо потому что файловая система после записи iso 9660 или UDF
Подскажите как правильно или чем записать образ чтобы возможно было загрузится с флешки.
Я всегда с пониманием оцениваю любую помощь !
 

symon2014

  • Гость
Re: Как записать ISO на флешку
« Ответ #1 : 12 Апрель 2019, 09:24:36 »
fdisk -l    с воткнутой флешкой . Покажи только строки о ней.
А вообщето винда не пишется с помощью dd обычно.
« Последнее редактирование: 12 Апрель 2019, 09:34:41 от symon2014 »
 

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #2 : 12 Апрель 2019, 09:36:01 »
fdisk у меня нету.
lsblk -f
sdb    iso9660 DOS71CD 2019-04-12-04-23-24-00
Я всегда с пониманием оцениваю любую помощь !
 

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #3 : 12 Апрель 2019, 09:42:31 »
А вообщето винда не пишется с помощью 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

  • Гость
Re: Как записать ISO на флешку
« Ответ #4 : 12 Апрель 2019, 10:00:46 »
Если честно , то я с вас фигею. Такое разнообразие вопросов , компов и систем , что складывается впечатление , буддто вы подрабатываете эникейщиком и заходите на форум за консультацией.
К делу. Что за ось , если нет fdisk ? File.iso это винда , нужная для перепрошивки биос?
Если без подробностей , то винда ставиться на флешку по такому принципу. Флешка форматируется в фат32 , создается раздел , которому в руки вставляют флаг boot , и на него копируют содержимое исошника. :)
 

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #5 : 12 Апрель 2019, 10:13:55 »
File.iso это винда , нужная для перепрошивки биос?
еще раз для вас персонально !!!!!!!
Мне не нужна винда. Мне нужна голая dos ! *.iso это образы dos Но заливая их на флешку, не грузится с нее
Я всегда с пониманием оцениваю любую помощь !
 

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #6 : 12 Апрель 2019, 10:16:49 »
Флешка форматируется в фат32 , создается раздел , которому в руки вставляют флаг boot , и на него копируют содержимое исошника.
щас попробую
Я всегда с пониманием оцениваю любую помощь !
 

symon2014

  • Гость
Re: Как записать ISO на флешку
« Ответ #7 : 12 Апрель 2019, 10:19:47 »
Что за голая дос ? Имя есть ? Msdos 6.2.2. что ли.
 

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #8 : 12 Апрель 2019, 10:21:33 »
Что за голая дос ?
прошу прощенья, она самая ms-dos
Я всегда с пониманием оцениваю любую помощь !
 

Оффлайн ferum

  • Ветеран
  • *****
  • Сообщений: 3674
  • Buster TDE & KDE
Re: Как записать ISO на флешку
« Ответ #9 : 13 Апрель 2019, 10:07:09 »
А попробуйте скрипт bootiso
Spoiler: ShowHide
#!/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 Вдруг поможет.
Spoiler: ShowHide
 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

Оффлайн simonflex

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 210
  • Bullseye x64 SID GNU XFCE
Re: Как записать ISO на флешку
« Ответ #10 : 13 Апрель 2019, 11:10:21 »
У меня проблема была в том что надо было обновить 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

  • Активный пользователь
  • **
  • Сообщений: 73
Re: Как записать ISO на флешку
« Ответ #11 : 16 Апрель 2019, 07:49:06 »
Что бы не плодить темы, решил здесь спросить.
Есть загрузочная флешка с Win, 16Gb. Необходимо сделать образ этой флехи..... вернее Win, для последующей накатки на DVD. Не могу вкурить как:( DD делает полный образ, что ей сказать то чтоб только данные были записаны в iso?
 

Оффлайн ogost

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 3161
  • Linux Registered User #547151
Re: Как записать ISO на флешку
« Ответ #12 : 16 Апрель 2019, 08:01:54 »
dd глубоко пофиг, что там - iso, ext, fat, или что там ещё. он просто копирует побайтово всё, что ему дадут на вход туда, где ему укажут.
Насколько я понимаю, такой финт ушами у вас не получится, грубо говоря образ для флешки у винды отличается от образа для dvd.

symon2014

  • Гость
Re: Как записать ISO на флешку
« Ответ #13 : 16 Апрель 2019, 08:32:41 »
mkisofs -o vasja.iso /home/user/vasja_lol     ??? :)
 

Оффлайн R0Ver

  • Активный пользователь
  • **
  • Сообщений: 73
Re: Как записать ISO на флешку
« Ответ #14 : 16 Апрель 2019, 08:57:01 »
mkisofs -o vasja.iso /home/user/vasja_lol

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

Теги: stretch linux iso 
 

Запись iso образа с помощью dd на флешку.

Автор Squeezer

Ответов: 6
Просмотров: 9459
Последний ответ 14 Февраль 2011, 23:25:23
от Squeezer
Как записать Live USB Debian 8 (Jessie)?

Автор temakonkin

Ответов: 3
Просмотров: 2195
Последний ответ 30 Апрель 2015, 13:59:06
от werewolfe
Не видит флешку

Автор Ethanol

Ответов: 7
Просмотров: 3922
Последний ответ 23 Январь 2017, 03:54:04
от ihammers
Права доступа юзера на смонтированную флешку.

Автор Modigar

Ответов: 34
Просмотров: 3655
Последний ответ 22 Июль 2019, 19:25:52
от Ogis1975
Как записать загрузочную флеху из под дебиан(Win7)

Автор readytowok

Ответов: 9
Просмотров: 2357
Последний ответ 20 Апрель 2014, 21:04:42
от Vacka