एसडी छवि एसडी कार्ड पर फिट नहीं होगी


13

मैंने एक पीआई सेट किया है और थोड़ी देर के लिए अच्छा चल रहा है (आरपीआई - 1)। मैं आरपीआई की छवि बनाना चाहता था - 1 ताकि मैं अपने 2 पीआई (आरपीआई - 2) पर एक सटीक प्रतिलिपि लोड कर सकूं। आरपीआई में एसडी कार्ड - १ ४ जीबी है (लगभग आधा ही वास्तव में उपयोग किया जाता है) और आरपीआई में एसडी कार्ड - २ भी ४ जीबी है। मैं RP32 की प्रतिलिपि बनाने के लिए Win32 डिस्क इमेजर का उपयोग करता हूं - 1, सफलतापूर्वक। मैंने तब आरपी - 2 के लिए एसडी फॉर्मैट 4.0 (विंडोज 7 पर) के साथ एसडी कार्ड तैयार किया। हालाँकि, जब मैं RP32 लिखने के लिए Win32 डिस्क इमेजर का उपयोग करता हूं - RPi पर 1 छवि - 2 का एसडी कार्ड मुझे मिलता है: "डिस्क पर पर्याप्त स्थान नहीं: आकार 7744512 उपलब्ध: 7626752 सेक्टरों का आकार: 512"

मुझे पता है कि इसकी एक खराब छवि नहीं है क्योंकि मैं आरपीआई - 1 के लिए एसडी कार्ड को प्रारूपित कर सकता हूं और छवि को वापस लिख सकता हूं कोई समस्या नहीं है।

मुझे यहां क्या समझ नहीं आ रहा है? क्या सभी 4GB SD कार्ड एक ही आकार के नहीं हैं या क्या वे थोड़े भिन्न हैं? क्या आपको कुछ नया एसडी कार्ड बनाने की ज़रूरत है जो मुझे याद है?

