Bagaimana menemukan jenis file img dan memasangnya?


36

Saya harus me-mount file .img tapi saya tidak tahu apa itu .img. Bagaimana saya mengetahui jenis file .img apa itu?

# mount -t auto -o ro,loop gmapsupp.img /mnt/iso/
mount: you must specify the filesystem type
# file -k gmapsupp.img 
gmapsupp.img: x86 boot sector, code offset 0x0
#

Jawaban:


34

Coba jalankan perintah fdisk -l <img file>. Biasanya jika .imgfile adalah seluruh disk dari katakanlah VM KVM maka mereka secara teknis disk virtual.

Contoh

Saya punya VM CentOS KVM yang muncul seperti ini dengan fileperintah:

$ file centostest.img 
centostest.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48

Berjalan fdiskdengannya:

$ sudo /sbin/fdisk -lu /kvm/centostest.img
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.

Disk /kvm/centostest.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks   Id  System
/kvm/centostest.img1   *          63      208844      104391   83  Linux
/kvm/centostest.img2          208845    20964824    10377990   8e  Linux LVM
Partition 2 has different physical/logical endings:
     phys=(1023, 254, 63) logical=(1304, 254, 63)

Jika Anda ingin memasang salah satu dari partisi ini Anda dapat melakukannya sebagai berikut:

fdisk (keluaran silinder)
  • ukuran blok 512 byte dan blok awal adalah 63.
  • Offsetnya adalah 512 * 63 = 32256.
fdisk (keluaran sektor)
  • ukuran blok 512 byte dan blok awal adalah 1.
  • Offsetnya adalah 512 * 1 = 512.

Jadi perintah mount adalah:

dalam silinder
$ mount -o loop,offset=32256 centostest.img /mnt/tmp

Untuk memasang partisi lain (512 * 208845 = 106928640):

$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
dalam sektor
$ mount -o loop,offset=512 centostest.img /mnt/tmp

Untuk memasang partisi lain (512 * 14 = 7168):

$ mount -o loop,offset=7168 centostest.img /mnt/tmp

CATATAN

Ini hanya akan berfungsi jika mount dapat menentukan jenis sistem file di dalam "partisi" yang Anda coba pasang. Anda mungkin perlu memasukkan -t auto, atau spesifik dan katakan mountitu saja -t ext4misalnya.

Referensi


# mount -t auto -o ro,loop,offset=512 gmapsupp.img /mnt/iso/\mount: you must specify the filesystem type
Luigi

# fdisk -l gmapsupp.img Disk gmapsupp.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System gmapsupp.img1 1 9 65536 0 Empty Partition 1 has different physical/logical endings: phys=(1023, 15, 8) logical=(8, 40, 32) Partition 1 does not end on cylinder boundary.
Luigi

@Luigi - dapatkah Anda memposting komentar ini sebagai pembaruan untuk pertanyaan Anda? Saya tidak bisa melihat apa yang terjadi.
slm

@Luigi - tidak ada jaminan yang -t autodapat mengidentifikasi jenis partisi. Anda harus mencoba yang lain untuk melihat apa yang berhasil.
slm

bagaimana cara menentukan offset untuk partisi ke-2? mengapa 512x14? dan partisi 1 saya W95 FAT16 (LBA) -t vfatgagal me-mount partisi 1 saya.
Necktwi

21

Gunakan parteduntuk mengidentifikasi nilai offset.

root@mysystem:~/# parted myimage.img
GNU Parted 2.3
Using /root/myimage.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u
Unit?  [compact]? B
(parted) print
Model:  (file)
Disk /root/myimage.img: 8589934592B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start        End          Size         Type     File system     Flags
 1      32256B       254983679B   254951424B   primary  ext3            boot
 2      254983680B   1274918399B  1019934720B  primary  linux-swap(v1)
 3      1274918400B  3323013119B  2048094720B  primary  ext3
 4      3323013120B  8587192319B  5264179200B  primary  ext3

(parted) 

Sekarang Anda memiliki nilai offset dan Anda dapat menggunakannya untuk me-mount sistem file.

# mount -o loop,offset=32256 myimage.img /mnt/disk1 
# mount -o loop,offset=1274918400 myimage.img /mnt/disk2
# mount -o loop,offset=3323013120 myimage.img /mnt/disk3

1
Satu atau dua baris jawaban sering dianggap tidak bermanfaat. Pertimbangkan memperluas penjelasan Anda tentang rekomendasi Anda atau menghubungkan ke dokumentasi yang relevan atau sumber daya yang bermanfaat.
HalosGhost

Jelas lebih baik dengan sedikit penjelasan, jawaban paling efisien untuk saya di sini, terima kasih Fayiz / HalosGhost!
tisc0

parted: label disk yang tidak dikenal
user180574

1

Sepertinya @slm memiliki beberapa matematika yang sulit, atau setidaknya tidak cocok dengan fdisk -loutput. Dari revisi itu sepertinya menambahkan uparameter ke fdisk berubah dari silinder ke sektor? Entahlah, tetapi itu tidak melakukan apa pun pada saya karena defaultnya harus sektor.

Pada gambar saya:

$ fdisk -l bone-debian-7.5-2015-01-14-beaglebone.img
Disk bone-debian-7.5-2015-01-14-beaglebone.img: 3.7 GiB, 3965190144 bytes, 7744512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device                                     Boot     Start       End  Blocks  Id System
bone-debian-7.5-2015-01-14-beaglebone.img1 *         2048    198655   98304   e W95 FAT16 (LBA)
bone-debian-7.5-2015-01-14-beaglebone.img2         198656   3481599 1641472  83 Linux

$ sudo mount -t vfat -o loop,offset=1048576,ro bone-debian-7.5-2015-01-14-beaglebone.img /mnt

Dimana

offset = Block size from 'Units' x Fdisk 'Start' column

Dalam contoh saya, fdisk mengatakan mulai pada 2048 * 512 ukuran blok = 1048576.


1

Versi modern dari fileperintah ini melaporkan awal dengan cara yang jauh lebih nyaman daripada fdisk atau berpisah:

file $img Armbian_jw.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 2883584 sectors

Output satu baris ini dapat dituliskan seperti ini:

startsector=$(file $img | sed -n -e 's/.* startsector *\([0-9]*\),.*/\1/p')
offset=$(expr $startsector '*' 512)
echo $offset
 4194304
sudo mount -o loop,offset=$offset $img /mnt

1

losetup -P otomatisasi

Script berikut secara otomatis me-mount semua partisi gambar.

Pemakaian:

$ 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

Sumber:

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

Diuji di Ubuntu 16.04.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.