Vraag Mount één partitie van de afbeelding van de volledige schijf (apparaat)


Ik maakte een afbeelding van mijn volledige schijf met

dd if=/dev/sda of=/media/external_media/sda.img

Nu is het probleem dat ik een ext4 bestandssysteem zou willen mounten dat op die schijf was maar

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

geeft duidelijk een superblock-fout omdat de afbeelding de hele schijf (MBR, andere partities) bevat, niet alleen de partitie die ik nodig heb. Dus ik denk dat ik een manier zou moeten vinden om de schijfafbeelding te laten verschijnen in de /dev/ map...

Weet iemand hoe dat te doen?

PS: Dat kan ik altijd dd terug de afbeelding naar de originele schijf, maar dat zou erg onhandig zijn (ik heb het OS bijgewerkt en ik zou het graag willen houden zoals het is)


98
2017-10-19 16:36


oorsprong




antwoorden:


Haal de partitie-indeling van de afbeelding op

$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
  Device Boot      Start         End      Blocks   Id  System
sda.img1   *          56     6400000     3199972+   c  W95 FAT32 (LBA)

Bereken de offset vanaf het begin van de afbeelding tot de partitie start

Sectorgrootte * Begin = (in het geval) 512 * 56 = 28672 

Monteer hem op / dev / loop0 met behulp van de offset

sudo losetup -o 28672 /dev/loop0 sda.img

Nu bevindt de partitie zich op / Dev / loop0. Jij kan fsck het, monteer het enz

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

ontkoppelen

sudo umount /mnt
sudo losetup -d /dev/loop0

125
2017-10-19 19:55



Heel erg bedankt! Werkte als een charme! Je maakte mijn dag (en redde een onschuldige Ocelot tegen bruut verwijderen; P) - Nicola Feltrin
In ieder geval op bash kan de shell zelfs de wiskunde voor je doen: sudo losetup -o $((56*512)) /dev/loop0 sda.img - Enno Gröper
Dit is niet alleen nuttig, dit is absoluut geweldig. - andho
Wat als er een .img1 en .img2 zijn? "win8.raw1 * 2048 718847 358400 7" en "win8.raw2 718848 52426751 25853952 7" - Enkouyami
Nog eenvoudiger: mount -o loop,offset=$((56 * 512)) sda.img /mnt. Bron: madduck.net/blog/... - ostrokach


Update voor Ubuntu 16.04: Met het nieuwe losetup dit is nu eenvoudiger:

sudo losetup -Pf disk_image.raw

Zie de rest van het antwoord voor oudere versies van Ubuntu.


Een eenvoudige oplossing is het gebruiken kpartx: het zal de partitie-indeling achterhalen en elk naar een blokapparaten toewijzen. Daarna hoef je alleen maar degene te monteren die je wilt.

Open Terminal, zoek de schijfkopie op en voer deze opdracht in:

$ sudo kpartx -av disk_image.raw 
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

Dit is gemaakt loop0p1 en loop0p2 onder /dev/mapper. Vanaf de uitvoer ziet u de grootte van de partities waarmee u ze kunt identificeren. Je kunt degene die je wilt monteren met:

$ sudo mount /dev/mapper/loop0p2 /mnt

Als alternatief wordt het blokapparaat door Nautilus gedetecteerd en kunt u het vanuit de zijbalk monteren:

enter image description here

Wanneer u klaar bent, ontkoppelt u wat u hebt gemount en verwijdert u de apparaattoewijzing:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw

88
2017-10-02 12:12



Uitstekend antwoord, snel en gemakkelijk, het vermijden van de vermenigvuldigingsstap is leuk - Elder Geek
sudo apt-get install kpartx - om toegang te krijgen tot kpartx. De kpartx link in het begin van de post is naar mijn mening een 'val'. Links die software impliceren, is een no-no. - Hannu
@Hannu, koppelingen die integreren met Software Center zijn een algemene praktijk op askubuntu, hoewel in dit specifieke geval het standaardpictogram kan worden toegevoegd en de URL moet worden bijgewerkt. - Joni
losetup -Pf was eerder genoemd door askubuntu.com/a/496576/52975 Ik raad aan om op zijn minst een link naar dat antwoord te maken. - Ciro Santilli 新疆改造中心 六四事件 法轮功


Bewerk : werkt met util-linux> = 2.21. Op het moment dat ubuntu schepen met versie schrijft 2.20 enkel en alleen

Van man losetup :

       -P, --partscan
          force kernel to scan partition table on newly created loop device

Dus ren gewoon

$ sudo losetup -f --show -P /path/to/image.img

