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
相關網頁
相關
作者: Tsung
對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.檢視「Tsung」的全部文章