एक 16Gb कार्ड की छवि जिसमें अंत में अविभाजित स्थान होता है: संभव हो रहा है?


18

मैं कुछ दोस्तों के लिए एक distro तैयार करना चाहता था।
जैसा कि मेरे पास कुछ और नहीं था, मैंने 16 जीबी एसडी कार्ड का इस्तेमाल किया।

मैंने डिफ़ॉल्ट डेबियन वीजी 2 जीबी छवि के साथ शुरुआत की और कोई भी आकार परिवर्तन नहीं किया।
अब, जैसा कि मैं कर रहा हूं, मैंने जो किया, उसकी एक छवि बनाना चाहता था, लेकिन मुझे एक 16 जीबी फ़ाइल मिलती है, जिसमें अंत में बिना विभाजन के 14Gb (विभाजन और मुक्त नहीं) स्थान होता है।

[मैंने Windows // Win32DiskImager का उपयोग किया क्योंकि मेरे पास अभी आरपीआई में छड़ी करने के लिए कुछ भी मुफ्त नहीं है]

क्या मैं विभाजन की जगह के ठीक पीछे की छवि फ़ाइल को काट सकता हूं और एक छोटे कार्ड पर अग्रणी भाग को स्थानांतरित कर सकता हूं, फिर?


2
यदि आपके पास एक लिनक्स कंप्यूटर तक पहुंच है dd if=/dev/path/to/SD/card of=~/SpecialImage.img, तो चलाएं , फिर GParted स्थापित करें और चलाएं gparted ~/SpecialImage.img। एक बार GParted आपकी .imgफ़ाइल को खोलता है , बस अपनी पसंद के अनुसार विभाजन का आकार बदलें! (दोनों आदेशों को रूट के रूप में चलाया sudo suजाना चाहिए , आपको वह मिलना चाहिए जो आपको चाहिए। जब $स्विच ए #, यू आर रूट हो। सावधान रहें, यह भगवान के समतुल्य लिनक्स है।) GParted मूल रूप से आर्केड पार्टिटॉन प्रबंधन के लिए एक GUI दृश्य है। आपको जिन उपकरणों की आवश्यकता होगी। GParted का उपयोग करने से बस सब कुछ इतना सरल और सफल होने की संभावना है।
जेम्सइवेरड्यूड

प्लासी ने मेरे सवाल को ध्यान से पढ़ा।
निप्पी ६

हां, मैं आपका प्रश्न पढ़ता हूं, और मैं आपको बता सकता हूं कि बस डिस्क छवि को काट देना खतरनाक है। ज़रूर, आप बस एक छवि के अंतिम बाइट्स को बंद कर सकते हैं, लेकिन कोई भी ऐसा नहीं है कि आप गलती से किसी भी फाइल को बंद नहीं करेंगे, खासकर जब से जानबूझकर लिनक्स अपनी फ़ाइलों को बाहर करता है । साथ ही, फाइल सिस्टम के अंत में कुछ महत्वपूर्ण मेटाडेटा या ऐसा कुछ हो सकता है। यह उचित फ़ाइल सिस्टम का उपयोग करने के लिए समग्र रूप से एक सुरक्षित शर्त है कि किसी फ़ाइल को समाप्त करने की कोशिश करने की तुलना में उपयोगिताओं का आकार बदलना।
जेम्सअव्रीड्यूड

1
ठीक है, लेकिन मैं अनपरा स्पेस के बारे में बात कर रहा हूं। यहां तक ​​कि लिनक्स डिस्क स्पेस पर कोई भी डेटा नहीं डालेगा जो कि बिना चिह्नित किया गया हो लेकिन विभाजन तालिका में लिखे अनुसार ब्लॉक के भीतर रहें। मेरी चिंता छवि फ़ाइल प्रारूप के कारण हुई: यह हो सकता है कि छवि फ़ाइल में मेटाडाटा फ़ाइल के अंत में पड़ा है, इसलिए मैं फ़ाइल जानकारी को काटने से चिंतित था। (आशा है कि मेरी पिछली टिप्पणी बहुत कठिन नहीं थी, sry;)
निप्पेई

ओह, मुझे वही मिल रहा है जो आप अभी कह रहे हैं। यदि आप किसी भी दूषित अनुगामी खाली स्थान के बारे में चिंतित हैं, तो आपके द्वारा छंटनी के बाद छवि पर GParted चलाएं। यह शायद अंतिम क्षेत्र को "असंबद्ध" या "दूषित" के रूप में सूचीबद्ध करेगा - उस स्थान में एक नया "अनफ़ॉर्मेट" विभाजन बनाएँ। फिर, आपके पास कोई समस्या नहीं होगी। :)
जेम्सइवूड्यूड

जवाबों:


33

मुझे आखिरकार एक ऐसा संसाधन मिला, जो मेरे प्रश्न की व्याख्या कर रहा है।

http://softwarebakery.com/shrinking-images-on-linux

कम:

हाँ, छंटनी संभव है!

प्रक्रिया का सारांश:

उपयोग से छवि से विभाजन की जानकारी निकालना fdisk:

$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 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
Disk identifier: 0x000a1bc7

      Device Boot      Start         End      Blocks   Id  System
image.img1              2048     5872026     5869978    b  W95 FAT32

हम देखते हैं, विभाजन के 2,8Gb (5,872,026 * 512) के बारे में है, बाकी है एक आकार की है कि अविभाजित

तो, विभाजन के अंत के बाद सब कुछ हटाया जा सकता है।
यह उपकरण के साथ किया जाएगा truncate। जैसे ही 0 नंबर शुरू होता है, 1 सेक्टर्स की संख्या को जोड़ना न भूलें।

$ truncate --size=$[(5872026+1)*512] image.img


संपादित करें:

उन लोगों के लिए लिनक्स पर स्विच करने के बहुत आलसी जा रहा है:
इसके अलावा के साथ विंडोज पर काम करता है Cygwin की fdisk.exeऔर truncate.exe!

Cygwin क्या है?

मैं उद्धृत कर सकता हूं: "Cygwin: उस लिनक्स भावना को प्राप्त करें - विंडोज पर" ( https://www.cygwin.com/ )।
यह निष्पादनों का एक सेट है जो विंडोज के तहत चल सकता है, लेकिन सभी कमांड लाइन प्रोग्राम प्रदान करें जो आप आमतौर पर लिनक्स से जानते हैं। यदि आप इंस्टॉल के दौरान हर पैकेज का चयन करते हैं, तो सिगविन को स्थापित करने में बहुत लंबा समय लग सकता है, लेकिन इस उदाहरण का पालन करने के लिए, बस यह सुनिश्चित करें कि डिफ़ॉल्ट कॉन्फ़िगरेशन के अलावा, पैकेज util-linux(fdisk) और coreutils(ट्रंकट) भी चुने गए हैं।
आपके वातावरण के आधार पर, आपको मनुष्य को अपने /usr/binऔर जोड़ने की आवश्यकता है ।/usr/sbin$PATH


1
क्या पैकेज पाने के लिए fdisk.exeऔर स्थापित करने की आवश्यकता है truncate.exe?
पाइथननॉट

1
हाय @PythonNut, मैंने अपना उत्तर ऊपर अपडेट किया और आवश्यक पैकेज जोड़े: ओ)
निप्पे

क्या होगा यदि विभाजन में डिस्क का आकार है, भले ही कम उपयोग किया जाए?
पाईगम्स

5

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मैं यह दिखाना चाहूंगा कि मैक पर यह प्रक्रिया कैसे की जाए, क्योंकि यह उतना आसान नहीं है: fdiskइसका -lविकल्प नहीं है , और truncateडिफ़ॉल्ट रूप से स्थापित नहीं है:

1. चरण 1: मैक ओएस एक्स पर ट्रंकट स्थापित करें :

इसके लिए आपको MacPorts या Homebrew की जरूरत है। मैं MacPorts का उपयोग करता हूं। यदि आपके पास इनमें से एक नहीं है, तो आगे बढ़ें और पहले उन्हें स्थापित करें। MacPorts से लिंक करें

अब, हम ट्रंकट स्थापित कर सकते हैं । अपना टर्मिनल खोलें और टाइप करें:

sudo port install truncate

काढ़ा स्थापना के लिए:

brew install truncate

यह करना चाहिए।

2. हमारे IMG को माउंट करने के लिए डिस्क यूटिलिटीज का उपयोग करें ताकि यह डिस्कुटिल टर्मिनल कमांड को दिखाई दे ।

आप एक क्षण में देखेंगे कि हमें इस कदम की आवश्यकता क्यों है। डिस्क यूटिलिटी ऐप खोलें। फ़ाइल (शीर्ष पट्टी पर) पर क्लिक करें -> डिस्क छवि खोलें और अपनी आईएमजी फ़ाइल चुनें।

3. IMG के विभाजन आकार की जाँच करें और जहाँ यह आरोहित है।

एक टर्मिनल पर, टाइप करें:

diskutil list

और इसे कुछ इस तरह दिखाना चाहिए, कहीं अंत में:

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        +16.0 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

इसलिए, हम देखते हैं कि लगभग 12GB बिना विभाजन के हैं। हमें उन लोगों को अलग करने की जरूरत है।

डिस्क कमांड को माउंट करने के लिए हमें इस कमांड की आवश्यकता है। मेरे मामले में, यह निम्न है: / dev / disk3

4. वास्तविक विभाजन आकार ज्ञात कीजिए।

3.9 जीबी और 62.9 एमबी मूल्य हैं जो ट्रंकट के साथ काम नहीं करेंगे। हमें बाइट में विभाजन के आकार को खोजने की आवश्यकता है।

5. fdisk चलाएं ।

अपने टर्मिनल में, यह कमांड चलाएँ:

   fdisk /dev/diskX

जहां X वह संख्या है जो आपको पिछले चरण में मिली थी। इसका परिणाम कुछ इस तरह से होना चाहिए:

         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 0C    0 130   3 -    8  40  32 [      8192 -     122880] Win95 FAT32L
 2: 83    8  40  33 -  478  79  49 [    131072 -    7553024] Linux files*
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      

6. छांटने का समय !

आपके टर्मिनल पर, cdउस निर्देशिका के लिए जो आपकी छवि है। फिर लिखना:

truncate FILE SIZE

फ़ाइल आपके पाठ्यक्रम की फ़ाइल है।

आकार बाइट्स में आकार है। मैंने जो किया, वह कमांड के आकार कॉलम fdisk, स्टार्ट कॉलम और 512 से गुणा करना है। इसलिए, मेरे मामले में SIZE होगा: 512 * (7553024 + 131072) = 3934257152 , जो लगभग 3.9 जीबी है।

आपको अंतिम विभाजन की शुरुआत और आकार की आवश्यकता होगी जो इसके द्वारा दिखाया गया है । (जरूरी नहीं कि सबसे बड़ा हो, लेकिन IMG फ़ाइल के अंत में एक)fdisk

मैंने थोड़ा प्रयोग किया, और जब भी मैंने 7553024 * 512 या (7553024 + 1) * 512 बाइट्स दर्ज किए, IMG फ़ाइल भ्रष्ट थी। इसलिए, केवल निश्चित होने के लिए, जैसा कि मैंने ऊपर बताया है, ऐसा करें। यह वास्तव में आवश्यकता से अधिक जोड़ सकता है, लेकिन यह एक सुरक्षित विकल्प है।

7. (वैकल्पिक) यदि IMG भ्रष्ट नहीं है तो आसानी से परीक्षण करें।

डिस्क उपयोगिता में एक बार और जाएं, और पहले की तरह नई आईएमजी फ़ाइल खोलने का प्रयास करें। यदि यह माउंट करता है, तो आप नए (छोटे) आकार भी देख सकते हैं । यदि यह माउंट नहीं है, तो कुछ गलत हो गया। (शायद truncateकमांड में आकार बढ़ाने की कोशिश करें )

यह सबसे अच्छा परीक्षण नहीं है, लेकिन यह जांचने का एक निश्चित तरीका है कि नया आईएमजी भ्रष्ट है या नहीं। तो, वास्तव में इस पर भरोसा नहीं है, लेकिन यह कोशिश के लायक है ...

मुझे आशा है कि किसी को यह उपयोगी लगता है!


1
अच्छा है! ज्ञान के विस्तार के लिए धन्यवाद :) अच्छा है कि आपने बताया कि 512*(Size+1)काम नहीं करता है। जैसा कि आप देख सकते हैं, मैंने इस्तेमाल किया Endऔर नहीं Size, क्योंकि आपको एक से अधिक होने पर दोनों विभाजन रखने होंगे। तो, 7553024 + 131072( +1) 100% सही है!
निप्पी