om apparaatknooppunten te maken voor elke partitie van uw schijfkopie op het eerste ongebruikte lusapparaat en deze naar stdout af te drukken. Als u gebruikt /dev/loop0 apparaat dat het op zijn minst zal creëren /dev/loop0p1 die je gewoon kunt monteren.


22
2017-07-11 17:29



Waar vind ik deze versie van losetup ? Degene die ik heb in Ubuntu 14.04 heeft een manpage uit juli 2003 (util-linux) en geen `-P` optie (of iets anders) voor het scannen van partities. - Hannu
Sorry, ik heb een fout gemaakt, ik gebruik deze optie op Arch Linux, die wordt geleverd met een meer recente versie van het util-linux-pakket. Het lijkt erop dat Ubuntu helaas vastzit aan versie 2.20.1 die is uitgebracht op januari 2012! De --partscanoptie is ingevoerd in util-linux 2.21 - Ludovic Ronsin
Goed, gnome-disks heeft een optie om een ​​schijfkopie en zijn partities te mounten. (<- dat is voor installatie en bash / Terminal gebruik, Disksin het dashboard vindt het ook). - Hannu
Dit zou het geaccepteerde antwoord moeten zijn ... - matthid
@ matthid Is het even mogelijk om een ​​geaccepteerd antwoord te veranderen? Dit is goed (en het Kpartx-antwoord is eigenlijk afhankelijk van deze versie van losetup), maar het is bijna drie jaar nieuwer dan het geaccepteerde antwoord - dat was de manier om het op dat moment te doen. - Auspex


Proberen gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Nee sudo verplicht. Het wordt gemonteerd op /media/your_user_name/partition_name, net zoals USB-drives.


7
2017-07-23 22:02



Werkte goed op 16.04. Ik heb zojuist een nieuwe 18.04 geïnstalleerd en de tools vraagt ​​om een ​​sudo-wachtwoord om toegang te krijgen tot het virtuele / dev / loopXX-apparaat :( - Laurent


losetup -P automatisering

losetup -P is de beste methode die begint in Ubuntu 16.04 zoals vermeld op https://askubuntu.com/a/496576/52975 , hier zijn functies om verder te automatiseren. Gebruik:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Bron:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

loopmodule max_part config

Dit is een fatsoenlijke methode vóór 16.04.

loop is een kernelmodule, ingebouwd in de kernel in Ubuntu 14.04.

Als u het goed configureert, splitst Linux de apparaten automatisch voor u op.

cat /sys/module/loop/parameters/max_part

zegt hoeveel partities loop apparaten kunnen genereren.

Het is 0 standaard op Ubuntu 14.04 en daarom gebeurt er geen automatische splitsing.

Om het te veranderen, kunnen we ofwel toevoegen:

options loop max_part=31

naar een bestand in /etc/modprobe, of:

GRUB_CMDLINE_LINUX="loop.max_part=31"

naar /etc/default/grub en dan sudo update-grub.

Het instellen van een moduleparameter wordt ook behandeld bij: Hoe kernelmoduleparameters toevoegen?

Na een herstart doet u het volgende:

sudo losetup -f --show my.img

het koppelt de afbeelding aan een /dev/loopX apparaat en koppelt automatisch de partities aan /dev/loopXpY apparaten.

Dus dit is de handigste methode als je bereid bent om opnieuw op te starten.

Zie ook


6
2017-09-12 11:04





Gebruik losetup om de volledige schijfkopie te bevestigen.

# sudo losetup /dev/loop2 sda.img

Gebruik dan mdadm om een ​​md-apparaat aan te maken en blokkeerapparaten worden voor alle partities aangemaakt.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

Nu zou u de partitieapparaten moeten zien.

nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk   9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1

4
2017-10-10 12:45



Dat is een grappige truc :) - Johan Boulé


De eenvoudigste manier is naar mijn mening het gebruik ervan mount -o loop,offset=... zoals genoemd in dit antwoord op StackOverflow. Het idee is als volgt:

fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT

De methode is het beste omdat het niet nodig is het loop-apparaat te verwijderen nadat je de aangekoppelde partitie hebt aangekoppeld.

Om de taak verder te vereenvoudigen (wat nodig is als u dit vaak doet), kunt u mijn script gebruiken mountimg om alles voor je te doen. Haal het gewoon van https://github.com/AlexanderAmelkin/mountimg en gebruik als volgt:

mountimg /media/external_media/sda.img 2 /media/sda_image

Je kunt net zo goed het bestandssysteemtype en eventuele andere aanvullende opties opgeven als je wilt:

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

Wanneer je klaar bent met de partitie, gewoon umount het:

umount /media/sda_image

2
2017-11-11 10:13