SDイメージがSDカードに収まらない


13

しばらくの間、1つのpiをセットアップして正常に実行しました(RPi-1)。RPi-1のイメージを作成して、正確なコピーを2番目のpi(RPi-2)にロードできるようにしました。RPi-1のSDカードは4GB(実際には約半分しか使用されません)、RPi-2のSDカードも4GBです。Win32 Disk Imagerを使用して、RPi-1のコピーを正常に作成しました。次に、RPi-2用のSDカードをSD Formatter 4.0(Windows 7)でフォーマットしました。ただし、Win32 Disk Imagerを使用してRPi-1のイメージをRPi-2のSDカードに書き込むと、「ディスクの空き容量が不足しています:サイズ7744512使用可能:7626752セクターセクターサイズ:512」

RPi-1用にSDカードをフォーマットし、問題なくイメージを書き戻すことができるので、悪いイメージではないことを知っています。

ここに何が欠けていますか?4GB SDカードはすべて同じサイズではありませんか、それともわずかに異なりますか?私が見逃したブランドの新しいSDカードに何かする必要があることはありますか?

(RPi-1 SDカード= Sandisk 4GB // RPi-2 SDカード= Kingston 4GB)


2
同じメーカー、同じブランド、同じ生産バッチのものでない限り、同じサイズの2枚のSDカードはありません。バックアップのためにSDカードイメージを使用するのではなく、代わりにファイルをコピーする必要があります
レニック

空のカードには、コンピューターはどのくらいのスペースがあると言っていますか?
ベータ崩壊

回答:


6

実際、すべてのSDカードが同じ正確なサイズであるとは限りません。小さいSDに収まるようにパーティションを縮小する必要があります。私自身も同様の問題を抱えていました。私がしたことは、(私の場合は)Raspbianで別のSDを持つことでした。そして、USBカードリーダーを使用して、サイズを変更したいSDを接続しました。

パーティションを安全に縮小する前に、削除する最後にデータが存在しないことを確認する必要があります。これを行うことができますresize2fs -M -p /dev/sda2(/ dev / sda2を、サイズを変更するUSB​​カードリーダーとLinuxパーティションへの正しいパスに置き換える必要があります)。これにより、ファイルシステムのサイズが可能な限り小さいサイズに変更されます。実際に必要な正確なサイズを指定することもできますが、それにはいくつかの計算と、サイズのブロックサイズとセクターへの変換などが含まれます。これを行わない方が安全で簡単です。

その後、パーティションを縮小できます。fdiskこれに使ったと思う。パーティションの正確な開始位置を取得し、削除し、同じ開始位置を使用してサイズを小さくして再作成します。

最後に、ファイルシステムを再び拡大して、パーティション全体を占有する必要があります resize2fs -p /dev/sda2


この答えを少し明確にしたいのですが、従うのが少し難しいと感じました。まず、SDカードのパーティションをアンマウントしました。次にe2fsck -f /dev/mmcblk0p2、一貫性をチェックするために実行する必要がありました(mmcblk0の2番目のパーティションを縮小しています)。その後resize2fs -M -p /dev/mmcblk0p2、提案どおりに実行することが許可されました。
audiFanatic


1

完全なディスクイメージを作成すると、削除されたデータもコピーされるため、ファイルシステムのtarballを作成する方がよいでしょう。ファイルを削除すると、iノードはリンク解除されますが、実際のデータはまだディスク上にあります。フルディスクイメージを使用ddすると、古いデータがコピーされます(最初にで上書きする場合を除き、/dev/zero時間がかかります)が、バックアップを使用tarすると現在のデータのみがコピーされます。

または...多くのディストリビューションと同様に、画像を作成する前にファイルシステムのサイズを1.9 GiBのような安全なサイズに縮小し、バックアップを復元した後にディスクのサイズを変更することができます。

警告:私はWindowsイメージングツールに精通していません。Linuxユーザーです。


1

Linuxを使用している場合、ここに小さなスクリプトを示します。

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

クレジット:Sirlagz(すみません!)


4
このスクリプトが何をすべきかを説明してくれませんか?テレパシーで必要な画像サイズを指定するにはどうすればよいですか?
レニック

スクリプトIMGの小型化、使用済みのサイズを取る、あなたがフィットサイズに新しいSDカードを拡大する必要があり、このIMGでブートした後、(ログなどのために)終了する200000を追加...
ジルGrandguillaume

こんにちは、私はこのスクリプトを書いたので、ブログに質問があればお気軽に:sirlagz.net-このスクリプトはLinuxで実行する必要があります。このスクリプトは、可能な最小サイズに加えて、わずかなスラックスペースに画像を縮小します。これにより、8 GBの画像(そのうち1 GBのみが使用されます)を1 GBのカードに配置できます。
ローレンス14年

「partstart = echo "$partinfo" | grep $fileSystemType | awk -F: ' { print substr($2,0,length($2) - 1) } '」を使用して、partstartのBを削除する必要があります。
ネタウォーター

私はKubuntuの/ Debianので、このコマンドの異なる結果を持っている@netawater:sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/... ...私は成功を収めずに「-1」は、このスクリプトを使用します!分かりません。
ジルグランギヨーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.