Stel je hebt je scriptie op een externe hardschijf staan die je overal mee naar toe neemt. Je hebt de boel net opgeslagen en je wil het enkel nog even aan je ouders laten lezen om te controleren op spelfouten. Je springt op je fiets naar huis maar onderweg rij je over een losse steen in de weg waardoor je met fiets en al achterover valt. Jij op je tas waar je hardeschijf in zit, vanaf dat moment begint hij rare dingen te doen. Windows herkent hem niet meer en de paar keren dat hij alsnog in je verkenner verschijnt krijg je de melding dat je je schijf moet formatteren. Is het dan echt over en uit?

Ten eerste, foei dat jij je scriptie enkel op een externe hardeschijf hebt staan. Maak een backup. Echter nemen gedane zaken geen keer en als je hardeschijf kuren vertoont en er staan belangrijke bestanden op dan is het je er alles aan gelegen om deze te herstellen.

Het is nu eerst belangrijk om vast te stellen wat er precies kapot is, en omdat we graag laag bij het metaal willen spelen als het gaat om kapotte hardeschijven gebruiken we Linux en niet Windows.

Vaststellen hoe kapot de boel is

Lanceer een shell in Linux (geen zorgen als je geen shell ervaring hebt, alles wordt rustig uitgelegd). Ten eerste willen we kijken welke opslag devices aanwezig zijn zonder dat de kapotte hardeschijf is aangesloten. Zo kunnen we een 0 meting doen. Hiervoor gebruiken we het commando lsblk

niels@workstation$ lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                   7:0    0 161,4M  1 loop  /snap/gnome-3-28-1804/128
sda                     8:0    0 931,5G  0 disk
└─sda1                  8:1    0 931,5G  0 part  /media/data
sdb                     8:16   0 238,5G  0 disk
├─sdb1                  8:17   0   512M  0 part  /boot/efi
├─sdb2                  8:18   0   732M  0 part  /boot
└─sdb3                  8:19   0 237,3G  0 part
  └─sda3_crypt        253:0    0 237,3G  0 crypt
    ├─mint--vg-root   253:1    0 236,3G  0 lvm   /
    └─mint--vg-swap_1 253:2    0   976M  0 lvm   [SWAP]
sdc                     8:32   0   1,8T  0 disk
└─sdc1                  8:33   0   1,8T  0 part  /media/niels/Backup
nvme0n1               259:0    0 238,5G  0 disk
├─nvme0n1p1           259:5    0   529M  0 part
├─nvme0n1p2           259:6    0   100M  0 part
├─nvme0n1p3           259:7    0    16M  0 part
└─nvme0n1p4           259:8    0 237,9G  0 part

Je ziet een aantal devices, als je loop devices ertussen hebt staan dan kan je die negeren. Deze liggen buiten de scope van deze post. Je zult zeer waarschijnlijk een schijf zien als sda of sdb. Daaronder (verder in de structuur) staan schijven als sda1 en sdb1. sda is een schijf en sda1 is de eerste partitie op die schijf, sda2 de tweede enzovoorts.

Sluit nu de externe hardeschijf aan en kijk welke schijf erbij komt:

niels@workstation$ lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                   7:0    0 161,4M  1 loop  /snap/gnome-3-28-1804/128
sda                     8:0    0 931,5G  0 disk
└─sda1                  8:1    0 931,5G  0 part  /media/data
sdb                     8:16   0 238,5G  0 disk
├─sdb1                  8:17   0   512M  0 part  /boot/efi
├─sdb2                  8:18   0   732M  0 part  /boot
└─sdb3                  8:19   0 237,3G  0 part
  └─sda3_crypt        253:0    0 237,3G  0 crypt
    ├─mint--vg-root   253:1    0 236,3G  0 lvm   /
    └─mint--vg-swap_1 253:2    0   976M  0 lvm   [SWAP]
sdc                     8:32   0   1,8T  0 disk
└─sdc1                  8:33   0   1,8T  0 part  /media/niels/Backup
sde                     8:64   0   1,8T  0 disk
└─sde1                  8:65   0   1,8T  0 part
nvme0n1               259:0    0 238,5G  0 disk
├─nvme0n1p1           259:5    0   529M  0 part
├─nvme0n1p2           259:6    0   100M  0 part
├─nvme0n1p3           259:7    0    16M  0 part
└─nvme0n1p4           259:8    0 237,9G  0 part

Zoals je kan zien is er een schijf bijgekomen, namelijk: sde. Als je schijf niet verschijnt is het aan te raden om het nog een aantal keren te proberen. Probeer andere USB poorten, probeer je behuizing uit elkaar te halen en de harde schijf aan te sluiten met een SATA naar USB adapter. Als hij echter hier niet tevoorschijn komt is het einde oefening. Zie je hem wel dan kunnen we verder naar de volgende stap.

De simpelste manier om een backup te maken

De makkelijkste manier op ieder Linux systeem om een schijf te backuppen is door het commando dd te gebruiken. Dit commando neemt een bestand en maakt een bit voor bit naar een uitvoer bestand. Aangezien alles in Linux een bestand is (dus ook de harde schijven) kunnen we dit commando gebruiken om een backup te maken van de hardeschijf.

