Gambar SD tidak muat di Kartu SD

13

Saya memiliki satu pi diatur dan berjalan baik untuk sementara waktu (RPi - 1). Saya ingin membuat gambar RPi - 1 sehingga saya dapat memuat salinan persis ke pi 2 saya (RPi - 2). Kartu SD dalam RPi - 1 adalah 4GB (hanya sekitar setengah yang digunakan) dan kartu SD dalam RPi - 2 juga 4GB. Saya menggunakan Win32 Disk Imager untuk berhasil membuat salinan RPi - 1. Saya kemudian memformat kartu SD untuk RPi - 2 dengan SD Formatter 4.0 (pada Windows 7). Namun, ketika saya menggunakan Win32 Disk Imager untuk menulis RPi - 1 gambar ke RPi - 2's SD card saya mendapatkan: "Tidak cukup ruang pada disk: Ukuran 7744512 Tersedia: 7626752 sektor Ukuran sektor: 512"

Saya tahu ini bukan gambar yang buruk karena saya dapat memformat kartu SD untuk RPi - 1 dan menulis gambar kembali ke sana tanpa masalah.

Apa yang kulewatkan di sini? Tidak semua kartu SD 4GB memiliki ukuran yang sama atau sedikit berbeda? Apakah ada sesuatu yang perlu Anda lakukan untuk kartu SD baru yang saya lewatkan?

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

Rob_IGS
sumber
2
tidak ada dua kartu SD dengan ukuran yang sama, kecuali mereka berasal dari pabrikan yang sama, merek yang sama dan dari batch produksi yang sama. Anda TIDAK boleh menggunakan gambar kartu SD untuk tujuan cadangan, tetapi salin file sebagai gantinya.
lenik
Berapa banyak ruang yang dikatakan komputer Anda pada kartu kosong?
Beta Decay

Jawaban:

6

Memang tidak semua kartu SD memiliki ukuran persis sama. Anda harus mengecilkan partisi agar pas di SD yang lebih kecil. Saya sendiri punya masalah serupa. Apa yang saya lakukan adalah memiliki SD terpisah dengan (dalam kasus saya) Raspbian. Dan saya mencolokkan di SD saya saya ingin mengubah ukuran, menggunakan pembaca kartu USB.

Sebelum Anda dapat dengan mudah menyusutkan partisi Anda, Anda perlu memastikan tidak ada data yang ada di akhir Anda menghapus. Anda dapat melakukannya dengan resize2fs -M -p /dev/sda2(Anda harus mengganti / dev / sda2 dengan jalur yang benar ke pembaca kartu USB dan partisi linux yang ingin Anda ubah ukurannya). Ini akan mengubah ukuran sistem file ke ukuran sekecil mungkin. Anda sebenarnya dapat menentukan ukuran persis yang Anda inginkan, tetapi itu melibatkan beberapa matematika dan mengubah ukuran menjadi blocksize dan sektor dan apa yang tidak. Lebih aman dan lebih mudah untuk tidak melakukan ini.

Setelah itu kamu bisa mengecilkan partion. Saya pikir saya digunakan fdiskuntuk ini. Dapatkan posisi awal yang tepat dari partion, hapus dan buat ulang menggunakan posisi awal yang sama, tetapi dengan ukuran yang lebih kecil.

Terakhir Anda perlu memperbesar sistem file lagi untuk menempati seluruh partisi menggunakan resize2fs -p /dev/sda2

Gerben
sumber
Saya hanya ingin mengklarifikasi jawaban ini sedikit karena saya merasa agak sulit untuk diikuti. Saya pertama kali melepas partisi pada kartu SD. Kemudian saya harus menjalankan e2fsck -f /dev/mmcblk0p2(saya menyusutkan partisi kedua mmcblk0) untuk memeriksa konsistensi. Kemudian saya diizinkan untuk berlari resize2fs -M -p /dev/mmcblk0p2seperti yang disarankan.
audiFanatic
1

Anda akan lebih baik membuat tarball dari sistem file, karena ketika Anda membuat gambar disk penuh, Anda juga menyalin data yang dihapus. Ketika Anda menghapus file, inode tidak terhubung tetapi data aktual masih pada disk. Disk image penuh menggunakan ddakan menyalin data lama itu (kecuali jika Anda pertama kali menimpanya /dev/zero, yang membutuhkan waktu) tetapi menggunakan cadangan tarhanya akan menyalin data saat ini.

Atau ... Anda bisa melakukannya seperti banyak distribusi: kurangi ukuran sistem file Anda menjadi sesuatu yang aman seperti 1,9 GiB sebelum Anda membuat gambar, dan ubah ukuran untuk mengisi disk setelah Anda memulihkan cadangan.

Peringatan: Saya tidak terbiasa dengan alat pencitraan Windows, saya adalah pengguna Linux.

Amedee Van Gasse
sumber
1

jika Anda menggunakan linux, berikut ini sedikit skrip:

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

credit: Sirlagz (soooo sorry!)

Gilles Grandguillaume
sumber
4
apakah Anda akan dengan baik hati menjelaskan apa yang seharusnya dilakukan skrip ini? bagaimana saya bisa menentukan ukuran gambar yang diperlukan, dengan telepati?
lenik
skrip kecilkan img, ambil ukuran bekas, tambahkan 200000 untuk mengakhiri (untuk log dll), setelah boot dengan img ini Anda perlu memperbesar agar pas dengan ukuran kartu SD baru ...
Gilles Grandguillaume
Hai, saya menulis skrip ini jadi jangan ragu untuk menjawab pertanyaan saya di blog saya: sirlagz.net - Skrip ini harus dijalankan di Linux. Script akan memperkecil ukuran gambar ke ukuran minimum yang mungkin, ditambah sedikit ruang kosong. Ini memungkinkan Anda untuk meletakkan gambar 8 gb (yang hanya digunakan 1gb) ke kartu 1gb.
Lawrence
harus menggunakan "partstart = echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2) - 1) } '" untuk menghilangkan B di partstart.
netawater
@netawater saya memiliki hasil berbeda untuk perintah ini dengan kubuntu / debian: sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/… ... saya menggunakan skrip ini tanpa "-1" dengan sukses ! Saya tidak mengerti.
Gilles Grandguillaume