1

हाल ही में Win32DiskImager के पास केवल डिस्क छवि में आवंटित विभाजन को शामिल करने का एक विकल्प है। यह एक क्लिक में ट्रिमिंग करेगा।

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


उत्कृष्ट, यह विंडोज पर बहुत आसान बनाता है!
निप्पे

0

जैसा कि मैंने हाल ही में देखा है कि मैं तैनाती के लिए अपनी आरपीआई छवियों का समर्थन करने के लिए इस Win32diskimg संचालन का एक बहुत कुछ करता हूं। मैं हाल ही में परीक्षण शुरू कर रहा हूं SD "ट्रिमिंग" फ़्रास्टिम को एसडी कार्ड के कुछ हिस्सों को साफ करने के लिए सैद्धांतिक पहनने के लिए उपयोग में नहीं। उस प्रभाव के बारे में निश्चित नहीं है, लेकिन एक पक्ष प्रभाव तब था जब मैंने 16 जीबी एसडी विभाजन की नकल की थी और फिर इसे संपीड़ित करने के लिए 7zip का उपयोग किया था। मैं सामान्य 16GB से 9.5GB अब एक 2.5GB फ़ाइल में चला गया। मैं यह सुनिश्चित करने के लिए अभी परीक्षण कर रहा हूं कि कुछ भी गलत नहीं है, लेकिन ऐसा प्रतीत होता है कि अप्रयुक्त स्थान को 0 के रूप में चिह्नित करने के लिए TRIM का उपयोग करना छवि संपीड़न को और अधिक कुशल बनाता है (जो कि समझ में आता है)। बस इस पर रिपोर्ट करना चाहता था सुपर आसान करने के लिए और कई कदम नहीं था।


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