it-swarm.dev

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

Vytvořil jsem obrázek celé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

zjevně dává chybu superblock, protože obraz obsahuje celý disk (MBR, další oddíly), nikoli pouze oddíl, který potřebuji. Myslím, že bych měl najít způsob, jak ukázat obraz disku v /dev/ složka ...

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

PS: Vždy mohu dd vrátit obrázek na původní disk, ale to by bylo velmi nepohodlné (aktualizoval jsem operační systém a chtěl bych ho zachovat tak, jak je)

127
Nicola Feltrin

Získat rozložení oddílu obraz

$ 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čítejte offset od začátku obrazu do začátku oddíl

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

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

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

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

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

Odpojit

Sudo umount /mnt
Sudo losetup -d /dev/loop0
152
arrange

Aktualizace pro Ubuntu 16.04: S novým losetup je nyní snazší:

Sudo losetup -Pf disk_image.raw

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


Snadným řešením je použití kpartx : zjistí rozložení oddílů a mapuje je na bloková zařízení. Poté stačí jen připojit ten, který chcete.

Otevřete Terminál, vyhledejte 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

Toto vytvořilo loop0p1 a loop0p2 pod /dev/mapper. Z výstupu můžete vidět velikosti oddílů, které vám pomohou je identifikovat. Můžete připojit ten, který chcete:

$ Sudo mount /dev/mapper/loop0p2 /mnt

Případně blokovací zařízení detekuje Nautilus a můžete jej připojit z postranní lišty:

enter image description here

Až budete hotovi, odpojte připojené zařízení a odeberte mapování zařízení:

$ Sudo umount /mnt
$ Sudo kpartx -d disk_image.raw
113
Joni

pravit: pracuje s util-linux> = 2,21 . V době psaní se Ubuntu dodává pouze s verzí 2,20

Z mužského losetupu :

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

Tak prostě běž

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

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

27
Ludovic Ronsin

Snaž se gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Žádné Sudo požadované. Bude připojeno na /media/your_user_name/partition_name, stejně jako jednotky USB.

9
Mihai Capotă

losetup -P automatizace

losetup -P je nejlepší metoda začínající v Ubuntu 16.04, jak je uvedeno na https://askubuntu.com/a/496576/52975 , zde jsou funkce pro automatizaci, pokud budou dále. Používání:

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

modul smyčky max_part config

Toto je slušná metoda před 16.04.

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

Pokud to nakonfigurujete správně, Linux za vás zařízení automaticky rozdělí.

cat /sys/module/loop/parameters/max_part

říká, kolik oddílů loop zařízení může vygenerovat.

To je 0 ve výchozím nastavení na Ubuntu 14.04, a proto nedochází k automatickému rozdělení.

Chcete-li to 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"

na /etc/default/grub a pak Sudo update-grub.

Jak nastavit parametr modulu je také popsáno v: Jak přidat parametry modulu jádra?

Po restartu, když uděláte:

Sudo losetup -f --show my.img

připojí obrázek k /dev/loopX zařízení a automaticky připojí oddíly k /dev/loopXpY zařízení.

Jedná se tedy o nejpohodlnější metodu, pokud jste ochotni restartovat počítač.

Viz také

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

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

Metoda je nejlepší, protože po odpojení připojeného oddílu nevyžaduje odstranění smyčkového zařízení.

K dalšímu zjednodušení úkolu (což je nutné, pokud to děláte často), můžete použít můj skript mountimg, abyste pro vás udělali vše. Stačí jej získat z https://github.com/AlexanderAmelkin/mountimg a použít takto:

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

Pokud chcete, můžete také určit typ souborového systému 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ž budete s oddílem hotovi, jednoduše jej umount:

umount /media/sda_image
6
Alexander Amelkin

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

# Sudo losetup /dev/loop2 sda.img

Poté pomocí mdadm vytvořte zařízení md a pro všechny oddíly se vytvoří blokovací 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 zařízení oddílů.

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
5
Mike Bappe