Diskimage i Linux

Från Täpp-Anders
Hoppa till navigeringHoppa till sök

Att ta en diskimage

Att ta en diskimage görs enkelt med följande kommando:

$ sudo dd if=/dev/sda of=diskimage.img status=progress

För vissa device kan det också hjälpa att lägga på blockstorlek med bs=8192 eller annan lämplig blockstorlek om accessen har hög overhead.

status=progress är bara för du ska se hur långt dd läst, operationen brukar ta en stund beroende på hur stor din disk är och hur snabb överföring du har.

Du ska inte ta en diskimage på partitioner som är monterade. Det brukar sluta med en inkonsistent journal och kvaddat filsystem. Boota i stället datorn från en USB-sticka och kör dd från den.

Vilken device du ska köra kan du se om du slår lsblk resultatet kan se ut såhär:

NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda         8:0    0 476,9G  0 disk 
├─sda1      8:1    0   1,9G  0 part /boot
├─sda2      8:2    0  29,8G  0 part [SWAP]
└─sda3      8:3    0 445,3G  0 part /home
                                    /var/snap/firefox/common/host-hunspell
                                    /
sdc         8:32   0   3,6T  0 disk 
├─sdc1      8:33   0   200M  0 part 
└─sdc2      8:34   0   3,6T  0 part /media/anders/LaCie
sr0        11:0    1  1024M  0 rom  

I mitt fall är sda den inbyggda disken i maskinen, sdc är en löstagbar disk ansluten via USB-C och sr0 är en CD-ROM läsare (ovanligt numera i laptops...)

Att återställa en diskimage

Återställning görs med omvänt kommando:

dd if=diskimage.img of=/dev/sda

Montera en särskild partition inne i en diskimage

Enklaste sättet att montera en full disk image i linux, som t.ex. tagits med kommandot: dd if=/dev/sda of=diskimage.img är egentligen att leta upp och räkna ut var någonstans en partition börjar och sedan montera dem med det vanliga mount-kommandot.

Först kontrollera partitionstabellen:

$ fdisk -l diskimage.img

Disk system-2025-01-11.img: 238,47 GiB, 256060514304 bytes, 500118192 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<br>
Disk identifier: 873D2F0A-877C-488B-BDE3-B0C984C38B67

Device                     Start       End   Sectors   Size Type
system-2025-01-11.img1      2048    534527    532480   260M EFI System
system-2025-01-11.img2    534528    567295     32768    16M Microsoft reserved
system-2025-01-11.img3    567296 496574463 496007168 236,5G Microsoft basic data
system-2025-01-11.img4 496574464 498065407   1490944   728M Windows recovery environment
system-2025-01-11.img5 498069504 500117503   2048000  1000M Windows recovery environment

Partitionen vi vill ha är den här:

system-2025-01-11.img3    567296 496574463 496007168 236,5G Microsoft basic data

Vi behöver då räkna ut offsetten till den. Fdisk talar om vi har 512 byte sektorstorlek och vi ser i tabellen den startar på 567296 så om vi tar 512*567296=290455552 i bytes. Montering kan sedan ske med följande kommando:

$ sudo mount -o loop,offset=290455552 diskimage.img /mnt