C Programming & Pointers

As a PHP developer  I find the pointers in C are weird and I always mess up trying to use them, hopefully I’ll have a better understanding now. I found this pretty great video tutorial with Richard Buckland, whom gives a great description about pointers. Start from 4:30 as the prior is just gossip.

There are a great number of lectures for this course. I can recommend watching them if you’re interested in getting to learn how to program.

 

2. Sikring af data til eftertiden – C64 disketter

Sikring af disketter til et moderne medie.

Jeg kommer ind på 4 metoder til at lave en kopi af sine C64 disketter.

De har hver deres svagheder og styrker som jeg kort vil benævne, i hvert afsnit.

Fælles for dem alle er dog at data bliver bevaret til eftertiden.

1) Diskettedrev tilkoblet en PC med parallel port.

Til dette scenarie skal du bruge en DOS PC med en parallel port – en USB til Parallel (printer) interface kan ikke bruges -, et diskettedrev som fx et C=1541 drev, og et X(A/E)1541 kabel. Softwaren der skal bruges kan være Star Commander, som er en Norton Commander klon med adgang til diskettedrevet.

PC’en skal bootes fra DOS. Det nemmeste er at hente et 512MB USB image som jeg har lavet, herfra eller via det direkte link til filen. Imaget kan lægges ned på en USB stick og er bootable. Så det er bare at vælge at boote fra USB sticken. Du kan også vælge selv at installere DOS på maskinen.

Diskettedrevet tilkobles PC vha X(A/E)1541 kablet, bootes op i DOS. Start Star Commander. ALT-F1 / ALT-F2 vælger drev i hhv venstr/højre side af skærmen. Drev bogstaver hentyder til PC’ens drev bogstaver, og tal hentyder til diskettedrevets ID, det er typisk 8.

I bunden af skærmen vises en bjælke med nogle tal, disse henviser til funktionstasterne på tastaturet F1-F10, holder du CTRL, ALT eller SHIFT tasterne nede skiftes funktionerne i bjælken, og du kan derved trykke den henvisende funktions tast. De taster der skal benyttes i dette tilfælde er F5 eller ALT-F5. Andre taster der er nyttige er Insert samt Tabulator, Insert markerer valgte fil, Tabulator gør det modsatte vindue aktivt. Trykker du F5 vil der kopieres fra det aktive vindue til det inaktive, hvis en fil er valgt. ALT-F5 kopierer en fuld diskette.

Jeg vælger for det meste at have kilden der kopieres fra i venstre side og destinationen i højre side, men for mig er det kun en vane sag, og har ikke nogen betydning.

Vælger du diskettedrevet i et af vinduerne lister den directory fra disketten med det samme. På samme måde lister den også PC’ens drev hvis dette bliver valgt.

Man kan nu vælge at gemme program filerne som enkelt stående filer, eller man kan dumpe hele disketten. Hele disketten tager ca 2 minutter at lægge ned på et andet medie som fx harddisken.

Ulemper

  • Langsom overførsel
  • Du kan ikke regne med at de overførte filer er i orden, den viser fx ikke om der er fejl på disketten.
  • Skal bruge Parallel port (gammel teknologi som kan være svært at få fat  i dag)
  • Skal bruge DOS (det kan diskuteres om det er en ulempe)

Fordele

  • En billig løsning
  • Kan nemt produceres selv.

Links til Køb/Byg selv X(A/E)1541 kabler findes i bunden af posten.

2. Overførsel ved brug af ZoomFloppy eller et XA1541 kabel

Her skal bruges et diskettedrev, en PC med USB port (ZoomFloppy) eller parallelport (XA1541 kabel), samt OpenCBM

Jeg har tidligere skrevet et review omkring ZoomFloppy. Kort fortalt er det en enhed der gør at man kan overføre disketter uden brug af en parallelport. Den er testet så sent som Windows 7 64 bit. ZoomFloppy forbindes til PC via USB kabel og til diskette drevet.

  • XA1541 kablet forbindes på samme måde som i punkt 1.
  • Ved ZoomFloppy kobles det slukkede diskettedrev til ZoomFloppyen, PC’en skal være tændt, ZoomFloppy forbindes til PC’ens USB port, og der kan tændes for diskettedrevet, det er vigtigt det er denne rækkefælge da man ellers kan ødelægge udstyret. Læs manualen for flere detaljer.

