संपूर्ण डिस्क की छवि से एकल विभाजन माउंट करें (डिवाइस)


117

मैंने अपनी संपूर्ण डिस्क की एक छवि बनाई है

dd if=/dev/sda of=/media/external_media/sda.img

अब समस्या यह है कि मैं उस डिस्क पर एक ext4 फाइलसिस्टम माउंट करना चाहूंगा लेकिन

mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image

स्पष्ट रूप से एक सुपरब्लॉक त्रुटि देता है क्योंकि छवि में पूरी डिस्क (एमबीआर, अन्य विभाजन) होते हैं, न कि मुझे केवल विभाजन की आवश्यकता होती है। इसलिए मुझे लगता है कि मुझे /dev/फ़ोल्डर में डिस्क छवि दिखाने का एक तरीका खोजना चाहिए ...

क्या किसी को पता है यह कैसे किया जाता है?

पुनश्च: मैं हमेशा ddछवि को मूल डिस्क पर वापस कर सकता हूं , लेकिन यह बहुत असुविधाजनक होगा (मैंने ओएस को अपडेट किया और मैं इसे वैसे ही रखना चाहूंगा)

जवाबों:


142

छवि का विभाजन लेआउट प्राप्त करें

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

विभाजन की शुरुआत के लिए छवि की शुरुआत से ऑफसेट की गणना करें

सेक्टर का आकार * प्रारंभ = (मामले में) 512 * 56 = 28672

ऑफसेट का उपयोग करके इसे / dev / loop0 पर माउंट करें

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

अब विभाजन / dev / loop0 पर रहता है । आप इसे fsck कर सकते हैं, माउंट कर सकते हैं आदि

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

अनमाउंट

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

आपको बहुत - बहुत धन्यवाद! एक जादू की तरह काम किया! आपने मेरा दिन बना दिया (और एक निर्दोष Ocelot को क्रूरतापूर्वक नष्ट होने से बचाया; पी)
निकोला फेल्ट्रिन

8
कम से कम बैश पर, शेल आपके लिए गणित भी कर सकता है:sudo losetup -o $((56*512)) /dev/loop0 sda.img
Enno Gröper

1
यह सिर्फ मददगार नहीं है, यह बिल्कुल भयानक है।
औरो

अगर कोई .img1 और .img2 हो तो क्या होगा? "win8.raw1 * 2048 718847 358400 7" और "win8.raw2 718848 52426751 25853952 7"
Enkouyami

6
और भी सरल mount -o loop,offset=$((56 * 512)) sda.img /mnt:। स्रोत: madduck.net/blog/…
ostrokach

105

Ubuntu 16.04 के लिए अपडेट: नए के साथ losetupयह अब आसान है:

sudo losetup -Pf disk_image.raw

उबंटू के पुराने संस्करणों के शेष उत्तर देखें।


एक आसान समाधान kpartx का उपयोग कर रहा है : यह विभाजन लेआउट का पता लगाएगा और प्रत्येक को एक ब्लॉक डिवाइस पर मैप करेगा। उसके बाद आपको बस इतना करना है कि आप जो चाहते हैं उसे माउंट करें।

टर्मिनल खोलें, डिस्क छवि का पता लगाएं, और इस कमांड को दर्ज करें:

$ 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

यह बनाया loop0p1और के loop0p2तहत /dev/mapper। आउटपुट से आप विभाजन के आकार देख सकते हैं जो आपको उनकी पहचान करने में मदद करता है। आप जिसको चाहते हैं उसे माउंट कर सकते हैं:

$ sudo mount /dev/mapper/loop0p2 /mnt

वैकल्पिक रूप से, ब्लॉक डिवाइस का पता Nautilus द्वारा लगाया जाता है और आप इसे साइड बार से माउंट कर सकते हैं:

यहां छवि विवरण दर्ज करें

जब आप कर लें, तो जो आपने माउंट किया है उसे अनमाउंट करें और डिवाइस मैपिंग को हटा दें:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw

उत्कृष्ट उत्तर, त्वरित और आसान, गुणा चरण से बचना अच्छा है
एल्डर गीक

sudo apt-get install kpartx- kpartx तक पहुंच पाने के लिए। kpartxपोस्ट की शुरुआत में लिंक मेरी राय में एक 'जाल' है। सॉफ्टवेयर स्थापित करने वाले लिंक एक नहीं है।
हनू जूल

1
@ हनु, सॉफ्टवेयर सेंटर के साथ जुड़ने वाले लिंक आस्कुबंटू पर एक आम बात है , हालांकि इस विशेष मामले में विशिष्ट आइकन जोड़ा जा सकता है और URL को अपडेट किया जाना चाहिए।
जोनी

losetup -Pfपूर्व में askubuntu.com/a/496576/52975 द्वारा उल्लेख किया गया था, मेरा सुझाव है कि आप कम से कम उस उत्तर के लिए लिंक करें।
सिरो सेंटिल्ली 新疆 改造 iro i 事件 '

1
FYI करें, losetup -Pf ..कमांड ऐसे उपकरण बनाएगी /dev/loopXpYजिन्हें आपको अभी भी माउंट करने की आवश्यकता है। आप कमांड Xके आउटपुट को देखने से पा सकते हैं losetupYविभाजन संख्या है।
गनक्र्स

26

संपादित करें : उपयोग के साथ काम करता है- linux> = 2.21 । केवल २.२० संस्करण के साथ ubuntu जहाजों के लेखन के समय

से आदमी losetup :

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

तो बस दौड़ो

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

पहली अप्रयुक्त लूप डिवाइस पर अपनी डिस्क छवि के हर विभाजन के लिए डिवाइस नोड बनाने के लिए और इसे स्टडआउट करने के लिए प्रिंट करें। /dev/loop0डिवाइस का उपयोग करने पर यह कम से कम बनाएगा /dev/loop0p1कि आप हमेशा की तरह माउंट करने में सक्षम होंगे।


