मैं रास्पबेरी पाई लिनक्स डिस्ट्रो छवि कैसे माउंट कर सकता हूं?


37

सामान्य फाइलसिस्टम चित्र आसानी से लगाए जा सकते हैं:

mount system.img /mnt

जांच की, और संशोधित किया। लेकिन जब मैं एक रास्पबेरी पाई प्रणाली छवि (उदाहरण के लिए रास्पियन) के साथ यह कोशिश करता हूं, तो मुझे मिलता है:

mount: unknown filesystem type '(null)'

और इससे कोई फर्क नहीं पड़ता कि मैं क्या करने की कोशिश करता हूं -t, यह काम नहीं करेगा। मैं इस छवि को कैसे माउंट कर सकता हूं?


2
MS Windows के लिए समानांतर प्रश्न: raspberrypi.stackexchange.com/questions/28457/… ?
गोल्डीलॉक्स

जवाबों:


71

इस सवाल का जवाब अन्य सवालों के जवाब के रूप में दिया गया है, लेकिन यह यहां कैनोनिकल उपचार के योग्य है, इसलिए इसे दोहराया नहीं जाना चाहिए।

आप छवि को संपूर्ण रूप से माउंट नहीं कर सकते क्योंकि इसमें वास्तव में दो विभाजन और एक बूट सेक्टर है। हालाँकि, आप छवि में अलग-अलग विभाजन माउंट कर सकते हैं यदि आप फ़ाइल के अंदर उनके ऑफसेट को जानते हैं। उन्हें खोजने के लिए, एक ब्लॉक डिवाइस के रूप में छवि की जांच करें fdisk -l whatever.img। आउटपुट में इस तरह एक तालिका शामिल होनी चाहिए:

Device         Boot     Start       End  Blocks  Id System
whatever.img1            8192    122879   57344   c W95 FAT32 (LBA)
whatever.img2          122880   5785599 2831360  83 Linux

ये दो विभाजन हैं। पहले एक को "FAT32", और दूसरे को "लिनक्स" कहा जाता है। इस तालिका के ऊपर, उपकरण के बारे में कुछ अन्य जानकारी है, जिसमें संपूर्ण शामिल हैं:

Units: sectors of 1 * 512 = 512 bytes

हम Startविभाजन के ब्लॉक द्वारा इस इकाई के आकार को गुणा करके बाइट्स में ऑफसेट पा सकते हैं :

  • प्रथम विभाजन 512 * 8192 = 4194304
  • द्वितीय विभाजन 512 * 122880 = 62914560

इन्हें कमांड के offsetविकल्प के साथ इस्तेमाल किया जा सकता है mount। हमारे पास प्रत्येक विभाजन के प्रकार के बारे में एक सुराग भी है fdisk। इसलिए, मान लें कि हमारे पास माउंट पॉइंट्स के रूप में निर्देशिका /mnt/img/oneऔर /mnt/img/twoउपलब्ध हैं:

mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two

यदि आपको यहां "ओवरलैपिंग लूप" त्रुटि मिलती है, तो आपके संस्करण mountको आपको पहले विभाजन के आकार के साथ-साथ आकार को निर्दिष्ट करने की आवश्यकता होती है। उस को अनमाउंट करें, और ब्लॉकों की संख्या (57344) * 512 (= 29360128) का उपयोग करें।

mount -v -o offset=4194304,sizelimit=29360128 \
    -t vfat whatever.img /mnt/img/one  

छवि में इसके बाद कुछ भी नहीं है क्योंकि दूसरे विभाजन को एक सिज़लिमिट की आवश्यकता नहीं है।

अब आप दो विभाजन तक पहुँच सकते हैं। यदि आप उनमें कुछ भी बदलने का इरादा नहीं रखते हैं, तो -r(केवल पढ़ने के लिए) स्विच का उपयोग करें । यदि आप कुछ भी बदलते हैं, तो उन परिवर्तनों को .imgफ़ाइल में शामिल किया जाएगा ।

