कैसे एक img फ़ाइल के प्रकार को खोजने और इसे माउंट करने के लिए?


36

मुझे .img फ़ाइल को माउंट करना होगा लेकिन मुझे नहीं पता कि यह किस प्रकार का है .img। मैं कैसे पता लगा सकता हूँ कि यह किस प्रकार की .img फाइल है?

# 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
#

जवाबों:


34

कमांड चलाने का प्रयास करें fdisk -l <img file>। आमतौर पर अगर .imgफाइलें केवीएम वीएम से संपूर्ण डिस्क हैं तो वे तकनीकी रूप से एक आभासी डिस्क हैं।

उदाहरण

मुझे एक CentOS KVM VM मिला है जो fileकमांड के साथ ऐसा दिखाता है :

$ 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

fdiskइसके साथ चल रहा है:

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

यदि आप इनमें से किसी एक विभाजन को माउंट करना चाहते हैं, तो आप इस प्रकार कर सकते हैं:

fdisk (सिलेंडर आउटपुट)
  • ब्लॉक का आकार 512 बाइट्स और स्टार्ट-ब्लॉक 63 है।
  • ऑफसेट 512 * 63 = 32256 है।
fdisk (सेक्टर आउटपुट)
  • ब्लॉक का आकार 512 बाइट्स और स्टार्ट-ब्लॉक 1 है।
  • ऑफसेट 512 * 1 = 512 है।

तो माउंट कमांड होगा:

सिलिंडर में
$ mount -o loop,offset=32256 centostest.img /mnt/tmp

अन्य विभाजन को माउंट करने के लिए (512 * 208845 = 106928640):

$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
सेक्टरों में
$ mount -o loop,offset=512 centostest.img /mnt/tmp

अन्य विभाजन को माउंट करने के लिए (512 * 14 = 7168):

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

ध्यान दें

यह तभी काम करेगा जब माउंट "विभाजन" के भीतर फाइलसिस्टम के प्रकार को निर्धारित कर सकता है जिसे आप माउंट करने का प्रयास कर रहे हैं। आपको शामिल करने -t autoया विशिष्ट होने की आवश्यकता हो सकती है और बताएं mountकि यह -t ext4उदाहरण के लिए है।

संदर्भ


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

# 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.
लुइगी

@ लुइगी - क्या आप इन टिप्पणियों को अपने प्रश्न के अपडेट के रूप में पोस्ट कर सकते हैं? मैं नहीं देख सकता कि क्या हो रहा है।
slm

@ लुइगी - कोई गारंटी नहीं है कि -t autoविभाजन के प्रकार की पहचान कर सकते हैं। आपको दूसरों को केवल यह देखने की कोशिश करनी होगी कि क्या काम करता है।
slm

2 डी विभाजन के लिए ऑफसेट का निर्धारण कैसे करें? 512x14 क्यों? और मेरा पहला विभाजन मेरे प्रथम विभाजन W95 FAT16 (LBA) -t vfatको माउंट करने में विफल है।
नेकटावी

21

partedऑफसेट मूल्यों की पहचान करने के लिए उपयोग करें ।

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) 

अब आपके पास ऑफसेट मान हैं और आप उन फाइल सिस्टम को माउंट करने के लिए उपयोग कर सकते हैं।

# 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
एक या दो-पंक्ति वाले उत्तर को अक्सर मददगार नहीं माना जाता है। अपनी सिफारिश के अपने विवरण के विस्तार या प्रासंगिक प्रलेखन या सहायक संसाधनों से जोड़ने पर विचार करें।
HalosGhost

निश्चित रूप से थोड़ा स्पष्टीकरण के साथ बेहतर है, यहां मेरे लिए सबसे कुशल उत्तर, धन्यवाद फैयाज / हेलोसगॉस्ट!
19

बिदाई: बिना मान्यता के डिस्क लेबल
user180574

1

ऐसा लगता है कि @ एसएलएम में कुछ विस्की गणित है, या कम से कम fdisk -lआउटपुट से मेल नहीं खाता है । संशोधन से ऐसा लग रहा है कि uपैरामीटर को सिलिंडर से बदलकर क्षेत्रों में जोड़ा जा रहा है ? डन्नो, लेकिन यह मेरा कुछ नहीं करता है क्योंकि डिफ़ॉल्ट सेक्टर होना चाहिए।

मेरी छवि पर:

$ 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

कहा पे

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

मेरे उदाहरण में fdisk 2048 * 512 ब्लॉक आकार = 1048576 पर शुरू कह रहा है।


1

fileकमांड का एक आधुनिक संस्करण fdisk या parted की तुलना में स्टार्टर को बहुत अधिक सुविधाजनक तरीके से रिपोर्ट करता है:

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

इस वन-लाइनर आउटपुट को इस तरह से स्क्रिप्ट किया जा सकता है:

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 स्वचालन

निम्न स्क्रिप्ट स्वचालित रूप से एक छवि के सभी विभाजनों को माउंट करती है।

उपयोग:

$ 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

स्रोत:

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

उबंटू 16.04 में परीक्षण किया गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.