isotousb.sh
Skriv ein ISO til minnepenn slik Etcher gjer det: rå byte-kopi, tvungen flush, og ei tilbakelesing som stadfestar at bytane faktisk hamna der. Med sikringane som manglar når ein køyrer dd for hand.
Dette scriptet slettar ein heil disk. Det er heile poenget med det, og det finst ingen angreknapp. Sikringane under er laga for å gjere det vanskeleg å velje feil disk, men les gjennom fila før du køyrer henne, akkurat som med alt anna du lastar ned og gir rot-tilgang.
Problemet det løyser
dd gjer jobben heilt fint. Problemet er alt dd ikkje gjer: det åtvarar deg ikkje om at /dev/sda er systemdisken din, det seier ikkje frå om skrivinga blei ufullstendig, og det avsluttar i det kjernen har teke imot dataa, ikkje i det minnepennen er ferdig med å skrive dei. Éin bokstav feil i einingsnamnet, og du har skrive over feil disk utan eit einaste spørsmål undervegs.
Scriptet legg fire ting oppå: berre USB-diskar blir viste i lista, du må skrive inn diskstorleiken for å stadfeste, dataa blir tvinga fysisk ut på pennen, og til slutt blir dei lesne tilbake og samanlikna med kjelda.
Bruk
Må køyrast som root, sidan det skriv til ei rå blokkeining.
sudo ./isotousb.sh fil.isoVanleg køyring. Kjenner att ISO-typen sjølv.sudo ./isotousb.shUtan filnamn: spør etter stien til ISO-en.--linuxTving rå dd-kopi, utan attkjenning.--windowsTving Windows-metoden via WoeUSB.--autoAutomatisk attkjenning. Dette er standard.-hHjelpetekst. Krev ikkje root.Steg 1: scriptet undersøkjer ISO-en
Før noko som helst blir valt, blir ISO-en lesen. Her med ein Debian 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 sjølv med kommandoane det skriv ut. Hybrid-sjekken les dei to siste bytane i sektor 0 og ser etter signaturen 55aa. Finst han, er ISO-en laga for å kunne kopierast rått til ein disk og likevel boote:
$ 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 ei signert oppstartskjede inne i ISO-en: både bootx64.efi og ein grubx64.efi ved sida av. Er begge der, kan du la Secure Boot stå på i fastvara:
$ 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 ikkje leggje til Secure Boot-støtte. Den støtta ligg inne i ISO-en, i form av ein signert shim, og kan ikkje setjast på utanfrå. Det scriptet gjer er å fortelje deg om han er der, slik at du veit på førehand om du må slå av Secure Boot i fastvara for å få pennen til å boote.
Steg 2: berre USB-diskar blir viste
Her ligg den viktigaste sikringa. Lista blir bygd av lsblk, filtrert på heile diskar som anten er merkte som flyttbare eller sit på USB-bussen. Systemdisken kjem aldri opp som eit val. På maskina under finst to NVMe-diskar på nesten ein terabyte kvar, og ingen av dei er i lista:
==> 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]: _
Partisjonane under kvar disk blir viste med etikett og monteringspunkt, slik at du kjenner att pennen din på innhaldet og ikkje berre på eit einingsnamn. Til samanlikning ser lsblk alle diskane i maskina. Det er filteret som held systemdiskane utanfor:
$ lsblk -dnp -o NAME,SIZE,RM,TRAN,TYPE /dev/sda 0B 1 usb disk ← flyttbar, kjem med i lista /dev/sdb 0B 1 usb disk ← flyttbar, kjem 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: stadfestinga du ikkje kan klikke bort
Ingen [y/N]. Du må skrive inn diskstorleiken nøyaktig slik han står, noko som krev at du faktisk les kva som står der:
################ 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): _
Skriv du noko anna, blir det heile avbrote utan at ein einaste byte er skriven. I tillegg nektar scriptet å køyre dersom ISO-en ligg lagra på disken du er i ferd med å skrive over. Då ville kjelda blitt eten opp undervegs.
Steg 4: skriving, flush og stadfesting
==> 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.
Stadfestinga er den delen vanleg dd hoppar over, og ho er grunnen til at Etcher er til å stole på. Dei første 755 MB blir lesne tilbake frå pennen og samanlikna byte for byte med ISO-fila. Det er slik du oppdagar ein minnepenn som er i ferd med å døy, eller ein forfalska penn som gir seg ut for å vere større enn han er. Cachen blir tømd først, så det som blir lese kjem garantert frå pennen og ikkje frå RAM.
Kvifor dd status=progress og ikkje pv | dd? Fordi eit pipe måler kor fort dataa hamnar i skrivecachen til kjernen, altså i RAM. Då får du ei framdriftslinje som susar til 100 % og deretter blir ståande heilt stille medan pennen faktisk skriv. Du anar ikkje om han har hengt seg opp eller berre jobbar. dd med conv=fsync avsluttar først når dataa er ute på fysisk media, så talet du ser er ekte. pv blir derimot brukt under tilbakelesinga, der lesinga er sann framdrift.
Windows-ISO-ar
Ein Windows-installasjons-ISO kan ikkje berre kopierast rått. Han treng ein partisjonert penn med filene lagde ut på eit FAT- eller NTFS-volum. Scriptet kjenner att ein Windows-ISO på bootmgr og sources/install.wim i innhaldslista, og sender jobben vidare til WoeUSB-ng, som er det etablerte opne verktøyet for akkurat dette. Er install.wim over 4 GB, blir NTFS valt automatisk, sidan FAT32 ikkje kan halde ei så stor fil.
Manglar WoeUSB, skriv scriptet ut dei nøyaktige installasjonskommandoane for distribusjonen din og lèt deg velje: la det installere sjølv, gjer det manuelt i eit anna vindauge og kom tilbake, eller avbryt.
Verktøy som manglar
Ved oppstart blir det sjekka kva som finst på maskina. Manglar noko, får du kommandoen for din eigen pakkehandsamar. apt, dnf, pacman og zypper er kjende, og du får same val som over. pv og eject er valfrie: utan dei fungerer alt, du får berre inga framdriftslinje under stadfestinga.
!! 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]: _
Blir ikkje vedlikehalde, endre det sjølv
Laga til mi eiga maskin og lagt ut som det er. Ingen oppdateringar, ingen support, ingen garantiar, særleg ikkje for eit script som slettar diskar.
Skal det gjere noko anna, last det ned og gi heile fila til ein AI saman med ønsket ditt: «hopp over stadfestinga», «skriv til to pennar etter kvarandre», «lag ein ISO av ein penn i staden». Kommentarane i fila forklarar kvifor kvar sikring er der, så modellen, og du, kan sjå kva som trygt kan endrast og kva som står der av ein grunn.