(आरपीआई - १ एसडी कार्ड = सैंडिस्क ४ जीबी // आरपीआई - २ एसडी कार्ड = किंग्स्टन ४ जीबी)


2
जब तक वे एक ही निर्माता, एक ही ब्रांड और एक ही उत्पादन बैच से नहीं आते हैं, तब तक समान आकार के साथ कोई दो एसडी कार्ड नहीं हैं। आपको बैकअप उद्देश्य के लिए एसडी कार्ड छवि का उपयोग नहीं करना चाहिए, लेकिन इसके बजाय फ़ाइलों की प्रतिलिपि बनाएँ ।
lenik

खाली कार्ड पर आपके कंप्यूटर का कितना स्थान है?
बीटा क्षय

जवाबों:


6

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

इससे पहले कि आप सुरक्षित रूप से आपको विभाजन को हटा सकें, आपको यह सुनिश्चित करने की आवश्यकता है कि आपके द्वारा हटाए जा रहे अंत में कोई डेटा मौजूद नहीं है। आप इसके साथ कर सकते हैं resize2fs -M -p /dev/sda2(आपको USB-कार्ड रीडर और जिस लाइनक्स पार्टीशन का आप आकार बदलना चाहते हैं, उसके सही रास्ते के साथ / dev / sda2 को स्थानापन्न करना होगा)। यह संभव छोटे आकार के लिए फाइल सिस्टम का आकार बदल देगा। आप वास्तव में अपने इच्छित आकार को निर्दिष्ट कर सकते हैं, लेकिन इसमें कुछ गणित और आकार बदलने के लिए ब्लॉक और सेक्टर शामिल हैं और क्या नहीं। सुरक्षित और ऐसा नहीं करने के लिए आसान।

उसके बाद आप पार्टीशन को सिकोड़ सकते हैं। मुझे लगता है कि मैंने इसके fdiskलिए इस्तेमाल किया । विभाजन की सटीक शुरुआत स्थिति प्राप्त करें, इसे एक ही प्रारंभ स्थिति का उपयोग करके इसे फिर से बनाएं, लेकिन एक छोटे आकार के साथ।

अंत में आपको संपूर्ण विभाजन का उपयोग करने के लिए फाइल सिस्टम को फिर से बढ़ाना होगा resize2fs -p /dev/sda2


मैं बस इस उत्तर को थोड़ा स्पष्ट करना चाहता हूं क्योंकि मुझे यह एक कठिन अनुसरण करना मुश्किल लगा। मैंने सबसे पहले एसडी कार्ड में विभाजन को अनमाउंट किया। तब मुझे दौड़ना पड़ा था e2fsck -f /dev/mmcblk0p2(मैं mmcblk0 के दूसरे विभाजन को कम कर रहा हूं) निरंतरता की जांच करने के लिए। फिर मुझे resize2fs -M -p /dev/mmcblk0p2सुझाव के अनुसार चलने दिया गया।
ऑडीफैनेटिक


1

आप फ़ाइल सिस्टम का एक टैरबॉल बनाना बेहतर होगा, क्योंकि जब आप एक पूर्ण डिस्क छवि बनाते हैं, तो आप हटाए गए डेटा की प्रतिलिपि भी बनाते हैं। जब आप किसी फ़ाइल को हटाते हैं, तो इनकोड अनलिंक हो जाता है, लेकिन वास्तविक डेटा अभी भी डिस्क पर है। एक पूर्ण डिस्क छवि का उपयोग करके ddउस पुराने डेटा की प्रतिलिपि बनाई जाएगी (यदि आप पहले इसे ओवरराइट करते हैं /dev/zero, जिसमें कुछ समय लगता है) लेकिन बैकअप का उपयोग करके tarकेवल वर्तमान डेटा की प्रतिलिपि बनाई जाएगी।

या ... आप ऐसा कर सकते हैं जैसे कई वितरण करते हैं: अपनी छवि बनाने से पहले अपने फाइल सिस्टम का आकार 1.9 GiB की तरह सुरक्षित रखें और बैकअप को पुनर्स्थापित करने के बाद डिस्क को भरने के लिए आकार बदलें।

कैविएट: मैं विंडोज इमेजिंग टूल से परिचित नहीं हूं, मैं एक लिनक्स उपयोगकर्ता हूं।


1

यदि आप लिनक्स का उपयोग करते हैं, तो यहां थोड़ी स्क्रिप्ट है:

#!/bin/bash
# Automatic Image file resizer
# Written by SirLagz
strImgFile=$1

export PATH=$PATH:/sbin

if [[ ! $(whoami) =~ "root" ]]; then
echo ""
echo "**********************************"
echo "*** This should be run as root ***"
echo "**********************************"
echo ""
exit
fi

if [[ -z $1 ]]; then
echo "Usage: ./autosizer.sh <Image File>"
exit
fi

if [[ ! -e $1 || ! $(file $1) =~ "x86" ]]; then
echo "Error : Not an image file, or file doesn't exist"
exit
fi

partinfo=`parted -ms $1 unit B p | awk '{if (NR!=2) {print}}'`  
fileSystemType=`echo "$partinfo" | grep -o 'ext4\|ext3'`
numberOfMatchPart=`echo "$fileSystemType" | wc -l`

if [[ $fileSystemType == "" || $numberOfMatchPart -eq 0 || $numberOfMatchPart -gt 1 ]] ; then
echo "Error : Your partition layout is not currently supported by this tool."
exit
fi

partnumber=`echo "$partinfo" | grep $fileSystemType | awk -F: ' { print $1 } '`
partstart=`echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2)) } '`
loopback=`losetup -f --show -o $partstart $1`

e2fsck -f $loopback

minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
minsize=`echo $minsize+200000 | bc`

resize2fs -p $loopback $minsize
sleep 1
losetup -d $loopback

partnewsize=`echo "$minsize * 4096" | bc`
newpartend=`echo "$partstart + $partnewsize" | bc`

parted $1 rm $partnumber
parted $1 unit B mkpart primary $partstart $newpartend
endresult=`parted -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)) } '`
truncate -s $endresult $1

श्रेय: सरलागज़ (सॉरी सॉरी!)


4
क्या आप इस तरह की व्याख्या करना चाहेंगे कि यह स्क्रिप्ट क्या करने वाली है? टेलीपैथी द्वारा मैं आवश्यक छवि आकार कैसे निर्दिष्ट कर सकता हूं?
lenik

स्क्रिप्ट एक img का आकार घटाती है, प्रयुक्त आकार लेती है, 200000 को समाप्त करने के लिए (लॉग आदि के लिए) जोड़ें, इस img के साथ एक बूट के बाद आपको नए एसडी कार्ड के आकार को फिट करने के लिए विस्तार करने की आवश्यकता है ...
गाइल्स ग्रैंडगुइल

नमस्ते, मैंने यह स्क्रिप्ट लिखी है इसलिए मुझे अपने ब्लॉग पर किसी भी प्रश्न को शूट करने के लिए स्वतंत्र महसूस हो रहा है: sirlagz.net - इस स्क्रिप्ट को लिनक्स पर चलाने की आवश्यकता है। स्क्रिप्ट छवि को कम से कम आकार में संभव बनाएगी, साथ ही साथ थोड़ी जगह खाली कर देगी। यह आपको 1 जीबी कार्ड पर 8 जीबी की छवि (जिसमें से केवल 1 जीबी का उपयोग किया जाता है) डाल सकता है।
लॉरेंस

यह पार्ट पार्ट echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2) - 1) } 'में बी से छुटकारा पाने के लिए "पार्टस्टार्ट = " का उपयोग करना चाहिए ।
netawater

@netawater के पास kubuntu / debian: sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/… ... के साथ इस कमांड के लिए एक अलग परिणाम है । मैं इस स्क्रिप्ट का उपयोग "-1" के बिना सफलता के लिए करता हूं । ! मुझे समझ नहीं आया
गाइल्स ग्रैंडगुइल्यूम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.