Raspberry Pi 作業系統用 SD Card, 但是遇到 SD Card 損壞時, 要將原本製作好的 image 放到新的 SD Card, 雖然容量相同、品牌不同, 但是容量就會有差異, 於是作業系統 dd 進去就無法開機.
下述兩篇有寫 dd 和 之前遇過 resize 的解法
但是此次用上面 resize 的解法也修不好, 於是再來找其它解法.
Linux dd SD卡 容量不足 使用磁區重新分割法
dd 完成後, 插入電腦就應該要自動 mount 起來, 就出現下述錯誤訊息:
Error mounting /dev/mmcblk0p1 at /media/3865-6637: Command-line `mount -t "vfat" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush"
"/dev/mmcblk0p1" "/media/3865-6637"' exited with non-zero exit status 32: mount: /dev/mmcblk0p1: can't read superblock
於是就來修復此問題.
參考作法: 此作法忘記是哪邊找到的, 找不到出處了. orz, 下面成功的作法基本上部份參考自此作法.
- sudo losetup /dev/loop0 ./image.img
- sudo fdisk -l /dev/loop0
- sudo fdisk /dev/loop0
- p d 2 n p 2 122880 enter p
- sudo losetup -d /dev/loop0
- sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
- sudo e2fsck -f /dev/loop0
- sudo resize2fs /dev/loop0
- sudo losetup -d /dev/loop0
下述是我成功完成 resize + 正常開機使用, 一切正常運作的操作紀錄:
# 註: 下面砍掉分割區、重建分割區, 是不會影響到資料的
# (分割區設定是在硬碟磁軌的前面, 那邊跟資料是無關的(當然分割區切到資料還是會炸掉))
- sudo losetup -f --show image.img
- sudo fdisk -l /dev/loop0
所用裝置 開機 開始 結束 區塊 識別號 系統/dev/loop0p1 8192 122879 57344 c W95 FAT32 (LBA)/dev/loop0p2 122880 5785599 2831360 83 Linux
- sudo fdisk /dev/loop0 # 把第二個分割區砍掉在重新建立
- p
- d # 砍掉
- 2 # 砍掉第二個分割區
- n # 新建分割區
- p
- 2 # 新建第二分割區
- 122880 # fdisk 會寫 SD card 最後位置可以設到哪裡, 寫最後的就對了
- enter
- p
- sudo fdisk -l /dev/loop0
- sudo dd if=image.img of=/dev/mmcblk0
相關網頁
- How To : Resize Partitions in an Image File » The Rantings and Ravings of a Madman
- Raspberry Pi • View topic - SD image too big for another SD Card
- setup - Resize image file before writing to SD card - Raspberry Pi Stack Exchange # 試過這個, 感覺應該是可行的, 不過卻失敗~ 原因沒去研究
- dd if=/dev/zero of=/path/to/temp_image bs=1 count=1 seek=5G
- cat /path/to/temp_image >> /path/to/rasperrypi.img
- resize2fs -f /path/to/rasperrypi.img