ध्यान दें कि /bootजब सिस्टम चल रहा हो तो पहला विभाजन संभवत: दूसरे विभाजन पर आरोहित होता है।


12
kpartx यह आपके लिए और भी आसान kpartx -a whatever.imgबनाता है : उपयुक्त (लूप) नोड बनाता है, जिसे आप बाद में इच्छा पर माउंट कर सकते हैं। kpartx -d whatever.img(अनमाउंट) लूप नोड्स को हटाने के लिए चलाएँ ।


रूट और बूट विभाजन को एक साथ कैसे माउंट करें: unix.stackexchange.com/q/342463/9689 ?
ग्रेज़गोरज़ विर्ज़ोवेकी

1
PS यदि कोई "ओवरलैप" त्रुटि से बचने के लिए एक ही समय में दोनों विभाजन माउंट करना चाहता है, तो sizelimitविकल्प के साथ विभाजन का आकार निर्दिष्ट करें । : अधिक जानकारी के लिए unix.stackexchange.com/a/342466/9689 । (Btw। उपरोक्त उत्तर उस विकल्प का उदाहरण उपयोग प्रदान करने के लिए अद्यतन किया जा सकता है)
ग्रेज़गोरज़ वियरज़ोविकी

2
मैन्युअल रूप से गुणा करने के बजाय, आप बैश के अंकगणितीय विस्तार का उपयोग कर सकते हैं $((8192*512)):।
रुस्लान

20

losetupके माध्यम से विभाजन जांच प्रदान करता है -P। इसका उपयोग करने से एक पूर्ण डिस्क छवि के बढ़ते विभाजन जैसे कि रास्पियन एसडी कार्ड छवि बहुत आसान हो जाती है:

losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot

इससे मानवीय भूल कम लगती है। क्या मैं माउंट कमांड में लेबल का उपयोग कर सकता हूं?
बजे ctrl-alt-delor

1

पहले मैं fdisk को पार्स करने और ऑफ़सेट्स को खींचने के लिए awk / grep का उपयोग कर रहा था, लेकिन पाया कि यह थोड़ा जटिल, परतदार और बाद में समझने में कठिन हो सकता है। मैंने पाया सबसे आसान तरीका:

IMAGE_FILE="YOUR IMAGE FILE GOES HERE"
TMP=$(mktemp -d)
LOOP=$(sudo losetup --show -fP "${IMAGE_FILE}")
sudo mount ${LOOP}p2 $TMP
sudo mount ${LOOP}p1 $TMP/boot/

# do stuff to ${TMP}/ which is rpi filesystem

# cleanup
umount ${TMP}/boot/
umount ${TMP}
rmdir ${TMP}

यह आपके लिए एक टेम्प-डायर बनाता है, अगले लूप-डिवाइस को ऑटो-असाइन करता है और इसे आपके लिए डिवाइसेस p1और p2विभाजन के रूप में सेट करता है, और बूट और रूट को माउंट करता है।

आप क्लीनअप भाग को एग्जिट-ट्रैप में भी डाल सकते हैं, इसलिए यदि कुछ विफल हो जाता है तो आपको मोलिंग / फाइल लटकने की समस्या नहीं होगी:

set -e
function cleanup {
  sudo umount -f $TMP/boot/
  sudo umount -f $TMP
  rmdir $TMP
}
trap cleanup EXIT

0

मामले में fdisk -l आर्क लाइन पर ब्लॉक के बजाय सेक्टर के साथ दिखाता है ... "अतिव्यापी लूप त्रुटि" के मामले में ब्लॉक की संख्या का पता लगाने का दूसरा तरीका दूसरे विभाजन से पहले विभाजन के बाइट्स में ऑफसेट को घटाना है और दो से विभाजित करें। उदाहरण के लिए (62914560-4194304) / 2 = 29360128

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