新!「文章導讀」頁上線!有系統、完整瀏覽本站文章!

2013年1月17日

燒錄 Raspberry Pi 的 SD 卡(3/4):使用 Mac OS X 系統

如果您的電腦使用 MacOS X,恭喜您!您不需要額外軟體,就能將 Raspbian 映像檔燒錄到 SD 卡上。只要開啟 MacOS X 上的「終端機Terminal)」,就可以透過「dd」這個指令來燒錄映像檔。詳細步驟如下:
 
  1. 打開一個「終端機(Terminal)」視窗。如果您找不到「終端機」視窗在哪裡,可以點選右上角的「Spotlight」(放大鏡圖示),輸入「終端機」或「Terminal」,都可以找到。
  2. 將空白的 SD 卡放入 MacOS X 的讀卡機中。如果您的 Mac 沒有 SD 讀卡機,可以購買一個「SD 轉 USB」的轉接器,即可將 SD 卡經過轉換後,直接插入 Mac 的 USB 槽中。
  3. 接著輸出「diskutil list」指令,列出該部電腦內的所有儲存設備。
  4. 請在列出來的清單找找看,有沒有磁碟大小與您的 SD 卡相符的?假設您的 SD 卡是 8GB,那就找找看有沒有接近 8GB 的儲存裝置?
  5. 記下 SD 卡在 MacOS X 中設備檔的代表路徑。看起來應該像是「/dev/diskX」(X = 0, 1, 2, 3…)。假設您的 SD 卡設備檔代表路徑是「/dev/disk3」,記下它,接著做下一步。
  6. 用「cd」指令,切換當前路徑至包含 .img 映像檔所在地。用「ls」觀看映像檔全名,假設您的映像檔名稱為「2012-12-16-wheezy-raspbian.img」。記下它,接著做下一步。
  7. 輸入

    sudo dd if=2012-12-16-wheezy-raspbian.img of=/dev/disk3 bs=2M
    開始將映像檔燒錄到 SD 卡。其中的「if」,是「Input File」的縮寫。「of」是「Output File」的縮寫。「bs」是「Block Size」的縮寫。
  8. 等待一會兒,您的 SD 卡燒錄完畢,就可以直接使用了。

