SDカードは同じ型番のものでも、個々でサイズが微妙に異なるようです。
pi 3 – Win32diskImager “Not enough space on disk Size: 62652416 sectors. Available: 62333952” – Raspberry Pi Stack Exchange
この容量違いが問題になるのが、SDカードのバックアップと復元です。
復元時のSDカードの容量が小さいと、復元が失敗してしまい、大問題です。
先日、この問題にあたりました。
RaspberryPI で使用しているSDカードをイメージファイルとしてバックアップしていました。
SDカードが壊れたので、同じSDカードを買ってリストアしようとしたら、容量が足りないとのエラーで失敗しました。
型番も同じSDカードだったのですが・・
さて、復元できないのは非常に困ります。
幸い、下記サイトに対応方法がありました。
バックアップしていたイメージファイルのパーティションサイズを小さくする方法です。
[RaspberryPi]ディスクイメージを縮小する | BYLOMEDIA
「fdisk でパーティションサイズを変更する」の個所で、Ubuntu16では表示が若干異なりましたので、下記に実行例を記載します。
まず、バックアップイメージの構成を確認します。
なお、下記 /dev/loop0p2 の始点、終点の値は、後の手順で参照します。
# fdisk /dev/loop0 コマンド (m でヘルプ): p Disk /dev/loop0: 16.1 GB, 16088301568 bytes ヘッド 255, セクタ 63, シリンダ 1955, 合計 31422464 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x3e7fd08e デバイス ブート 始点 終点 ブロック Id システム /dev/loop0p1 8192 131071 61440 c W95 FAT32 (LBA) /dev/loop0p2 <strong>131072</strong> <strong> 31422463</strong> 15645696 83 Linux
/dev/loop0p2 を削除します。
削除といっても、この後の手順で /dev/loop0p2 のサイズを設定し直すので、データ自体は消えません。
コマンド (m でヘルプ): d パーティション番号 (1-4): 2
サイズを設定し直して /dev/loop0p2 を作成します。
開始セクタには、先の /dev/loop0p2 の始点を入力します。
Last セクタには、先の終点を入力します。
なお、下記手順中、作成するパーティションのセクタ数が偶数個になるように、Last セクタを指定したほうがいいです。
開始セクタの値が奇数なら、Lastセクタは偶数にします。
開始セクタが偶数なら、Lastセクタは奇数にします。
この例では、開始セクタが偶数(131072)なので、Lastセクタは奇数(31225849)にしています。
コマンド (m でヘルプ): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p パーティション番号 (1-4, 初期値 2): 2 開始 セクタ (2048-31422463, 初期値 2048): <strong>131072</strong> Last セクタ, +セクタ数 or +size{K,M,G} (131072-31422463, 初期値 31422463): <strong>31225849</strong>
/dev/loop0p2 が作成されたか確認します。
コマンド (m でヘルプ): p Disk /dev/loop0: 16.1 GB, 16088301568 bytes ヘッド 255, セクタ 63, シリンダ 1955, 合計 31422464 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x3e7fd08e デバイス ブート 始点 終点 ブロック Id システム /dev/loop0p1 8192 131071 61440 c W95 FAT32 (LBA) /dev/loop0p2 131072 31225849 15547389 83 Linux
変更を適用します。
コマンド (m でヘルプ): w パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 警告: パーティションテーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。 カーネルはまだ古いテーブルを使っています。新しいテーブルは 次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に 使えるようになるでしょう ディスクを同期しています。
後は、[RaspberryPi]ディスクイメージを縮小する | BYLOMEDIA の「kpartx でパーティションをデバイスのように接続」から続けます。
コメント