Připojte jeden oddíl z obrazu celého disku (zařízení)

99

Vytvořil jsem obraz celého mého disku pomocí

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

Nyní je problém, že bych chtěl připojit souborový systém ext4, který byl na tomto disku, ale

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

samozřejmě dává chybu superblocku, protože obraz obsahuje celý disk (MBR, jiné oddíly) nejenom oddíl, který potřebuji. Takže myslím, že bych měl najít způsob, jak se obraz disku objevit ve složce/dev/ ...

Ví někdo, jak to udělat?

PS: Vždycky můžudd vrátit obraz na původní disk, ale to by bylo velmi nepohodlné (aktualizoval jsem operační systém a chtěl bych ho udržet tak, jak je)

    
dané Nicola Feltrin 19.10.2011 18:36

7 odpovědí

126

Získejte rozvržení oddílu

$ 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)

Vypočtěte offset od začátku obrazu na začátek oddílů

Velikost sektoru * Spustit = (v případě) 512 * 56 = 28672

Připojte jej na / dev / loop0 pomocí offsetu

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

Nyní je oddíl umístěn na / dev / loop0 . Můžete jej fsck , připojit jej atd.

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

Odpojit

sudo umount /mnt
sudo losetup -d /dev/loop0
    
odpověděl arrange 19.10.2011 21:55
89

Aktualizace pro Ubuntu 16.04: S novýmlosetup je nyní snadnější:

sudo losetup -Pf disk_image.raw

Podívejte se na zbytek odpovědi pro starší verze Ubuntu.

Jednoduché řešení využívá kpartx : rozvržení rozdělení a mapování jednotlivých blokových zařízení. Poté už stačí připojit ten, který chcete.

Otevřete Terminal, najděte obraz disku a zadejte tento příkaz:

$ 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

Vytvořili jsteloop0p1 aloop0p2 pod/dev/mapper. Z výstupu můžete vidět rozměry oddílů, které jim pomohou identifikovat. Můžete připojit požadovaný model:

$ sudo mount /dev/mapper/loop0p2 /mnt

Nautilus je také detekován blokovým zařízením a můžete ho namontovat z postranního panelu:

Po dokončení odpojte, co jste namontovali, a odstraňte mapování zařízení:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
    
odpověděl Joni 02.10.2013 14:12
22

Upravit : pracuje s util-linux > = 2.21 . V době psaní souborů ubuntu pouze s verzí 2,20

Z man losetup :

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

Takže stačí spustit

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

vytvořte uzly zařízení pro každý oddíl obrazu disku na prvním nepoužívaném smyčkovém zařízení a vytiskněte jej na stdout. Pokud používáte/dev/loop0 zařízení, vytvoří alespoň/dev/loop0p1, které budete moci připojit jako obvykle.

    
odpověděl Ludovic Ronsin 11.07.2014 19:29
7

Zkustegnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Nevyžaduje sesudo. Bude nainstalován na/media/your_user_name/partition_name, stejně jako jednotky USB.

    
odpověděl Mihai Capotă 24.07.2015 00:02
6

losetup -P automatizace

losetup -P je nejlepší metoda začínající v Ubuntu 16.04, jak je uvedeno na Odkazu , zde jsou funkce pro automatizaci, . Použití:

$ 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

Zdroj:

los() (
  img=""
  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"
  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"
)

smyčkový modul max_part config

Je to slušná metoda před 16.04.

loop je modul jádra, zabudovaný do jádra v Ubuntu 14.04.

Pokud ji nakonfigurujete správně, systém Linux automaticky rozdělí vaše zařízení.

cat /sys/module/loop/parameters/max_part

uvádí, kolik diskových oddílů může generovatloop zařízení.

Ve výchozím nastavení je Ubuntu 14.040, což je důvod, proč nedochází k automatickému rozdělení.

Chcete-li jej změnit, můžeme buď přidat:

options loop max_part=31

do souboru v/etc/modprobe, nebo:

GRUB_CMDLINE_LINUX="loop.max_part=31"

do/etc/default/grub a paksudo update-grub.

Nastavení parametru modulu je také zahrnuto na: Jak přidat parametry modulu jádra ?

Po restartování, když to uděláte:

sudo losetup -f --show my.img

namontuje obraz na zařízení/dev/loopX a automaticky připevní oddíly na/dev/loopXpY zařízení.

Takže to je nejvhodnější metoda, pokud jste ochotni restartovat.

Viz také

odpověděl Ciro Santilli 新疆改造中心 六四事件 法轮功 12.09.2015 13:04
4

Použijte losetup pro připojení celého obrazu disku.

# sudo losetup /dev/loop2 sda.img

Poté použijte mdadm k vytvoření zařízení md a pro všechny oddíly budou vytvořeny blokové zařízení.

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

Nyní byste měli vidět oddělovací zařízení.

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
    
odpověděl Mike Bappe 10.10.2014 14:45
2

Nejjednodušší způsob, podle mého názoru, je použitímount -o loop,offset=..., jak bylo zmíněno v této odpovědi na StackOverflow . Nápad je následující:

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

Metoda je nejlepší, protože nevyžaduje smazání smyčkového zařízení po nasazení namontované oblasti.

Chcete-li další úlohu zjednodušit (což je potřeba, pokud to děláte často), můžete použít můj skriptmountimg, který provede vše pro vás. Stačí ji získat Odkaz a použijte toto:

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

Pokud si přejete, můžete specifikovat typ souboru souborů a další další možnosti připojení:

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

Až skončíte s oddílem, jednodušeumount it:

umount /media/sda_image
    
odpověděl Alexander Amelkin 11.11.2016 11:13