SD Görüntü SD Karta sığmıyor


13

Bir pi kurmuş ve bir süredir iyi çalışıyor (RPi - 1). RPi - 1'in bir görüntüsünü oluşturmak istedim, böylece 2. pi'ye tam bir kopya yükleyebiliyorum (RPi - 2). RPi - 1'deki SD kart 4GB'dir (aslında sadece yarısı kullanılır) ve RPi - 2'deki SD kart da 4GB'dir. RPi - 1'in bir kopyasını başarıyla oluşturmak için Win32 Disk Imager'ı kullanıyorum. Daha sonra SD kartı SD Formatter 4.0 (Windows 7'de) ile RPi - 2 için biçimlendirdim. Ancak, RPi - 1 görüntüsünü RPi - 2'nin SD kartına yazmak için Win32 Disk Imager kullandığımda: "Diskte yeterli alan yok: Boyut 7744512 Kullanılabilir: 7626752 sektörler Sektör boyutu: 512"

Ben bunun kötü bir görüntü olmadığını biliyorum, çünkü RPi - 1 için SD kartını biçimlendirebilir ve görüntüyü ona geri yazabilirim.

Burada ne eksik? Tüm 4GB SD kartlar aynı boyutta değil mi veya biraz değişiyor mu? Kaçırdığım yeni bir SD karta yapmanız gereken bir şey var mı?

(RPi - 1 SD Kart = Sandisk 4GB // RPi - 2 SD Kart = Kingston 4GB)


2
aynı üreticiden, aynı markadan ve aynı üretim partisinden gelmedikçe, aynı boyutta iki SD kart yoktur. SD kart görüntüsünü yedekleme amacıyla KULLANMAMALIDIR, ancak dosyaları kopyalamalısınız .
lenik

Bilgisayarınız boş kartta ne kadar alan olduğunu söylüyor?
Beta Çürümesi

Yanıtlar:


6

Aslında tüm SD kartlar tam olarak aynı boyutta değildir. Daha küçük SD'ye sığması için bölümü daraltmanız gerekir. Ben de benzer bir sorun yaşadım. Yaptığım şey (benim durumumda) Raspbian ile ayrı bir SD olmasıydı. Ve bir USB kart okuyucu kullanarak yeniden boyutlandırmak istediğim SD'mi taktım.

Bölümünüzü güvenle küçültebilmeniz için, kaldırdığınız işlemin sonunda veri bulunmadığından emin olmanız gerekir. Bunu şu şekilde yapabilirsiniz resize2fs -M -p /dev/sda2(/ dev / sda2 yerine USB kart okuyucusunun ve yeniden boyutlandırmak istediğiniz linux bölümünün doğru yolu ile değiştirmeniz gerekir). Bu, dosya sistemini mümkün olan en küçük boyuta yeniden boyutlandıracaktır. Aslında tam olarak istediğiniz boyutu belirtebilirsiniz, ancak bazı matematik ve boyutları blok boyutlarına ve sektörlere dönüştürmeyi içerir. Bunu yapmak daha güvenli ve kolaydır.

Bundan sonra bölümü küçültebilirsiniz. Sanırım bunun fdiskiçin kullandım . Paritenin tam başlangıç ​​konumunu alın, aynı başlangıç ​​konumunu kullanarak, ancak daha küçük bir boyutla yeniden oluşturun.

Son olarak, tüm bölümü kaplamak için dosya sistemini tekrar büyütmeniz gerekir. resize2fs -p /dev/sda2


Takip etmeyi biraz zor bulduğum için bu cevabı biraz netleştirmek istiyorum. Önce SD karttaki bölümleri ayırdım. Sonra e2fsck -f /dev/mmcblk0p2tutarlılığı kontrol etmek için koşmak zorunda kaldım (mmcblk0'ın ikinci bölümünü küçültüyorum). Sonra resize2fs -M -p /dev/mmcblk0p2önerildiği gibi çalışmama izin verildi .
audiFanatic


1

Tam disk görüntüsü oluşturduğunuzda, silinen verileri de kopyalarsınız, çünkü dosya sisteminin bir tarball yapmak daha iyi olurdu. Bir dosyayı sildiğinizde, inode bağlantısı kaldırılmış ancak gerçek veriler hala diskte. Kullanarak tam disk görüntüsü ddeski verileri kopyalar (ilk önce üzerine yazmanız hariç /dev/zero, bu biraz zaman alır), ancak kullanılarak yapılan yedekleme taryalnızca geçerli verileri kopyalar.

Ya da ... birçok dağıtımın yaptığı gibi yapabilirsiniz: imajınızı yapmadan önce dosya sistemi boyutunuzu 1,9 GiB gibi güvenli bir şeye indirin ve yedeklemeyi geri yükledikten sonra diski doldurmak için yeniden boyutlandırın.

Dikkat: Windows görüntüleme araçlarına aşina değilim, Linux kullanıcısıyım.


1

linux kullanıyorsanız, burada küçük bir komut dosyası:

#!/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

kredi: Sirlagz (çok üzgünüm!)


4
bu senaryonun ne yapması gerektiğini açıklamak çok nazik misiniz? telepati ile gerekli görüntü boyutunu nasıl belirleyebilirim?
lenik

komut dosyası bir img küçültmek, kullanılan boyutu almak, bitirmek için 200000 ekleyin (günlük vb için), bu img ile bir önyükleme sonra yeni SD kart boyutuna sığacak şekilde büyütmeniz gerekir ...
Gilles Grandguillaume

Merhaba, bu betiği yazdım, bu yüzden blogumda herhangi bir soru çekmekten çekinmeyin : sirlagz.net - Bu betiğin Linux'ta çalıştırılması gerekiyor. Komut dosyası, görüntüyü mümkün olan en küçük boyuta ve biraz gevşek boşluğa küçültür. Bu, 1 gb karta 8 gb'lık bir görüntü (yalnızca 1 gb kullanılan) koymanıza olanak tanır.
Lawrence

partstart echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2) - 1) } 'içinde B'den kurtulmak için "partstart = " kullanmalıdır .
netawater

@netawater kubuntu / debian ile bu komut için farklı bir sonuç aldım : sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/… ... bu betiği "-1" olmadan başarıyla kullanıyorum ! anlamıyorum.
Gilles Grandguillaume
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.