OpenCBM kan køre under Mac, Linux og Windows denne skal bruges til XA1541 kablet. Til ZoomFloppy er der lavet en fin OpenCBM pakke til Windows som er nem at installere, den kan hentes her.

Når OpenCBM er installeret ligger der nogle eksekverbare filer i pakken. en af dem er d64copy.exe filen. For nemheds skyld kan de eksekverbare filer kopieres ned til fx c:\cbm så du ikke skal hoppe rundt i for mange underbiblioteker for at køre kommandoen.

d64copy.exe -8 diskettenavn.d64

Gemmer fra disketten ned til filnavnet “diskettenavn.d64” som du selvfølgeligt ændrer til hvad du ønsker. -8 vælger device 8, og kan selvfølgeligt være de andre device ID’er som diskettedrevet kan have.

Der findes også en GUI til Windows den kan hentes her

Ulemper

  • Det er svært at sige om der er fejl på disketterne
  • ZoomFloppy skal anskaffes (kan dog fås fra nyt)
  • Kan ikke kopiere Original disketter der har copy protection

Fordele

  • USB (ZoomFloppy)
  • Nem at få fat på
  • Eller bygge selv (XA1541 kabel)

3) WarpCopy

Til WarpCopy skal der bruges en del mere ting end før nævnt. en Windows PC med netværk, en C64 med diskettedrev og et netkort til C64. Netkortet skal være RR-Net kompatibel. C64NIC+ er kompatibel med WarpCopy og kan fås som nyt i dag, RR-Net er ikke længere tilgængelig som nyt.

WarpCopy WarpCopy64 består af 2 programmer, et Windows og et C64. C64 prgrammet nævnes som server, og Windows programmet nævnes som klient.

C64 sættes op i netværk med PC’en, WarpCopy Server programmet startes op på C64, linket peger på en netværks pakke lavet til 64NIC+, som bla indeholder WarpCopy serveren. Når WarpCopy serveren startes op, kan man ændre IP addresse. Som standard er IP addressen 192.168.0.64.

WarpCopy klienten er den der styrer C64 + diskettedrevet, så det er her man vælger at overføre. Klienten har en grafisk brugerflade med en blokliste over tracks, lidt på samme måde som X-Copy til Amiga. Den viser med forskellige farver statusen på overførslen. Grøn = godt, gul og rød hhv delvis eller helt fejl.

Klienten kan nemt sættes igang med næste diskette. Hvis man ikke vil vælge et nyt filnavn, kan du klikke “next disk” og den overfører en ny diskette, med et løbenummer i enden af sidste gemte filnavn.

Ulemper

  • Netkortet koster noget mere end X(A/E)1541 kablet eller ZoomFloppy
  • Den tager kun 35 tracks

Fordele

  • Hurtig overførsel (ca 22 sekunder for 1 diskette side ved nul fejl)
  • Den prøver at læse tracks med fejl en del gange
  • Den viser om der er fejl på disketten

 

4) Nibbling

Nibblingen kan ikke helt sammenlignes med de foregående punkter, men er et vigtigt emne i sikringen af data.

Til nibling kræver det et C=1571 drev (skal ikke modificeres). Eller et 1541 drev der er modificeret. Samt en ZoomFloppy og PC.

 

 

Det hele foregår på samme måde som med ZoomFloppy setupet i punkt 2.

I stedet for d64copy (som dog også kan bruges) benyttes

nibread.exe diskette

Nyeste Nibtools pakke kan hentes på C64preservation.com.

Nibtools / Nibread er bedst til original spil der har kopibeskyttelse, men den virker også til andre beskyttede programmer. Nibread kan ikke se om der er fejl på en diskette, da en fejl sagtens kan være en kopibeskyttelse. Det er en god ide lige at teste disketten ved at starte spillet op og spille lidt.

Når filen bliver gemt, bliver det gjort som .nbz format. Det kan gøres spillebart ved at køre nibconv.

nibconv diskette.nbz diskette.g64

Det foretrukne format er G64 da det indeholder kopibeskyttelsen.

nibconv diskette.nbz diskette.d64

Du kan også konvertere til D64, men du skal ikke regne med at det virker.

