कैसे खरोंच से एक स्वरूपित विभाजन छवि फ़ाइल बनाने के लिए?


16

मुझे कुछ नहीं ( /dev/zero) से सिर्फ एक विभाजन के साथ फाइल सिस्टम बनाने की आवश्यकता है । मैंने आदेशों के इस क्रम को आजमाया:

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072

मूल रूप से, मुझे 64 एमबी छवि फ़ाइल जीरो से भरी बनाने की आवश्यकता है। तब मैं fdiskनए फाइलसिस्टम के लिए एक नया विभाजन जोड़ने के लिए उपयोग करता हूं (जो अंत में FAT32 होना चाहिए), सेक्टर पर शुरू करना 2048और शेष सभी क्षेत्रों का उपयोग करना।

losetup /dev/loop1 mountedImage.img
mkfs -t vfat /dev/loop1

लेकिन यहाँ मैं समस्याओं को मार रहा हूँ। यदि मैंने एक loopउपकरण सेट किया है और इसका उपयोग करके प्रारूपित है mkfs -t vfat, तो विभाजन तालिका अधिलेखित है और फाइलसिस्टम (FAT32) को डिस्क पर रखा गया है। मुझे FAT32 के साथ स्वरूपित संपूर्ण डिस्क की आवश्यकता नहीं है, मुझे बस अपने प्राथमिक विभाजन की आवश्यकता है।

क्या किसी को पता है कि मैं कच्ची डिस्क छवि के केवल एक विभाजन को कैसे प्रारूपित कर सकता हूं, पूरी छवि को नहीं?


कृपया स्पष्ट करें कि लूप डिवाइस को सेट करने से आपका क्या मतलब है और अपना पूरा mkfsकॉल पोस्ट करें। मुझे आपकी समस्या को समझने के लिए आपकी पोस्ट को 3 बार पढ़ना पड़ा। जब मैं आपकी मदद नहीं कर सकता, तो मैं इस बात में इंटरस्टेड हूं कि आप एक इमेज फाइल (!) क्यों बनाते हैं लेकिन फिर भी पहले n "सेक्टर" को अप्रयुक्त छोड़ना चाहते हैं।
बनगुंगिन

ठीक है, इसे संपादित किया। मैं पहले n सेक्टर्स को छोड़ना चाहता हूं (सेक्टरों में क्या गलत है?) अप्रयुक्त, जैसा कि मुझे अपने बूटलोडर्स को कहीं रखने की आवश्यकता है।
user35443


@MichaelMrozek ऐसे विचार हैं जो कुछ लिनक्स वितरणों पर लागू होते हैं लेकिन उबंटू पर नहीं (यह मायने रखता है कि क्या loopएक मॉड्यूल है या कर्नेल में बनाया गया है), इसलिए मुझे लगता है कि यह प्रत्येक साइट के लिए सवाल के अपने संस्करण के लिए उपयोगी है और मैंने फिर से खोलने के लिए मतदान किया।
गिलेस एसओ- बुराई को रोकना '

@MichaelMrozek व्यक्तिगत रूप से, मुझे लगता है कि AskUbuntu यूनिक्स और लिनक्स से अधिक विशिष्ट है, इसलिए यदि कोई प्रश्न दोनों के लिए क्रॉस-पोस्ट किया गया है, जब तक कि यहां बंद करने के लिए विशिष्ट कारण नहीं हैं, तो यह आस्कयूबंटू पर एक है जिसे क्रॉस-पोस्ट को बंद कर दिया जाना चाहिए यदि वे थे एक-दूसरे के करीब समय पर पोस्ट किया जाता है, भले ही यह "पहले" पोस्ट किया गया हो (संभवतः उबंटू / गैर-उबंटू उत्तर का उल्लेख यहां)। यहां इसका एक स्वीकृत उत्तर है, जो AskUbuntu पर नहीं है, जो दृढ़ता से इस एक खुले आईएमओ को रखने का पक्षधर है। मेरे पास AskUbuntu पर बंद करने के लिए वोट करने के लिए प्रतिनिधि नहीं है, लेकिन यहां सवाल फिर से खोलने के लिए मतदान कर रहा हूं।
एक CVn

जवाबों:


20

यदि लिनक्स पर, loopमॉड्यूल लोड करते समय , सुनिश्चित करें कि आप max_partमॉड्यूल के लिए एक विकल्प पास करते हैं ताकि लूप डिवाइस विभाजन योग्य हो।

