Bir disk görüntüsünü komut satırından nasıl bağlarım?


39

/ Dev içinde buna karşılık gelen bir cihaz dosyası bulunan bir sürücüyü nasıl monte edeceğimi biliyorum, ancak fiziksel bir cihazı temsil etmeyen ve / dev içinde bir analogu olmayan bir disk görüntüsü için nasıl yapacağımı bilmiyorum (örn. ISO dosyası veya disket görüntüsü). Bunu Mac OS X'te, sürücüyü otomatik olarak monte edecek olan Disk görüntü simgesinin Finder'daki simgesine çift tıklayarak yapabileceğimi biliyorum, ancak bunu terminalden yapabilmek istiyorum. Bunu yapmanın genel bir Unix yolu olup olmadığından veya platforma özgü olup olmadığından emin değilim.


1
OS X'deki komut satırında yapmak istediğinizi mi kastediyorsunuz? Sizden bahsediyorsunuz, ancak soru belirli bir os'a özgüyse açık olmak daha iyi olabilir. Ayrıca, ne tür bir disk görüntüsünü kastediyorsunuz? Iso?
ilkkachu

Yanıtlar:


42

MBR bölüm tablosuna sahip bir sabit sürücü görüntüsü olsaydı, monte etmem gereken bölümün ofsetini bulmak için görüntüyü fdisk olarak kullanırdım.

fdisk -lu /path/disk.img

Sonra ofseti geçerek monte ederdim.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

Dengeleme değeri bayt cinsindendir, oysa fdiskbir blok sayımı gösterir, bu nedenle değeri, bağlanacak dengelemeyi elde etmek için fdiskçıktının "Başla" veya "Başlat" sütunundan 512(veya blok boyutu ne olursa olsun) çarpmanız gerekir .


5
losetup -Pgenellikle bu yöntemden daha uygundur: unix.stackexchange.com/a/316407/32558
Ciro Santilli

35

Çoğu modern GNU sisteminde mountkomut aşağıdakileri yapabilir:

mount -o loop file.iso /mnt/dir

bağlantısını kesmek için sadece umountkomutu kullanabilirsiniz.

umount /mnt/dir

İşletim sisteminizde bu seçenek yoksa, bir döngü cihazı oluşturabilirsiniz :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

kullanmak için miktar -d:

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

Dosyanın bölümleri, örneğin bir HD görüntüsü varsa, -Pparametreyi kullanabilirsiniz (işletim sisteminize bağlı olarak), dosya içeriğindeki bölümleri eşler:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX

Bu temelde localhostdisk görüntüleri içindir (geridöngü!).
Monica ile Hafiflik Yarışları

2
losetupve mount -o loopLinux'a özgüdür. Farklı bir çekirdek kullanarak GNU dağıtımları üzerinde çalışmayacak (aynen, FreeBSD ve farklı bir sözdizimine sahip olacak olsa da hurd, illumos veya kFreeBSD gibi)
Stéphane Chazelas 14:06

İşte otomatikleştirmek için bazı fonksiyonlar losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli

6

Deneyin:

mount -o loop /path/to/file.iso /mnt

Sonra ekleyebilirsiniz loop:

  • -t msdos disket için
  • -t iso9660 CD-ROM görüntüsü için

Linux genellikle dosya türünü tahmin etmeye çalışır.


6

losetup -P çok bölmeli görüntüler için otomasyon

Bir disk görüntüsünü komut satırından nasıl bağlarım? | Unix ve Linux Stack Exchange'den bahsetti losetup -Pve işte işleri daha da otomatikleştirmek için kullanışlı Bash fonksiyonları. 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"
)
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.