2013年4月13日 星期六

Raspberry PI : 在 Ubuntu 中 mount 下載回來的 images

2013年4月13日 星期六
我的 Raspberry PI 不知怎麼了,老是發生使用一段時間後會當機,儲存在 SD 卡的資料有部份損毀而無法正常開機,本以為可能是舊的 Class 6 記憶卡不穩定,買了新的 SD 卡後雖然撐得久一些,卻也重灌過兩次。今天又玩了一次重灌的遊戲,索性測試一下,先將最近下載回來的 image 解壓縮成 2013-02-09-wheezy-raspbian.img 後,在 Ubuntu 上 mount ,修改了 image 中一些設定檔,umount 即完成自訂的 image ,最後再寫入 SD 卡。


mount Windows smbfs

我的 image 是放在 Windows 中,先在 Ubuntu 透過 smbfs 的方式將 image 所在的路徑 mount 進來。
連線的相關資訊假設如下:

  • Windows Share 資源路徑 : //192.168.2.100/Downloads
  • Windows Username : abc
  • Windows Password : 123456
  • Mount point : /media/smb
執行底下的指令

sudo mount -t smbfs -o username=abc,password=123456 //192.168.2.100/Downloads /media/smb
成功的話,應該就可以看到 Windows 分享出來的檔案了。


確認 image 的內容

切換到放 image 檔案的目錄中後,我們可以執行底下的指令來查看 Raspberry PI 的 image (假設檔名為: 2013-02-09-wheezy-raspbian.img) 是什麼內容:
file 2013-02-09-wheezy-raspbian.img
查到的結果應該和下面的類似:
2013-02-09-wheezy-raspbian.img: x86 boot sector; partition 1: ID=0xc, starthead 130, startsector 8192, 114688 sectors; partition 2: ID=0x83, starthead 165, startsector 122880, 3665920 sectors, code offset 0xb8
它是一個 block device ,我們可以看到它帶有兩個分割區,ID=0xc 表示為 FAT32 的分割區,ID=0x83 表示為 Linux 的分割區。

另外,我們也可以執行底下的指令來查看:
sfdisk -uS -l 2013-02-09-wheezy-raspbian.img
結果應該和下面的類似:

Disk 2013-02-09-wheezy-raspbian.img: cannot get geometry
Disk 2013-02-09-wheezy-raspbian.img: 235 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0
   Device Boot    Start       End   #sectors  Id  System
2013-02-09-wheezy-raspbian.img1          8192    122879     114688   c  W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2        122880   3788799    3665920  83  Linux
2013-02-09-wheezy-raspbian.img3             0         -          0   0  空
2013-02-09-wheezy-raspbian.img4             0         -          0   0  空

特別注意 Units = sectors of 512 bytes 那行,及 Linux 那個 partition 的設定,因為後面在 mount 時,需要用到這裡的數字來算分割區在 image 檔案中的起點。以這裡的例子來說,底下兩個數字要記下來:

  • Units : 512
  • Start : 1228800


mount

有了前面分割區的相關資料,接下來,我們就可以執行下面的指令來將 image 中的 Linux 分割區 mount 在目錄樹中了。
sudo mount -o loop,offset=$(( 512 * 122880 )) 2013-02-09-wheezy-raspbian.img /media/image
上面的指令將 Raspberry PI 的 image 檔案 (2013-02-09-wheezy-raspbian.img) 由 512*122880 bytes 開始的資料 mount 在 /media/image 目錄上。
成功的話,執行 mount 指令,應該會多一行類似下面的資訊:
/dev/loop0 on /media/image type ext4 (rw,offset=62914560)
接著,就可以自由的切換到 /media/image 中去修改 Raspberry PI image 檔案中的內容了。

下面是我執行 ls -l 看到的內容:

總計 92
drwxr-xr-x  2 root root  4096 2013-02-09 10:00 bin
drwxr-xr-x  2 root root  4096 2013-02-09 09:31 boot
drwxr-xr-x  3 root root  4096 2013-02-09 10:00 dev
drwxr-xr-x 95 root root  4096 2013-02-09 11:42 etc
drwxr-xr-x  3 root root  4096 2013-02-09 09:24 home
drwxr-xr-x 12 root root  4096 2013-02-09 09:50 lib
drwx------  2 root root 16384 2013-02-09 08:46 lost+found
drwxr-xr-x  2 root root  4096 2013-02-09 08:47 media
drwxr-xr-x  2 root root  4096 2012-12-26 13:12 mnt
drwxr-xr-x  3 root root  4096 2013-02-09 09:27 opt
drwxr-xr-x  2 root root  4096 2012-12-26 13:12 proc
drwx------  2 root root  4096 2013-02-09 08:47 root
drwxr-xr-x  7 root root  4096 2013-02-09 10:13 run
drwxr-xr-x  2 root root  4096 2013-02-09 10:00 sbin
drwxr-xr-x  2 root root  4096 2012-06-20 17:23 selinux
drwxr-xr-x  2 root root  4096 2013-02-09 08:47 srv
drwxr-xr-x  2 root root  4096 2012-11-27 17:13 sys
drwxrwxrwt  2 root root  4096 2012-12-26 13:12 tmp
drwxr-xr-x 10 root root  4096 2013-02-09 08:47 usr
drwxr-xr-x 11 root root  4096 2013-02-09 08:47 var


umount

當我們修改完 image 檔案中的內容後,別忘了把它 umount ,執行底下的指令:
sudo umount /media/image
上面的指令是將原本掛載在 /media/image 的資源卸除。



沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket