Linux dd SD卡 容量不足 使用磁區重新分割法

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, 下面成功的作法基本上部份參考自此作法.

  1. sudo losetup /dev/loop0 ./image.img
  2. sudo fdisk -l /dev/loop0
  3. sudo fdisk /dev/loop0
  4. p d 2 n p 2 122880 enter p
  5. sudo losetup -d /dev/loop0
  6. sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
  7. sudo e2fsck -f /dev/loop0
  8. sudo resize2fs /dev/loop0
  9. sudo losetup -d /dev/loop0

下述是我成功完成 resize + 正常開機使用, 一切正常運作的操作紀錄:

# 註: 下面砍掉分割區、重建分割區, 是不會影響到資料的
# (分割區設定是在硬碟磁軌的前面, 那邊跟資料是無關的(當然分割區切到資料還是會炸掉))

  1. sudo losetup -f --show image.img
  2. sudo fdisk -l /dev/loop0

    所用裝置 開機      開始         結束      區塊   識別號  系統/dev/loop0p1            8192      122879       57344    c  W95 FAT32 (LBA)/dev/loop0p2          122880     5785599     2831360   83  Linux

  3. sudo fdisk /dev/loop0 # 把第二個分割區砍掉在重新建立
  4. p
  5. d # 砍掉
  6. 2 # 砍掉第二個分割區
  7. n # 新建分割區
  8. p
  9. 2 # 新建第二分割區
  10. 122880 # fdisk 會寫 SD card 最後位置可以設到哪裡, 寫最後的就對了
  11. enter
  12. p
  13. sudo fdisk -l /dev/loop0
  14. sudo dd if=image.img of=/dev/mmcblk0

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料