På stående fod har jeg nibblet en god håndful MicroProse spil, hvoraf Pirates og Gunship ikke virker. Dette skyldes mest at Nibconv programmet ikke patcher disse spil ordenligt. Eller at formatet ikke er implementeret i Vice (som er den eneste emulator jeg har testet med). Jeg har tidligere haft knas med Silent Service og F-19 Stealth Fighter, men disse kom begge til at køre under en nyere version af Vice.  Vice 2.4 er lige udkommet, og seneste version af nibtools i skrivende stund er r572.

Jeg kan anbefale at du sender en kopi af dit nibblede program til c64preservation.com

Ulemper

  • Diskettedrev skal modificeres til at køre som parallel (gælder ikke C=1571 drevet)
  • ZoomFloppy skal indkøbes

Fordele

  • Original disketter med kopibeskyttelse kan gemmes til eftertiden
  • Det kører forholdsvist stærkt pga parallel overførslen

 

Konklusion.

WarpCopy er rigtigt godt til at sikre data på uoriginale disketter.

Nibble er rigtigt godt til at sikre data på originale medier.

Jeg bruger samme drev til både nibbling samt WarpCopy

NOTE: har du ikke selv muligheden for at sikre dine disketter, er du velkommen til at kontakte mig hvis du vil have gjort dette.

 

Køb / Lav selv X(A/E/M)1541 kabler

C64NIC+ / ZoomFloppy kan købes her

1. Hvordan man sikrer sine Commodore disketter/bånd til eftertiden – Introduktion.

Der findes efterhånden en god del værktøjer og metoder til at sikre sit retro software. Jeg kommer ind på at dække flere af dem, men ikke alle.

Artiklerne i denne serie dækker primært Commodore 64, men kan også bruges til andre Commodore maskiner.

Men hvorfor skal softwaren sikres hvis den allerede er ude på det store internet? I de fleste tilfælde er dette også korrekt. Men det er for mange nu dejligt at have en kopi af sine disketter – som man selv har konstrueret dem – på et moderne medie. Som vi alle sikkert ved, så blev der cracket stort set alle spil og programmer til Commodore maskinerne. Men til disse cracks var der typisk også en crack intro, og da mange scene grupper crackede disse spil og programmer, findes der så også mange forskellige versioner, og mange forskellige crack introer. Men der blev også lavet mange demoer, disk magaziner, hackede versioner af software osv osv. Alt dette er der en eller flere personer der har været med til at lave. Hvilket burde sikres for så lang tid som muligt.

Så det kan godt være at spil x findes på internettet som er cracked af gruppe y, men du har måske spil x cracked af gruppe b, eller cracked af gruppe y med en trainer, og derved også en anden intro. Det kan tænkes at du ikke gider gøre så meget i det, men der er også nogle som ikke er interesserede i dinosauer knogler eller gamle malerier, hvilket vil være synd at få ødelagt.

Hvis du har interessen for selv at gøre en indsats, så er der vejledninger til det her på bloggen. Hvis du har en samling af bånd eller disketter, og du gerne vil støtte os, men ikke har tid/mulighed for selv at gøre det, vil vi meget gerne gøre det for dig. Vi tager imod donerede medier med kyshånd – også selvom de har ligget i en fugtig kælder – hvis du gerne vil have en kopi af de sikrede disketter får du selvfølgeligt det. Hvis du ikke vil af med dine disketter, men vil låne os dem, er det lige så godt.

Det skal lige nævnes at sikringen af softwaren ikke kun er for cracks, og scene software som demoer og disk magaziner, men også for original spil, som også indebærer scanninger af æsker, manualer osv.

NOTE: Er du ved at smide dine medier ud fordi de har stået i en kælder og fået vand, eller har fået fugt på loftet, Så kontakt mig venligst inden. Data kan måske alligevel reddes. Bare smid mig en kommentar herinde. Email adressen vil ikke blive vist

NB: Artiklerne er stadig ved at blive skrevet, så kom venligst tilbage senere for flere af disse.

64NIC+ & WarpCopy

Mit 64NIC+ dumpede ind i postkassen i dag.

Et 64NIC+ er et netkort til Commodore 64.