Als we ervan uit gaan dat sde de hardeschijf is dan kunnen we de backup starten door het volgende commando:

dd if=<PAD NAAR SCHIJF> of=<PAD NAAR BACKUP>

Oftewel:

dd if=/dev/sde of=/media/data/hdd_backup.dd

Het jammere is nu alleen dat we niet zien wat er gebeurt, dat is prima als we een USB stick hebben van 512mb maar als we een externe hardeschijf hebben van 500gb dan duurt dat wel even. Gelukkig kunnen we de hulp van een ander commando inschakelen namelijk pv. Dit commando neemt de input van een commando en stuurt dat door naar een ander, vervolgens print het statistieken over hoeveel data er door de “pijp” heen gaat. We kunnen dit op de volgende manier gebruiken:

dd if=/dev/sde | pv | dd of=/media/data/hdd_backup.dd

We gebruiken eerst dd om de input file (/dev/sde) te lezen. Zonder een ouput file mee te geven stuurt dd de data naar stdout. We kunnen echter een | teken gebruiken dan vangen we alles wat naar stdout gestuurd wordt en sturen we dat naar het commando dat we daarna invoeren, pv dus. Vervolgens passen we hetzelfde geintje toe na pv en sturen de data door naar een 2e dd commando die de output leest en dat vervolgens in de output file stopt.

De andere manier om een backup te maken

Nu kan het zijn dat je hardeschijf zo naar z’n grootje is dat sommige delen niet meer te lezen zijn, of misschien zijn ze de ene keer wel te lezen en de andere keer weer niet (het blijft mechanica in zo’n schijf). We kunnen dan gebruik maken van een commando dat ddrescue heet. Deze doet technisch gezien hetzelfde als het dd commando hierboven echter probeert de niet leesbare delen later nog eens om te proberen de gaten in te vullen.

Om een backup te maken met ddrescue kun je het volgende commando gebruiken:

ddrescue -d -r3 <PAD NAAR SCHIJF> <PAD NAAR BACKUP> logfile.log

Oftewel:

ddrescue -d -r3 /dev/sdc /media/data/hdd_backup.dd logfile.log
niels@workstation$ ddrescue -d -r3 /dev/sdc /media/data/hdd_backup.dd logfile.log
GNU ddrescue 1.23
Press Ctrl-C to interrupt
Initial status (read from mapfile)
rescued: 0 B, tried: 23264 kB, bad-sector: 0 B, bad areas: 0

Current status
     ipos:   15728 kB, non-trimmed:   23526 kB,  current rate:       0 B/s
     opos:   15728 kB, non-scraped:        0 B,  average rate:       0 B/s
non-tried:  144115 TB,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:        0 B,   bad areas:        0,        run time:      5m 55s
pct rescued:    0.00%, read errors:        4,  remaining time:         n/a
                              time since last successful read:         n/a
Copying non-tried blocks... Pass 5 (forwards)

Laat dit draaien tot het klaar is en je hebt een keurig backup van je schijf.

Hoe kom ik nu bij m’n bestanden?

Dat is een goeie vraag, wat we net gedaan hebben is een kopie gemaakt van de volledige schijf, je bestanden zitten daar in we moeten Linux enkel vertellen dat hij de file als een hardeschijf moet behandelen.

Dat doen we met losetup, hiermee is het mogelijk om een loop device te maken. Loop devices doen alsof ze een device zijn terwijl ze eigenlijk gewoon een file zijn. Heel veel programma’s, waaronder het programma dat we gebruiken om de backup mee te mounten willen een device in plaats van een file.

Om het loop device te maken kun je het volgende commando gebruiken:

losetup <PAD_NAAR_HET_TE_MAKEN_DEVICE> <PAD NAAR BACKUP>

Oftewel

losetup /dev/loop100 /media/data/hdd_backup.dd logfile.log

Nu kunnen we fdisk gebruiken om de structuur van de backup te bekijken:

sudo fdisk -l /dev/loop100
niels@workstation$ fdisk /dev/loop100 -l
Disk /dev/loop100: 124,2 MiB, 130048000 bytes, 254000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1D577CEA-F4A6-4E00-A6DE-59A82D960588

Device         Start    End Sectors  Size Type
/dev/loop100p1  2048 253951  251904  123M Microsoft basic data

Zoals je ziet herkent fdisk de partitie die op de schijf stond als /dev/loop100p1, nu kunnen we deze mounten met het volgende commando:

mount <PAD_NAAR_DEVICE> <PAD_NAAR_MOUNT_DIRECTORY>

Oftewel:

mount /dev/loop100p1 /media/niels/backup

(De mount directory moet wel al bestaan dus maak deze eerst).

Als het goed is is je backup nu beschikbaar onder de mount directory! Nu is het enkel en alleen zaak om deze bestanden van het mountpoint te kopiëren naar een andere hardeschijf. En als je dan toch lekker bezig bent, gooi ze dan ook gelijk op een clouddienst.

Ben je benieuwd naar meer van dit soort workshops en informatie? We willen een hackerspace vormen waar je meer kan leren en je interesses en hobby’s gestimuleerd worden. We willen een plek zijn voor makers, denkers en geïnteresseerden in de digitale wereld. Lijkt het jou interessant? Neem een kijkje op onze site of join onze discord!

Reacties