樹莓派♀♂克隆!!

學習曲線』說著一個『人會遺忘』的事實。這或許是大自然的『恩惠』,要『向前行』如果又不能『放手』,很可能『耽湎』於『過去』而無法自拔。以前的讀書人,喜歡寫讀書『筆記』,於年終『冬至』養陽之日,趁著『商旅不行』之時,作點『溫故知新』得事兒──!想必是有所謂吧?或許就是 ……?近代美國家喻戶曉的史學家威爾.杜蘭先生花了五十年著作了「世界文明史」三十八大巨冊,為著總結又寫了一本名為【歷史的教訓 】的導讀,並於《序言》中感慨︰歷史告訴人們的最大教訓就是『人類總學不到教訓』。當然『抉擇』終究祇能自由的,或許『夏蟲』也可以『喻冰』,總之為了…避免某種遺憾…,就讓我們來看看在 Raspbian 上要如何打包,怎麽克隆 Clone 一下,這個一路上『走來的足跡』。

為了能在樹莓派 Raspbian 系統裡『克隆』SD 卡,首先我們需要相容於樹莓派的 USB SD 讀卡裝置,在此我們選用 elinux.org 上建議的 Super Top 類的多卡式  SD 讀卡裝置,這樣還可以做像『拷貝機』一樣的用途。如果你對 SD 卡或 Noobs 安裝尚不了解,請先閱讀【開機沒畫面?Noobs 安裝】一文。

172_G_1377020380212

 

 

詳細規格,請看這裡

其次接下來將安裝一些會用到或談到的軟體︰

sudo apt-get update

sudo apt-get install gparted partclone bless  uuid synaptic

下文將一步步說明如何在 Raspbian 上『做這件事』︰

【檢查多卡式 SD 讀卡裝置】︰

重要的第一步檢查 Raspbian 是否『認識』這個新插入的 USB 多卡式 SD 讀卡裝置,你可以用 dmesg 來看,或是使用 lsusb 列出 USB 裝置的命令來查,是不是有叫做『Super Top …』的裝置?註︰文中所談到的多個命令,除非特別指明命令參考處,請用 man 「cmd」閱讀系統上的命令手冊

【插入一片相同的 SD 卡】︰

由於 SD 卡不但有相容性的考慮,還有容量大小的問題,此處最好先用與你 Noobs 開機 SD 卡『相同』的卡片。當你插入這塊新卡後,用 dmesg 命令查看『讀取狀況』和『裝置名稱』,你會看到像 sda、sdb、sdc、…,以『 sdscsi disk 起頭的 『 x 』裝置名稱,緊跟著『 : 』然後是一個或多個分割區塊sdx1sdx2sdx3,…』 ,一般新買的 SD 卡大都只有一個分割區塊  ── W95 fat ??類型的檔案系統 ──。也就是說整個 SD 卡是 /dev/sdx,有一個分割區塊叫做 /dev/sdx1。之前的文章談過檔案系統是個『樹狀結構』,不論你從哪個『子目錄』看進去,這個子目錄裡依舊是個樹狀結構── 目錄 sub directory tree ──,在這種『疊套』的構造下,我們容易把這個『子目錄樹想像成就是一個『子目錄名稱為名』的另一個『檔案系統』── 這一個檔案系統彷彿是『安放』mount 在『祖樹』的枝幹上一樣 ──。在 Linux 作業系統上將這些安放處稱為『掛載點』mount point,並有著 mount 掛載和 umount 卸載的命令讓我們使用『外部的』儲存裝置 ── SD 卡、硬碟、大拇哥 USB Storage Device 、DVD、…等等 ──。於 Raspbian 上,這些掛載點都放在 /media/ 起頭的子目錄下,按造被掛載上的不同型態檔案系統分別用著『 /media/ 磁碟標籤/』── Windows 類檔案系統 ── 或是『 /media/ uuid 碼/』── Linux 類檔案系統 ── 的子目錄名稱掛載點。如果你用 mount 命令查看,當下掛載的全部檔案系統,首先你會發現怎麼沒有  Linux 的分割區塊『 /dev/mmcblk0p2』,它已經被重新鏈接命名為『 /dev/root 』而掛載在根 / 目錄上了,你可以如此確認︰

ls /dev/root -l

。其次開機的分割區塊『 /dev/mmcblk0p1』掛載在 / boot 子目錄上; 而 這個 SD 卡 的 『/dev/sdx1』則掛載在  /media/ 磁碟標籤/  子目錄上。

【用 dd 命令來複製 Noobs 開機的 SD 卡】︰