Commodore 64 på internettet, nogle vil nok nikke genkendende efter at have stiftet bekendtskab med fx rr-net. Men hvad skal man dog med en C64 på netværket? det kommer vi til. Først lidt billeder af vidunderet.

the 64NIC+ on the front.

Der er en del settings at gøre godt med. Jeg købte denne med roterende omskifter som ses øverst til venstre. Der er nogle omskiftere der hhv skifter mellem rr-net addresse område eller standard. Aktiver/deaktiver eprom. C64 eller C128 game mode. og IO1 / IO2 områderne. Sidstnævnte kan ændres hvis man har 2 cartridges samtidigt, det er dog ikke alle den kan spille sammen med.

En reset knap oppe i højre hjørne, ETH link LED, netstikket, og ETH activity LED. Og så en ROM sokkel. Man kan programmere 8-256kB EPROM moduler, med 8/16kB images.

Jeg har prøvet at smide Action Replay 3 samt Final Cartridge 2 rommer på en 27c256 EPROM. men pt har det ikke virket. Det er forresten her 16trins omskifteren træder ind, da man så kan vælge hvilken ROM der skal indlæses.

Noget af det sjove er at man kan lade sin C64 være webserver:

C64 as webserver

Standard webserver med Contiki. Og JA disk directory virker rent faktiskC64 Webserver - Diskette directory listing

Da 64NIC+ er RR-Net kompatibel, kan den også det som jeg købte den for. Nemlig WarpCopy. Det store spørgsmål har været, virker WarpCopy sammen med C64Nic+ ? og det kan jeg kun konstatere at den gør. Eftersom jeg endnu ikke har fået et ROM image til at virke, hvorpå det fornødne software automatisk skal bootes fra, måtte jeg køre WarpCopy fra disketten. Med WarpCopy programmet kan man skifte IP på netkortet, og det virker bare.

Nu har jeg nævnt WarpCopy som jeg så vil fortælle lidt om. WarpCopy er et program til at overføre C64 disketter til PC. Det geniale ved dette program er at det kan gøre det på kun 22 sekunder(*), hvor andre gør det på 1-2 minutter. Programmet viser også i bedste X-Copy (fra Amiga) stil hvilket track den indlæser, og resultatet.

(*) ved fejlfri disketter.

WarpCopyNok på tide at vise et billede.

Støder warpcopy på fejl, prøver den at indlæse disse tracks igen. Et enkelt klik med museknappen på “Next Image” dumper næste diskette uden man skal vælge “gem som” den benytter tidligere gemte image navn og adderer med 1 i filnavnet.

Har man 100 disketter kan man godt gøre det på den gammeldags maner med Star Commander eller ZoomFloppy som nævnt tidligere, dog med chancer for at der er fejl som man ikke ser i overførslen.

Ulempen med WarpCopy er at der kun er 35 tracks og udvikleren har mistet source koden (han er dog igang med at lave en ny version), så der kommer ikke lige nogle opdateringer disse dage.

WarpCopy kan dog ikke benyttes til kopi beskyttede disketter, så det anbefales kun at bruge den til sin samling af fx demoer og crack intro’er med dertilhørende software, disk magaziner osv.

Jeg glemte at nævne at al de fornødne software til at få en netværks virkende C64, kan hentes hos Jim her. Dette indebærer også WarpCopy programmet. Alt sammen på et D64 image.

Jim Brains 64NIC+ er Open Source

Kan købes her

Graham’s WarpCopy64

ZoomFloppy – Commodore diskettedrev til PC

Så fik jeg endeligt behov for at anskaffe mig en ZoomFloppy.

ZoomFloppy’en er et fantastisk produkt.Det er såmend denne dejlige sag.

Øverst til venstre sidder en aktivitets diode, som selvfølgligt lyser blåt i disse dage, nok en af de få ting jeg ikke bryder mig om ved ZoomFloppy’en, det og så at dioden er meget kraftig i sin lysstyrke.

Under det, sidder IEC stikket som fx 1541/1571/1581 diskettedrevene kobles til.

Der sidder et mini USB stik her som bruges til at koble enheden til Computeren.