2
मुझे यह संस्करण कहां मिलेगा losetup? उबंटू 14.04 में मेरे पास जुलाई 2003 (उपयोग-लिनेक्स) से एक मैनपेज है और विभाजन को स्कैन करने के लिए कोई `-P` विकल्प (या कुछ और) नहीं है।
हनू जूल

1
क्षमा करें, मैंने एक गलती की है, मैं आर्क लिनक्स पर इस विकल्प का उपयोग कर रहा हूं जो उपयोग-लिनक्स पैकेज के अधिक हाल के संस्करण के साथ आता है। ऐसा लगता है कि उबंटू उदास रूप से संस्करण २.२०.१ पर अटका हुआ है जो कि २०१२ में रिलीज़ किया गया है! --partscanविकल्प में शुरू किया गया है util-linux 2.21
लुडोविक Ronsin

1
खैर, gnome-disksएक डिस्क छवि को माउंट करने का एक विकल्प है और यह विभाजन है। (<- जो इंस्टाल और बाश / टर्मिनल उपयोग के लिए है, Disksडैश में भी इसे ढूँढता है)।
ह्नू

2
यह स्वीकृत उत्तर होना चाहिए ...
मैथिड

@matthid क्या किसी स्वीकृत उत्तर को बदलना संभव है? यह अच्छा है (और kpartx उत्तर वास्तव में इस संस्करण पर निर्भर है losetup), लेकिन यह स्वीकृत उत्तर की तुलना में लगभग तीन साल नया है - जो उस समय ऐसा करने का तरीका था।
शुभ अंक

9

कोशिश करें gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

कोई sudoआवश्यकता नहीं है। इसे /media/your_user_name/partition_nameUSB ड्राइव की तरह ही माउंट किया जाएगा ।


1
16.04 को अच्छी तरह से काम कर रहा था। मैं सिर्फ एक नया 18.04 स्थापित करता हूं और उपकरण / पासवर्ड / डिवएक्सएक्सएक्सएक्सएक्सएक्स वर्चुअल डिवाइस तक पहुंचने के लिए सूडो पासवर्ड मांगते हैं :(
लॉरेंट

7

losetup -P स्वचालन

losetup -Pउबंटू 16.04 से शुरू होने वाली सबसे अच्छी विधि है, जैसा कि https://askubuntu.com/a/496576/52975 पर बताया गया है , यहाँ यदि आगे चल रहे हैं तो स्वचालित करने के कार्य हैं। उपयोग:

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

लूप मॉड्यूल max_part config

16.04 से पहले यह एक सभ्य तरीका है।

loop एक कर्नेल मॉड्यूल है, जिसे Ubuntu 14.04 में कर्नेल में बनाया गया है।

यदि आप इसे सही तरीके से कॉन्फ़िगर करते हैं, तो लिनक्स स्वचालित रूप से आपके लिए उपकरणों को विभाजित करता है।

cat /sys/module/loop/parameters/max_part

कहते हैं कि कितने विभाजन loopडिवाइस उत्पन्न कर सकते हैं।

यह 014.04 Ubuntu पर डिफ़ॉल्ट रूप से होता है, यही वजह है कि कोई भी ऑटो-स्प्लिटिंग नहीं होती है।

इसे बदलने के लिए, हम या तो जोड़ सकते हैं:

options loop max_part=31

/etc/modprobeया में एक फ़ाइल के लिए :

GRUB_CMDLINE_LINUX="loop.max_part=31"

करने के लिए /etc/default/grubऔर उसके बाद sudo update-grub

मॉड्यूल पैरामीटर सेट करने के लिए भी कैसे कवर किया जाता है: कर्नेल मॉड्यूल पैरामीटर कैसे जोड़ें?

रिबूट के बाद, जब आप करते हैं:

sudo losetup -f --show my.img

यह एक /dev/loopXडिवाइस के लिए छवि mounts , और स्वचालित रूप से /dev/loopXpYउपकरणों के लिए विभाजन mounts ।

यदि आप रिबूट करने के इच्छुक हैं तो यह सबसे सुविधाजनक तरीका है।

यह सभी देखें


5

संपूर्ण डिस्क छवि को संलग्न करने के लिए लॉसेटअप का उपयोग करें।

# sudo losetup /dev/loop2 sda.img

फिर एक md डिवाइस बनाने के लिए mdadm का उपयोग करें और सभी विभाजनों के लिए ब्लॉक डिवाइस बनाए जाएंगे।

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.

अब आपको विभाजन उपकरणों को देखना चाहिए।

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

यह एक मजाकिया चाल है :)
जोहान बोले

4

सबसे आसान तरीका है, मेरी राय में, StackOverflow पर इस जवाब मेंmount -o loop,offset=... उल्लेख किया गया है । विचार अग्रांकित है:

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

विधि सबसे अच्छा है क्योंकि आपको माउंट किए गए विभाजन को हटाने के बाद लूप डिवाइस को हटाने की आवश्यकता नहीं है।

कार्य को और सरल बनाने के लिए (जो कि अगर आपको अक्सर ऐसा करना होता है), तो आप मेरे स्क्रिप्ट mountimgका उपयोग आपके लिए सब कुछ करने के लिए कर सकते हैं। बस इसे https://github.com/AlexanderAmelkin/mountimg से प्राप्त करें और इस तरह उपयोग करें:

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

यदि आप चाहें, तो आप फ़ाइल प्रकार और किसी भी अन्य अतिरिक्त माउंट विकल्प को निर्दिष्ट कर सकते हैं:

mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8

जब आप विभाजन के साथ कर रहे हैं, बस umountयह:

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