Linux altında bir blok cihazın (örneğin HDD) dd tarafından oluşturulan görüntüsünden bir bölümü nasıl monte edebilirim?


34

Ben tüm diskin bir görüntü kullanılarak oluşturulan sahip dd . Disk yapısı şu şekildedir:

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

Resim kullanılarak oluşturuldu:

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

Mümkünse, içeriği okuyabilmem için görüntüden / dev / sda1'i nasıl kurarım?

HDD'yi tekrar klonlamak bir seçenek değil, sadece tek bir bölümü kendi başıma klonladıysam nasıl yapılacağını biliyorum. Umarım mevcut resimle hala mümkün.



Yanıtlar:


48

Günümüzde daha iyi bir yol var, artık ofset veya kpartx kullanmaya gerek yok:

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

loop0'u serbest bırakmak için, miktardan sonra kullanın:

losetup -d /dev/loop0

8
Ubuntu 14.04 kurulumumda, losetup bir --partscan seçeneği sunmuyor.
Cutter

1
@Cutter, util-linux 2.21, Ubuntu 16.04'te eklendi. :-)
Ciro Santilli

İlk kpartxönce, bu gibi bölümleri monte eden kullandığımda , /dev/mapper/loop3p1sadece losetupgibi cihazları yaratan noktaya işaret etmek istiyorum /dev/loop0p1. Cevap bunu not ediyor, ancak 10 kez okudum. : /
Randy Syring,

13

Bugün bu sorunla karşılaştım ve cevapları kendim için bir hatırlatma olarak güncellemek istedim. Ofseti kendi başına hesaplamak yerine, size bir dd görüntüsünden monte edilebilir cihazlar sağlayan bir araç kullanabilirsiniz: kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

Verilen durumda, gibi bir şeye ihtiyacı olacak

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

burada loop1p1 birinci bölüme, ikincisi loop1p2'ye, vb.


6

İlk kısmı aldınız: fdisk - l başlangıç ​​ofsetini bulmak için. Bu numarayı alın, 512 ile çarpın, montaj opsiyonu elde edin. Bu nedenle, sda1 için, durumunuzda, 5 * 512 = 2560. Sonra montajı çalıştırın:

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

Loopmounting cevabın sadece bir kısmı.

Bölümü belirleme konusunda yardım için http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image adresine bakın . Ben düşünüyorum , -o loop monte sizin için çalışacaktır = 32256 /path/to/image750.img / mnt ofset. ama bu dersi gerçekten okumalısınız.


ofset yanlış görünüyor; bu, 63'ün bölüm başlangıcına karşılık gelir (<i> 63 * 512 = 32256 </i>). Baumgart'ın cevabındaki denge bu durum için daha doğru görünüyor. bağlantı iyi bir referanstır, ancak bu prosedür için gereken adımları veya komutları özetlemeye zaman ayırırsanız daha iyi bir cevap olabilir. Teşekkürler!
quack quixote

1

losetup -P otomasyon

Https://superuser.com/a/684707/128124 tarafından belirtilen yöntem (util-linux v2.21'e eklenmiş, Ubuntu 16.04 eklenmiş), burada daha da otomatikleştirilecek işlevler vardır. Kullanımı:

$ 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

Kaynak:

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

döngü modülü max_part config

Util-linux v2.21'den önce iyi bir yöntem.

loop Ubuntu 14.04 'te çekirdek içine yerleştirilmiş bir çekirdek modülüdür.

Doğru yapılandırırsanız, Linux aygıtları sizin için otomatik olarak böler.

cat /sys/module/loop/parameters/max_part

loopcihazların kaç bölüm üretebileceğini söylüyor .

Öyle 0hiçbir otomatik bölme bunun neden olduğu Ubuntu 14.04 üzerinde varsayılan olarak.

Bunu değiştirmek için şunu ekleyebiliriz:

options loop max_part=31

veya içindeki bir dosyaya /etc/modprobe:

GRUB_CMDLINE_LINUX="loop.max_part=31"

için /etc/default/grubve daha sonra sudo update-grub.

Bir modül parametresini nasıl ayarlayacağınız da şu şekildedir : https://askubuntu.com/questions/51226/how-to-add-kernel-module-parameters

Yeniden başlatmanın ardından ne zaman:

sudo losetup -f --show my.img

görüntüyü bir /dev/loopXcihaza ve bölümleri otomatik olarak cihaza bağlar /dev/loopXpY.

Öyleyse, yeniden başlatmaya istekli iseniz en uygun yöntem budur.

Ayrıca bakınız


0

Sigorta gibi Kullanıcı modu dosya sisteminiz varsa, o zaman masaüstü ortamlarında Gnome'u seviyor ve gnome-disk-image-mounter gibi bir araç yüklediyseniz, o zaman sağ tıklatarak açınız ve onunla açınız.


0

Cevap verme işinin cevap olduğuna inanıyorum -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Yukarıdakiler bu dizinin altına yerleştirmelidir.

Bu, bağlantısını kesmeli:

umount /path/to/dir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.