← Alle AI Script Oppstartsmedier · bash

isotousb.sh

Skriver en ISO til minnepenn slik Etcher gjør det: rå byte-kopi, tvungen flush, og en tilbakelesing som beviser at bytene faktisk havnet der. Med sikringene som mangler når man kjører dd for hånd.

Fri bruk Linux + bash dd / WoeUSB Verifiserer skrivingen

Dette scriptet sletter en hel disk. Det er hele poenget med det, og det finnes ingen angreknapp. Sikringene under er laget for å gjøre det vanskelig å velge feil disk, men les gjennom fila før du kjører den, akkurat som med alt annet du laster ned og gir rot-tilgang.

Problemet det løser

dd gjør jobben helt fint. Problemet er alt dd ikke gjør: den advarer deg ikke om at /dev/sda er systemdisken din, den sier ikke fra om skrivingen ble ufullstendig, og den avslutter i det kjernen har tatt imot dataene - ikke i det minnepennen er ferdig med å skrive dem. Én bokstav feil i enhetsnavnet, og du har overskrevet feil disk uten et eneste spørsmål underveis.

Scriptet legger fire ting oppå: bare USB-disker vises i lista, du må skrive inn diskstørrelsen for å bekrefte, dataene tvinges fysisk ut på pinnen, og til slutt leses de tilbake og sammenlignes med kilden.

Bruk

Må kjøres som root, siden den skriver til en rå blokkenhet.

sudo ./isotousb.sh fil.isoVanlig kjøring. Kjenner igjen ISO-typen selv.
sudo ./isotousb.shUten filnavn: spør etter stien til ISO-en.
--linuxTving rå dd-kopi, uten gjenkjenning.
--windowsTving Windows-metoden via WoeUSB.
--autoAutomatisk gjenkjenning. Dette er standard.
-hHjelpetekst. Krever ikke root.

Steg 1 - scriptet undersøker ISO-en

Før noe som helst velges, leses ISO-en. Her med en Debian netinst-ISO:

sudo ./isotousb.sh debian-13.6.0-amd64-netinst.iso
$ sudo ./isotousb.sh debian-13.6.0-amd64-netinst.iso

==> Image: debian-13.6.0-amd64-netinst.iso  (755MB)
OK  Secure Boot: ISO ships a signed shim - should boot with Secure Boot ON.
OK  ISO type: Linux / hybrid - correct method is a raw byte-for-byte write (dd).
   Verify manually if you like:
     list files : 7z l -- "debian-13.6.0-amd64-netinst.iso"
     hybrid MBR : dd if="debian-13.6.0-amd64-netinst.iso" bs=512 count=1 2>/dev/null | tail -c2 | xxd
     (55aa in the last 2 bytes = hybrid/dd-writable)
   (If this is wrong, re-run with --linux or --windows to force it.)

To ting er slått fast her, og begge kan du etterprøve selv med kommandoene den skriver ut. Hybrid-sjekken leser de to siste bytene i sektor 0 og ser etter signaturen 55aa. Finnes den, er ISO-en laget for å kunne kopieres rått til en disk og likevel boote:

etterprøving
$ dd if=debian-13.6.0-amd64-netinst.iso bs=512 count=1 2>/dev/null | tail -c2 | xxd
00000000: 55aa                                     U.

Secure Boot-sjekken ser etter en signert oppstartskjede inne i ISO-en: både bootx64.efi og en grubx64.efi ved siden av. Er begge der, kan du la Secure Boot stå på i firmware:

etterprøving
$ 7z l -- debian-13.6.0-amd64-netinst.iso | grep -iE 'EFI/boot/(boot|grub)x64'
2026-07-11 16:45:08 .....      1036152      1036152  EFI/boot/bootx64.efi
2026-07-11 16:45:08 .....      2684352      2684352  EFI/boot/grubx64.efi

Scriptet kan ikke legge til Secure Boot-støtte. Den støtten ligger inne i ISO-en, i form av en signert shim, og kan ikke settes på utenfra. Det scriptet gjør er å fortelle deg om den er der, slik at du vet på forhånd om du må slå av Secure Boot i firmware for å få pinnen til å boote.

Steg 2 - bare USB-disker vises

Her ligger den viktigste sikringen. Lista bygges av lsblk, filtrert på hele disker som enten er merket som flyttbare eller sitter på USB-bussen. Systemdisken kommer aldri opp som et valg - på maskinen under finnes to NVMe-disker på nesten en terabyte hver, og ingen av dem er i lista:

diskvalg
==> Scanning for removable / USB disks...

Available target disks:
  [0]  /dev/sdb        28.9G  Kingston DataTraveler (usb)
      /dev/sdb1  28.9G  vfat   KINGSTON  /media/youruser/KINGSTON

Select target disk number [0-0]: _

Partisjonene under hver disk vises med etikett og monteringspunkt, slik at du kjenner igjen pinnen din på innholdet og ikke bare på et enhetsnavn. Til sammenligning ser lsblk alle diskene i maskinen - det er filteret som holder systemdiskene utenfor:

hva filteret gjør
$ lsblk -dnp -o NAME,SIZE,RM,TRAN,TYPE
/dev/sda         0B  1 usb    disk   ← flyttbar, kommer med i lista
/dev/sdb         0B  1 usb    disk   ← flyttbar, kommer med i lista
/dev/nvme0n1 953.9G  0 nvme   disk   ← systemdisk, filtrert bort
/dev/nvme1n1 953.9G  0 nvme   disk   ← systemdisk, filtrert bort

Steg 3 - bekreftelsen du ikke kan klikke bort

Ingen [y/N]. Du må skrive inn diskstørrelsen nøyaktig slik den står, noe som krever at du faktisk leser hva som står der:

bekreftelse
################  DESTRUCTIVE  ################
About to ERASE and overwrite:
   Disk : /dev/sdb  28.9G  (Kingston DataTraveler)
   With : debian-13.6.0-amd64-netinst.iso
Everything on /dev/sdb will be permanently lost.

To confirm, type the disk size exactly as shown (28.9G): _

Skriver du noe annet, avbrytes det hele uten at en eneste byte er skrevet. I tillegg nekter scriptet å kjøre hvis ISO-en ligger lagret disken du er i ferd med å overskrive - da ville kilden blitt spist opp underveis.

Steg 4 - skriving, flush og verifisering

skriving
==> Unmounting any partitions on /dev/sdb...
==> Writing image (raw, byte-for-byte) to /dev/sdb...
   Tip: dd holds output until the first block completes, then updates every second.
791674880 bytes (792 MB, 755 MiB) copied, 41 s, 19.3 MB/s
==> Flushing remaining buffers to the device (do NOT unplug)... done.
OK  Write complete.
==> Verifying: reading back 755MB from /dev/sdb and comparing...
   reading the stick back (this is the slow part - pv shows real progress):
 755MiB 0:00:38 [19.7MiB/s] [=========================>] 100%
OK  Verification PASSED - device matches the image byte-for-byte.
OK  Ejected /dev/sdb - safe to remove.

This ISO supports Secure Boot - you can leave Secure Boot ON in firmware.

Verifiseringen er den delen vanlig dd hopper over, og den er grunnen til at Etcher er til å stole på. De første 755 MB leses tilbake fra pinnen og sammenlignes byte for byte med ISO-fila. Det er sånn du oppdager en minnepenn som er i ferd med å dø, eller en forfalsket pinne som utgir seg for å være større enn den er. Cachen tømmes først, så det som leses kommer garantert fra pinnen og ikke fra RAM.

Hvorfor dd status=progress og ikke pv | dd? Fordi et pipe måler hvor fort dataene havner i kjernens skrivecache, altså i RAM. Da får du en framdriftslinje som suser til 100 % og deretter blir stående helt stille mens pinnen faktisk skriver - du aner ikke om den har hengt seg opp eller bare jobber. dd med conv=fsync avslutter først når dataene er ute på fysisk media, så tallet du ser er ekte. pv brukes derimot under tilbakelesingen, der lesingen er sann framdrift.

Windows-ISO-er

En Windows-installasjons-ISO kan ikke bare kopieres rått - den trenger en partisjonert pinne med filene lagt ut på et FAT- eller NTFS-volum. Scriptet kjenner igjen en Windows-ISO på bootmgr og sources/install.wim i innholdslista, og sender jobben videre til WoeUSB-ng, som er det etablerte åpne verktøyet for akkurat dette. Er install.wim over 4 GB, velges NTFS automatisk, siden FAT32 ikke kan holde en så stor fil.

Mangler WoeUSB, skriver scriptet ut de nøyaktige installasjonskommandoene for distribusjonen din og lar deg velge: la det installere selv, gjør det manuelt i et annet vindu og kom tilbake, eller avbryt.

Verktøy som mangler

Ved oppstart sjekkes det hva som finnes på maskinen. Mangler noe, får du kommandoen for din egen pakkebehandler - apt, dnf, pacman og zypper er kjent - og samme valg som over. pv og eject er valgfrie: uten dem fungerer alt, du får bare ingen framdriftslinje under verifiseringen.

manglende verktøy
!!  Missing optional tools: pv

   To install, run these commands:

     sudo apt-get update
     sudo apt-get install -y pv

   Options:
     [A] Auto-install now (this script runs it for you)
     [M] I will run it myself - then come back
     [S] Skip (continue without them)
   Choose [A/M/S]: _

Vedlikeholdes ikke - endre den selv

Laget for min egen maskin og lagt ut som det er. Ingen oppdateringer, ingen support, ingen garantier - særlig ikke for et script som sletter disker.

Skal den gjøre noe annet, last den ned og gi hele fila til en AI sammen med ønsket ditt: «hopp over verifiseringen», «skriv til to pinner etter hverandre», «lag en ISO av en pinne i stedet». Kommentarene i fila forklarer hvorfor hver sikring er der, så modellen - og du - kan se hva som trygt kan endres og hva som står der av en grunn.