वर्तमान मूल्य की जाँच करें:

cat /sys/module/loop/parameters/max_part

यदि यह 0 है:

modprobe -r loop # unload the module
modprobe loop max_part=31

इस सेटिंग को लगातार बनाए रखने के लिए, यदि आपके सिस्टम में वह निर्देशिका मौजूद है , तो निम्न पंक्ति /etc/modprobe.confको किसी फ़ाइल में या उसमें जोड़ें /etc/modprobe.d:

options loop max_part=31

यदि modprobe -r loop"मॉड्यूल लूप अंतर्निहित है" विफल रहता है, तो आपको loop.max_part=31अपनी कर्नेल कमांड लाइन और रिबूट को जोड़ना होगा । यदि आपका बूटलोडर Grub2 है, तो इसके मूल्य GRUB_CMDLINE_LINUXमें जोड़ें etc/default/grub

अब, आप एक विभाजन योग्य लूप डिवाइस बना सकते हैं:

truncate -s64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/

(ध्यान दें कि आपको लिनक्स के अपेक्षाकृत हाल के संस्करण की आवश्यकता है)।


FATAL: मॉड्यूल लूप अंतर्निहित है, क्या इसे उबंटू के नवीनतम संस्करण को स्थापित करने से हल किया जा सकता है (मेरे पास 12.04 है)?
user35443

यदि बिल्‍ड में कोई जरूरत नहीं है, तो आप को मॉर्डनबे की जरूरत है, loop.max_part=31कर्नेल कमांड लाइन को पास करें
एलेक्स

1
आह, अगर आपने हाल ही में कर्नेल देखा है और आप ऑफ़सेट को पार करते हैं और sizelimit की ज़रूरत बिल्कुल नहीं है
Alex

हम्म, कर्नेल कमांड लाइन, मेरे लिए बहुत मुश्किल है। फिर भी धन्यवाद, स्वीकार।
user35443

यह loop.maxpart=31या loop.max_part=31कर्नेल कमांड लाइन पर है?
क्रिस्टियन सियुपिटु

4

losetup /dev/loop0 file -o 1048576 --sizelimit limit

निर्दिष्ट ऑफसेट बाइट्स में होना चाहिए (1048576 = 2048 सेक्टर * 512 बाइट्स प्रति सेक्टर)।

mount -o loop,offset=1048576,sizelimit=limit

अधिक जानकारी के लिए लॉसेटअप और माउंट देखें ।


हम्म, ऑफसेट, यह काम करना चाहिए। और क्या होगा अगर मेरे पास इस पर अधिक विभाजन हैं?
user35443

मुझे लगता है कि एक लूप = एक विभाजन = एक ऑफसेट।
एलेक्स

उह, और वहाँ भी आकार निर्दिष्ट करने के लिए एक विकल्प है, तो मैं इसे सीमित कर सकते हैं और वहाँ अधिक विभाजन?
user35443

क्षमा करें, आंशिक समाधान के साथ एक नया उत्तर बनाने के लिए मेरी गलती, सही उत्तर @ "स्टीफ़न चेज़लस" से है, वह बस ऑफ़सेट और सिज़ेलिमिट विकल्प जोड़ सकते हैं (फिर मैं खुद को हटा दूंगा)
एलेक्स

इसे यहाँ नहीं रहने दें, या मेरा +1 कहीं नहीं जाएगा।
user35443

2

निम्नलिखित प्रक्रियाएं आपको उन्हें संशोधित करने के लिए छवि के विभाजन को माउंट करने की अनुमति देती हैं।

losetup 2.21 -P विकल्प

losetup -P -f --show my.img

/dev/loopXpYप्रति विभाजन एक बनाता है ।

लाभ: निष्पादन योग्य कई डिस्ट्रोस (उपयोग-लिनेक्स पैकेज) में पूर्व-स्थापित।

नुकसान: काफी हालिया विकल्प, Ubuntu 14.04 में मौजूद नहीं है।

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

kpartx

sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper

आउटपुट:

/dev/mapper/loop0
/dev/mapper/loop0p1

loop0p1पहला विभाजन कहाँ है, इसलिए हम कर सकते हैं:

mkdir -p d
sudo mount /dev/mapper/loop0p1 d

इस विधि का लाभ: रिबूट किए बिना Ubuntu 14.04 पर काम करता है।

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