Linux dd 遇到 容量不足 的 resize 解法

SD 記憶卡的品牌不同, 容量多少也會有些差異, 於 dd 要將容量小的塞到大的沒問題, 但是大的塞到小的就肯定行不通, 此篇的作法可能會有資料流失的風險, 使用起來請自行注意~

  • 註1: 我是因為記憶卡後面的空間大多都沒用到(16G 大概有 12G 都還沒用到, 所以後面遺失的空間不會有差別)
  • 註2: 這個只適用在容量差異不大的狀況 (16G vs 16G), 容量差異太大, resize 也沒有任何意義~
  • 註3: 除了 resize 外的解法, 如果有 dd 前的原始 SD Card, 可以考慮把作業系統整個 tar 過去 或 cp -a 來製作.

先講講 dd 備份 和 還原, 下面再來紀錄容量不足的解法.

  • 備份: sudo dd bs=4M if=/dev/sdc | gzip > /tmp/backup.gz # bs=4M 跑起來比較快, 另外硬碟容量不夠用, 所以備份順便丟入壓縮.
  • 還原: sudo gzip -dc /tmp/backup.gz | dd of=/dev/sdc # 這邊 bs=4M 不要加, 容量不夠的話, 會遺失更多資料. (註: bs(預設 4k) 不加, 會跑很久)
  • 相關參考: 使用 dd 來 備份 / 還原 SD 卡的作業系統

Linux dd 遇到 容量不足 的 resize 解法

將已經製作完成的 image 檔, 寫到新的記憶卡, 出現下述訊息:

  • sudo gzip -dc /tmp/backup.gz | dd of=/dev/sdc

    dd: 正在寫入 ‘/dev/sdc’: 裝置上已無多餘空間

resize 步驟

出現此錯誤後, 記憶卡是無法 mount 起來的, 所以就需要靠 resize2fs 來幫忙, 但是使用 resize2fs 前, 需要先作 e2fsck, 修正 inodes, 步驟如下:

  1. sudo e2fsck -f /dev/sdc2 # 會出現下述訊息, 第一個選項要回答 n(告訴你可能會爛掉, 按 y 放棄執行, 按 n 是請他不要管, 開始修就對了), 後面就都回答 y 就好.

    e2fsck 1.42.5 (29-Jul-2012)
    The filesystem size (according to the superblock) is 3874176 blocks
    The physical size of the device is 3822592 blocks
    Either the superblock or the partition table is likely to be corrupt!
    Abort<y>? no
    Pass 1: Checking inodes, blocks, and sizes
    Inodes that were part of a corrupted orphan linked list found.  Fix<y>? yes
    Inode 166 was part of the orphaned inode list.  FIXED.

  2. sudo resize2fs /dev/sdc2 # 修好後就可以作 resize 了.
  3. 註: /dev/sdc2 是我最後一個磁區, 容量不夠會有問題都是出在最後面, 理論上修復最後一個磁區就可以了.
  4. sudo mount /dev/sdc2 /media/cdrom # 再來隨便 mount 看看, 確認資料有沒有遺失即可.

相關網頁


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix 並標籤為 , , 。將永久鏈結加入書籤。

發表迴響

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