由於 dd 命令會蓋寫輸出 SD 卡裝置 上的分割區總表,所以你需要先卸載 umount 掉那個裝置上所有已掛載的檔案系統︰

sudo umount /dev/sdx1,這裡假設只有一個,然後用

sudo dd bs=1M if=/dev/mmcblk0 of=/dev/sdx

sudo sync;sync;sync

這樣就開始複製了!當然這裡的未知數 x ,你得代入正確的裝置名稱。等它執行完成後,首先看看 dd 有沒有輸出錯誤訊息;如果沒有,那就告成了。假使有錯誤,先用 dmesg 看看是什麼樣的錯誤?是沒有打開僅讀取 Lock 開關,如果不是,一般會是 SD 卡有部份區域損毀;最糟的是 SD 卡讀卡機壞了。前面寫下的 Sync 同步命令目的是把所有還在緩衝區 buffer 裡的資料,統統寫出到裝置上以免流失,一般用一個就夠了。這裡稍微說明一下 dd 這個命令的幾個常用選項bs block size 代表一次讀寫多少個位元組為單位 ── 單位 I/O 區塊的大小 ── ,這裡頭用的是二進制的 1M byte s,這個數值越大讀寫越快,但對於 SD 卡來說 1M bytes 大體速度上是合適的;if input file 是提供輸入區塊裝置檔案of output file 是用於輸出區塊裝置檔案;還有一個 『 count= 』表示需要讀寫多少個單位 I/O 區塊,預設的是整個裝置或是檔案的終止,上面的命令就是用預設條件,所以沒有給這個選項。

至此,讀者自可推想兩塊相同的 SD 卡』可以用︰

sudo dd bs=1M if=/dev/sdx of=/dev/sdy

來複製 ── 這就是『拷貝機』了── 。但是如果是儲存容量不一樣大的兩塊不同地 SD 卡呢?其實只要『  sdy 』── 輸出 ── 裝置的儲存容量比較大,你依然可以這樣拷貝,那多出的部份就是【raspi-config 再探!!】一文中所說的空閑  free space 的容量。再者因為 if 的選項也可以用於『檔案』,所以你只要把『 /dev/sdx換成下載來的而且又已經解壓縮的『映像檔image  的檔名,那你就克隆它了!!

由於 SD 讀卡裝置是可以插拔換卡的 ── 媒體改變 media change ──,很像過去的『軟碟機』換片一樣,如果你試著下︰

ls /dev/sd* -l

──※ * 』表示『任意的字串』,也就是說系統上字串起頭是『sd』的那些裝置。

你應該不會太驚訝於看到『floppy』一詞;然而這個『媒體改變』事件,由於許多 SD 讀卡裝置沒有通知 Linux 作業系統,所以當你使用 fdisk 命令時,常常會碰到『找不到媒體』這樣的錯誤訊息,所以建議你用 cfdisk 命令來取代,它會試著確定裝置狀態。其次,前面我們提到過磁碟標籤UUID 碼,假使你有興趣的話,可以試試看 blkid 列印定位區塊裝置屬性這一個命令︰

sudo blkid -s LABEL

sudo blkid -s UUID

最後,讓我們簡單介紹一些早先安裝的軟體︰gparted 是個很好用的視窗版磁碟分割.格式化工具軟體;bless 是一個視窗版 Hex editor 十六進制的檔案編輯程式;partclone 命令能夠備份多種不同類型分割區塊uuid 顧名思義是 Universally Unique Identifier 通用唯一識別碼的處理命令程式 ; 而 synaptic 就是圖形界面的套件管理軟體,但在 Raspbian 上它有一個地方需要用奈文編輯器 nano 修改,讓使用者 pi 擁有管理者的執行權限︰

sudo nano /usr/share/applications/synaptic.desktop

把文本中的『 Exec=synaptic-pkexec 』修改成『 Exec=gksudo synaptic-pkexec 』之後存檔,這個 gksudo 就是視窗版程式所需要的那個  sudo 。在 Raspbian 視窗環境裡, synaptic 和 gparted 程式都放在視窗選單的『偏好設定』子選單裡,但 bless 由於沒有選單項,只能打開 LX 終端機後,下達 bless 命令去執行。

在人類的歷史上,『克隆』?或『傳承』?是世世代代的事;前事不忘後事之師,也就是所謂的『成功』又何必在我的偉大胸襟。如果說今天的『經濟學』只是能夠大破某一些因襲著的古老『士、農、工、商』的『傳統』,卻又不行大立另一些文化的『創始』,那終究還是遠遠『不足的』!!