22 則留言:

  1. 紀大哥你好 我依照你的步驟做下來 下cd指令
    到包括我載的2012-08-08-wheezy-armel.img的路徑之後
    然後在下ls指令看到我的sd卡裝置位置在/dev/disk1
    最後下這個指令
    sudo dd if=2012-08-08-wheezy-armel.img of=/dev/disk1 bs=2M
    電腦叫我輸入完密碼後按enter會出現dd: bs: illegal numeric value
    請問這該怎麼解決??
    ps:我的作業系統是osx 10.8.3

    回覆刪除
    回覆
    1. 我上網查過,某些 SD 卡接受的 bs(Block Size)單位必須是小寫(某些則是大寫)。所以你試試看把指令改成:

      sudo dd if=2012-08-08-wheezy-armel.img of=/dev/disk1 bs=2m

      請注意最後的 bs=2m 不再是 bs=2M。

      如果還不行麻煩您再提供錯誤訊息給我。

      刪除
  2. dd: /dev/disk1: Resource busy
    輸入完
    跳這個怎麼處理?

    回覆刪除
    回覆
    1. 您可以把「diskutil list」指令的輸出,跟:
      「sudo dd if=2012-08-08-wheezy-armel.img of=/dev/disk1 bs=2m」
      這個指令的輸入貼給我嗎?

      (其中 2012-08-08-wheezy-armel.img 需與您下載下來的 Raspbian 檔名相同,不能照抄我的。而 /dev/disk1 也得看您輸入 diskutil list 後,SD 卡的真實名稱而定,也不能照抄我的)

      刪除
    2. 你好,我也遇到一樣的狀況。
      -----------------------------------------------------------
      yvette:Desktop yvette$ diskutil list
      /dev/disk0
      #: TYPE NAME SIZE IDENTIFIER
      0: GUID_partition_scheme *320.1 GB disk0
      1: EFI EFI 209.7 MB disk0s1
      2: Apple_HFS Macintosh HD 319.2 GB disk0s2
      3: Apple_Boot Recovery HD 650.0 MB disk0s3
      /dev/disk1
      #: TYPE NAME SIZE IDENTIFIER
      0: FDisk_partition_scheme *15.7 GB disk1
      1: Windows_FAT_32 NO NAME 15.7 GB disk1s1
      yvette:Desktop yvette$ sudo dd if=2014-06-20-wheezy-raspbian.img of=/dev/disk1 bs=2m
      dd: /dev/disk1: Resource busy
      -----------------------------------------------------
      請指正,謝謝

      刪除
    3. 您好:

      您可以試試看把 SD 所在的 /dev/disk1 先 unmount 掉,像這樣:

      diskutil unmountDisk /dev/disk1

      然後再做一次,應該就不會有「Resource busy」的錯誤訊息了。完整的動作建議如下:

      (1) 先變成 Super User(這步不做也可以,就得在下列每個指令前添加 sudo):
      su

      (2) 先卸除 SD 讀卡機的掛載(由您提供的 diskutil list 已知,SD 讀卡機在 /dev/disk1):
      diskutil unmountDisk /dev/disk1

      如果成功的話,您會看到下列的成功訊息:
      Unmount of all volumes on diskN was successful

      (3) 將映象檔寫入:
      dd if=2014-06-20-wheezy-raspbian.img of=/dev/disk1 bs=2m

      如果還不行,那就再來信研究看看。

      刪除
  3. 想請問一下,在mac下燒錄SD,速度會不會很慢??
    我用的是air(2012年版的),燒錄速度卻只有2mb/sec
    安裝2GB左右的wheezy-raspbian.img
    卻要花費900秒以上
    但是同樣的SD卡,在Windows上用Win32DiskImager燒錄,
    卻可以跑到10mb/sec的速度,
    不知這是怎麼了??
    謝謝。

    回覆刪除
    回覆
    1. 我個人雖然沒有測量 SD 卡在 Mac 上的燒錄速度,不過我個人覺得不會很慢耶。 我的Mac是2011年版的MacBook Pro(8GB RAM)就是了。

      刪除
  4. 要先 umount 掉~,我找到的答案!

    回覆刪除
    回覆
    1. 回報一下:
      執行 dd之前得先umount SD,我不會指令,所以用Disk Utilities來 umount~

      在Mac裡2M可能必需是小寫才不會出現 dd: bs: illegal numeric value

      刪除
  5. Hi,作者您好,我想請問為什麼要先umount ?

    回覆刪除
    回覆
    1. 您好:

      其實「先 unmount」這回事並非人人得做。正常情況下是不用先 unmount 就能存取剛插入的 SD 卡的。但因為 SD 卡裡面的儲存媒體,是可抽換、可改變的。有的時候系統會緊緊抓著上一次插入的 SD 卡媒體資料不放,當嘗試讀取您現在插入的 SD 卡時,就會告訴您「SD 讀取槽正在忙碌中」之類的訊息。此時如果先 unmount 掉一次,重新要求系統再 mount,比較有可能讀取得到新 SD 卡的內容。這跟當機之後重新開機,系統就會恢復正常的的動作是差不多的。

      刪除
    2. 作者已經移除這則留言。

      刪除
  6. 您好,
    我原本用8GB的SD卡,如果將這一份8GB的映像檔燒錄到16GB的SD卡會有問題嗎?還是有其他複製的方式呢?謝謝

    Sincerely,
    Alice

    回覆刪除
    回覆
    1. 您好:

      如果使用 16GB 的 SD 卡,只要重新到官網下載最新版的 Raspbian 作業系統,用類似的指令(dd)燒錄就可以了。

      如果您說的是把原本燒錄在 8GB SD 卡上、且用了一陣子的 Raspbian,想把這 8GB 內的所有檔案重新打包(也就是說,不使用從官方下載的 Raspbian 映像檔,而採用自行打包的原 8GB SD 映像檔),然後改燒在 16GB SD 卡,希望藉由這種方法,達到使用新 16GB SD 卡時,能保留原先 8GB SD 卡上的舊設定。我覺得應該沒問題。不過我手頭上沒有 8GB 與 16GB 的 SD 卡可以試,只能用我所知的 dd 指令原理「想當然耳」而已。

      如果把「舊 8GB」打包壓成映像檔,然後重燒在「新 16GB」上行不通,只能直接從官網下載原始的 Raspbian 映像檔 + 手工把舊設定重新套用上去了。您試試看,希望能夠成功!

      刪除
    2. 您好,

      謝謝您的回覆!
      我使用映像檔燒錄和dd的方式把8GB的系統搬到16GB的SD卡上,都顯示只有抓到8GB。後來發現了神奇的指令sudo raspi-config,選擇Expand Filesystem後reboot系統就會自動fit size囉!:D

      刪除
    3. 喔!那真是太好了!我剛剛去看了一下 raspi-config 的 Expand Filesystem 選項的說明。由於我沒有你這樣的需求,所以之前沒有特別注意這個選項。學到一招了!謝謝!

      刪除
  7. 請問如果沒有指定bs的話,會怎樣?我看有人寫說要指定這個block size為1M,有人說2M,有人說32M?感謝!

    回覆刪除
    回覆
    1. 我沒試過不指定 bs。不過就上方「LH2015/7/16 下午3:56」的回覆,把當初指定成 bs=8GB,搬到 bs=16GB 上,一開始會抓不到多出來的 8GB。但只要到 raspi-config 內選擇「Expand Filesystem」選項,Raspbian 作業系統就會擴充至正確大小(16GB)來看,我會建議還是指定一下 bs 值。不過 bs 值到底指定多少似乎不重要,只要足夠容納整個作業系統,bs 值不超過實際 SD 卡大小(也就是 bs 值寧可填小一點),最後都可以靠 raspi-config 擴充到正確大小。

      我手頭上 SD 卡不多,沒辦法一一幫您試試看。但用一些合理推理,情況應該如我上述所示。當然,您不必盡信我說的,您可以自己試試看。也歡迎您把試出來的結果回報到這個版,嘉惠其他跟您有相同問題的網友。

      刪除
  8. 你好,請問我用win32 disk imager 燒錄sd card,燒進64G記憶卡,燒成功後變成62.9MB,有燒成功,這樣是正常的嗎?

    回覆刪除
    回覆
    1. 您好:

      記得這個好像是老問題了。您可以使用「sudo raspi-config」命令,來把 SD 卡完整的空間要回來。截圖可以看這裡:

      https://goo.gl/Ki0QUC

      您可以看到,進入「sudo raspi-config」後,選單的第一項就是「Expand Filesystem」(直譯:擴張檔案系統),後面的說明是「Ensures that all of the SD card storage is available to the OS」(直譯:確保所有 SD 卡的空間在作業系統內皆可用)。您選擇這一項後,再看看空間是否回來了。如果沒有,再麻煩您提供更詳細的資訊以茲進一步的判斷。

      希望這樣的建議有用!

      刪除