Nederst til venstre sidder 15 pin D-SUB han stikket, som er et parallel stik, det er dette stik jeg benytter mig af til min 1541-II modifikation. Dem er der forresten nok af på enheden. Stikket til højre for 15bens D-SUB, samt kant stikket i bunden er alle parallel stik, som skulle dække de fleste -hvis ikke alle – forskellige typer, parallel forbindelser til Commodore diskettedrevene. Har man fx Dolphin eller Speed Dos vil kablet der kunne bruges til dette print-kants stik.

Det lange stik i midten er et udviddelses stik. Gad vide om der kommer noget hertil?

De restrende to stik, x6 – header – og stikket nederst til højre er til IEEE-488 stikkene fra PET diskettedrevene. IEEE-488 stikket er tilkøbt.

Da jeg modtog ZoomFloppy’en kom der ikke ret meget hjælp med. Der findes dog en officiel hjemmeside med en PDF fil, samt link til OpenCBM driverne.

Man modtager ZoomFloppy’en samlet og klar til at køre.

Man skal huske at afinstallere de gamle OpenCBM drivere fra maskinen hvis man har disse installeret.

Med i pakken til OpenCBM driverne kommer kommando prompt versionerne af nibtools d64/d81 read og andet godt.

Man skal lige læse op på parametrene. Men ud over det kører det helt perfekt. Nibbling virker, jeg har nibblet bla F-19 Stealth Fighter, Silent Service og F-15 Strike Eagle, som ikke er de nemmeste spil at overføre.

Jeg kan sige, ZoomFloppy virker som en forbindelse mellem diskettedrev og PC’ens USB port. Den virker under Windows, og har hermed bevist at der ikke længere er behov for en parallel port eller DOS for at dumpe disketter.

Det gør det nemmere at have en moderne bærbar end en gammel klods af en bærbar eller stationær, samt sin C64 hobby.

ZoomFloppy kan købes her hos Jim Brain

C64 1541-II drive modifikation

Efter kort tid efter min bestilling fik jeg min ZoomFloppy.

Jeg havde ikke regnet med at det gik så stærk, specielt når jeg normalt handler på ebay med free shipping, som tager typisk 1 måneds tid før varen modtages.

Læs om ZoomFloppy her.

Mit behov er at kunne nibble disketter, specielt da jeg har en stak MicroProse spil med RapidLok beskyttelse. Læs om RapidLok på c64 preservation websitet.

Nibbling kræver – i ent 1541 drev – en 1541-II rom (251968-03 / gul pil), hvilket mit drev heldigvis har. Ellers kan en 27c128 eprom med en 1541-II rom erstatte den det.

Jeg bruger et 1541-II drev gennem hele artiklen. For en anden model findes der et link i bunden af artiklen der kan bruges. Denne artikel er baseret på det link.

Det er denne (rød pil) VIA chip der skal kigges på.

Der kan gøres to ting. Lodde kredsen ud og montere en sokkel, eller lodde ledninger direkte på kredsen. Jeg har valgt at lodde kredsen ud og montere en sokkel istedet. Dette kan ikke anbefales hvis man ikke har det rigtige udstyr. Ved lodning af ledninger direkte på kredsen, skal pin 2 af VIA kredsen afbrydes fx med en skalpel, se linket i bunden for mere info.

Ledningerne skal forbindes således.

Via ben 15ben D-SUB
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
18 9
39 10

Jeg har valgt at benytte mig af et 15 bens D-SUB hun stik, de fleste vælger dog et hanstik her. Der er en del fordele ved at have et hunstik på drevet. Som tommelfinger regel siger man at output stik er hunstik, bare kig på en 230v stikkontakt hvilket ikke er særligt smart hvis det var et hanstik. Bzzz. Ud over det, så er der ikke nogle ben der vil blive bukket under transport/opbevaring af drevet. Det er noget nemmere at skifte et stik på et kabel, end det er på drevet når først det er monteret.

15 pin D-SUB hun stikket set fra forbindelses siden. De røde tal er kun for at tallene ikke skal smelte sammen hvis de alle var gule. Der er ellers ingen forskel.

Stikket set fra lodde siden.

Jeg benytter mig af to 40 pin DIL sokler den ene som er loddet fast til drevets bundkort, og et andet som ledningerne loddes til. Der findes nogle meget billige sokkler derude. En af dem vises øverst på billedet herunder. Jeg kan ikke anbefale at disse bliver brugt, da de har for korte ben og laver dårlig forbindelse når de stables oven på hindanden. Der findes nogle – noget dyere – sokler med “tulipan-ben” navnet siger sig selv når man ser udformningen af benene. Tulipan benene vises neders på billedet herunder. Har man éen af hver af disse sokler kan jeg anbefale at det er den billige der bliver loddet fast til bundkortet.

Man kan bruge hvilke ledninger man har lyst til. Jeg har valgt at bruge et IDE fladkabel – 80 ledere / UDMA – de er noget tyndere end et 40 leders IDE kabel.

Det interne kabel vist her. Bemærk jeg brugte den billige sokkel her, men blev nødttil at montere 2×20 pins tulipan stik – som vist nederst på billedet ovenover – for at få forbindelse. En ordre på sokler med tulipan ben er på vej, men med free shipping, så der går en lille måneds tid, og hvem kan vente på det ?

 

Den første test gik galt, det var før jeg monterede stikkene med tulipan benene, men efter denne rettelse fik jeg lavet mit test setup – den mekaniske del af drevet mangler stadig her.

Efter at konstatere at opstillingen virker, er det nu tid til at montere det hele i en permanent løsning.

Det interne stik skal fastsættes. Så en billlig kopi af en dremmel + en skæreskive – jeg har selvfølgeligt målt op hvor der skal skæres – benyttes.

Stikket sættes til, med så meget stik på ydersiden, ellers kan man risikere at man ikke kan sætte stikket på forlænger kablet ordenligt til. Man kan vælge at skrue stikket fast. Jeg har valgt at bruge hot-glue.

 

En ordenlig blob af hot-glue også ind over ledningerne som hjælper til med at man ikke får revet ledningerne over nede ved lodningerne. Det er her ledningerne, uden afstivelse, typisk knækker.

Montering af alle delene i kabinettet, drevet er nu funktions dygtig til at lave parallel overførsler med, samt nibble, men garantien dækker ikke længere 😛

Bla Dolphin DOS og Speed DOS virker også med denne modifikation. Til PC parallel ports overførsel findes der også bla XP1541 kablet.

Eftersom jeg har købt en ZoomFloppy er dette nok til mig. Dog overvejer jeg at anskaffe en Dolphin eller Speed DOS til C64’eren.

Dolphin/Speed DOS gør at overførsler mellem diskettedrev og C64 sker over parallel porten som er meget hurtigere end seriel overførslen der normalt sker. Disse to er begge nogle rom opgraderinger i C64’eren. Har man et parallel kabel til dette setup, kan man koble print-kant stikket – som er det man sætter til C64’erens user port – til ZoomFloppy’ens kant stik.

Parallel stikket til ZoomFloppy er et 15 bens D-SUB han til 15 ben D-SUB hun. Der skal kun bruges 8 ledninger her, så et netværkskabel er helt perfekt til det. stik forbindelser er lige over

 

15 ben hun 15 ben han
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8

Ben 9 og 10 benyttes ikke til ZoomFloppy, disse er handshaking signaler, som bruges til parallel forbindelsen til C64. Til ZoomFloppy skal seriel kablet bruges til denne kommunikation istedet.

Tid til at teste om alt virker efter samlingen.

En standard C64 formateret diskette med nogle få programmer på.

Kommunikationen virker, og der kan nibbles original disketter.

Artiklen er baseret på instruktioner fra  Peter Schepers website.

While we’re waiting. Recovering a disk.

As some of you might know, my old server harddrive ran into a series of problems. And no I don’t have a backup.

It all started with that sometimes the server, which is a small ITX board with Atom processor running VMWare ESXi, just stopped responding. So a hard reboot was required. I found out that accessing a few places on the guest servers OS, made this happen (hence why my backups failed).

I disregarded it until it died completely, I couldn’t boot the guest OS.

I should mention that the harddrive is a Seagate 1TB SATA2 drive.

I found out that the harddrive has bad blocks. And when these bad blocks were accessed, the harddrive would just stop responding, a power cycle (unplug hdd power and reinsert) would bring it back again. I tried doing a unix dd, which is a cloning of the harddrive, Windows users might relate to Ghost or ImageCast. The dd command didn’t work of course as the drive would stop responding when accessing the bad blocks.

I mentioned this to some of my associates at my weekly retro evening, which PHK and UJ both said.. hey, you should try recoverdisk from FreeBSD. So I did.

recoverdisk is similar to dd-rescue, basically a resumeable dd command.

3 weeks after starting, and unplugging/replugging power to the drive, restarting the command stopping the script, repeat. I was close to an end.. I got to 100% woohoo !! or not I found out at one time I’ve rebooted the computer and forgot to mount the target disk. There were two things to do, start over or try and grab the data that was separated, it was stored on the local disk anyway. The later seemed like a tedious task, so I went with a do-over. At the time of writing I’m around 87% done. Luckily for me it’s much faster this time as I’m using the drives on a SATA controller, where before it was on a USB to SATA adapter.

 

Back to the superb tool, which is part of the FreeBSD operating system: recoverdisk.

Recoverdisk is a command line utility and is quite simple to use actually.

What recoverdisk do, is that given the right parameters dumps the disk and keeps a logfile of what it’s done. It takes all the good blocks first, if it hits a bad block, it tries to copy that. If it’s unsuccessful it skips the bad until next pass. Where it adjusts the block size into smaller chunks, and repeats until it finishes, or until stopped.

In my scenario, which might be a rare one. When it hit the bad block, and skipped it, the disk would be rendered unresponsive. I had to stop the command, unplug power and reinsert the power again, restart the command to continue. I had to do that a lot, and by every pass it would want smaller block sizes, making the dumping even slower. This mostly happend because I left it working over night, now I keep an eye on it and stop it when I no longer can keep it under surveilance.

 

How to use

Part of the man pages

SYNOPSIS
     recoverdisk [-b bigsize] [-r readlist] [-s interval] [-w writelist]
                 source [destination]

DESCRIPTION
     The recoverdisk utility reads data from the source file until all blocks
     could be successfully read.  If destination was specified all data is
     being written to that file.  It starts reading in multiples of the sector
     size.  Whenever a block fails, it is put to the end of the working queue
     and will be read again, possibly with a smaller read size.

     By default it uses block sizes of roughly 1 MB, 32kB, and the native sec-
     tor size (usually 512 bytes).  These figures are adjusted slightly, for
     devices whose sectorsize is not a power of 2, e.g., audio CDs with a sec-
     tor size of 2352 bytes.

     The options are as follows:

     -b bigsize
             The size of reads attempted first.  The middle pass is roughly
             the logarithmic average of the bigsize and the sectorsize.

     -r readlist
             Read the list of blocks and block sizes to read from the speci-
             fied file.

     -s interval
             How often we should update the writelist file while things go OK.
             The default is 60 and the unit is "progress messages" so if
             things go well, this is the same as once per minute.

     -w writelist
             Write the list of remaining blocks to read to the specified file
             if recoverdisk is aborted via SIGINT.

     The -r and -w options can be specified together.  Especially, they can
     point to the same file, which will be updated on abort.

In it’s most simple form it’s like dd, read disk device and write to an image file mounted to the system (usually my system drives aren’t as big as my data drives).

recoverdisk /dev/da0 /my/mounted/disk/image.dd

This command is like using dd.

For the inital run you should write to a log file

recoverdisk -w /home/tomse/recoverlist /dev/da0 /my/mounted/disk/image.dd

This will write the log list into the specified dir. And for large drives that can take a long time to recover, my suggestion is to break out of it right away, this way we can set it to read the log file when it passes it’s first pass.

recoverdisk -r /home/tomse/recoverlist -w /home/tomse/recoverlist /dev/da0 /my/mounted/disk/image.dd

-r = read, -w = write. quite logical and very easy to use.

this is is.. let the drive finish until it reaches 100% you can break it at any time, and run the command again (with the -r/-w parameters) to resume it’s work.

When using the USB adapter in the first run I got a message they I should change the blocksize to 131072 using the -b parameter, fortunately for me I haven’t been needing to do so yet on the current setup.

recoverdisk -b 131072 -r /home/tomse/recoverlist -w /home/tomse/recoverlist /dev/da0 /my/mounted/disk/image.dd

By default, the block size is 1MB

So a big thank you to Poul-Henning Kamp for implementing this into FreeBSD, to  Ulrich Sporlein for doing some fixes and most importantly writing the man pages.

And to my associates at our weekly retro gathering.