img檔案掛載成一個檔案系統,修改樹莓派的映象檔案,寫入映象———後續
昨天寫了一篇文章。但是當時對於這個的理解還不夠,以至於我後面又遇到了一些問題。這裡再重新整理一下,供大家參考。
我先重述一下我要做的事情。
我電腦系統是windows,裡面安裝了一個Ubuntu虛擬機器。我從官網上下載了一個樹莓派img映象。但是因為工作的需要,我得修改這個img映象,然後這個img映象可以批量的寫入到tf卡中,別人拿到這個修改的映象燒入儲存卡就能用。
這裡知識點特別多,我一點一點說。
首先看映象內的分割槽。
映象這個時候還沒被燒入(寫入)儲存卡中。這個時候,我們單獨看一下這個映象的分割槽。然後進行掛載。
檢視的方式很簡單,就是使用
fdisk -l ***.img(imgpath)
這裡我舉一個例子。
fdisk -l /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img
執行這個指令之後,我們能看到
Disk /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img: 1.8 GiB, 1862270976 bytes, 3637248 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4d3ee428 Device Boot Start End Sectors Size Id Type /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img1 8192 96663 88472 43.2M c W95 /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img2 98304 3637247 3538944 1.7G 83 Linu
這裡,我們能看到單位扇區的大小是512位元組。並且,下面有兩個裝置。一個是img1,型別是W95,另一個是img2,型別是linux.
其實img1對應的就是boot分割槽,而img2,就是根分割槽。
boot分割槽和根分割槽
boot分割槽為fat32格式,掛載在/boot,存放一些系統啟動需要的基本檔案,包括核心、驅動、firmware、啟動指令碼等;根分割槽檔案系統是ext4格式,掛載於/,存放一些安裝的軟體和庫檔案、系統配置、使用者資料等等;另外當系統啟動時會自動生成和掛載一些必要的其他資料夾,包括temfs、sysfs、proc、debugfs、configfs等(使用mount可以看到他們)
當然,我遇到的問題是需要對兩個分割槽同時做修改,這樣的話,就需要同時去掛載兩個分割槽為兩個檔案系統,並且進行修改。
同時掛載兩個分割槽
上一篇文章中,我講了如何掛載根分割槽。很明顯,boot分割槽也是類似的方式。但是如果你試了之後,會發現掛載了一個分割槽之後,另一個分割槽會出問題。另一個根本掛不上。
在參考了raspberrypi.org上的一個問題之後,我找到了解決的辦法。
先貼出來
mount ***.img /Volumes/boot -t vfat -o rw,loop,offset=4194304,sizelimit=45297664
這裡解釋一下這個命令。
***.img就是要掛載的檔案映象。
/Volumes/boot就是要掛載的位置。
-t 是型別,boot分割槽的型別是fat32,而vfat剛好可以相容fat32,所以用vfat. 而root盤這裡會用ext4.
rw, 這裡是可讀寫
offset是偏移量,這裡的偏移量對應的就是最開始檢視的img1和img2對應的start * 扇區大小。這裡boot盤就是8192 * 512.
和上次唯一不同的一點是這裡加了一個引數,sizelimit.這個值的計算方法是 end * 扇區大小。這裡的boot盤就是96663*512=45297664.
這個值在你要區分不同的分割槽的時候非常有用,加上之後,就可以同時掛載兩個系統了。
掛載上了之後,就可以對兩個系統做修改了。
修改的方式就是進入掛載的目錄下,進行修改
例子中對應的就是/Volumes/boot/
修改之後
修改了之後,首先umount 掛載的虛擬檔案系統。
example
umount /Volumes/boot
解除安裝了兩個分割槽之後,把tf卡(儲存卡)插入到電腦上,然後準備燒製映象到儲存卡。
這裡我給出linux下的燒製命令。不需要安裝軟體。
sudo dd bs=4M if=***.img of=/dev/sdd
這裡的if就是輸入,這裡就是輸入的映象。
輸出就是我們的硬碟裝置。
這裡的硬碟裝置我們可以通過檢視fdisk -l 來看。
除了可以根據儲存卡的大小來看,我們可以看插入儲存卡前後,新增了什麼裝置來判斷。
當然,你可能看到類似sdd1和sdd2這樣的,這個時候,你需要umount sdd1 和sdd2, 比如我這裡就是
umount /etc/sdd1
umount /etc/sdd2
取消了這兩個掛載之後,就可以使用上面的命令進行儲存卡的燒製。當然,這個命令特別危險,如果沒有選好輸出,後果可能會格盤。一年前我就幹過這事。。。
當然,還有一個特別好用的軟體Etcher,感謝老大的推薦,這個軟體mac, linux, window都有,特別容易上手。並且,特別安全。速度很快。
我這裡整理一下Ubuntu上的安裝和使用。
安裝:
1.新增源
$echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee /etc/apt/sources.list.d/etcher.list
2.信任金鑰
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
3.更新並安裝
sudo apt-get update
sudo apt-get install etcher-electron
因為是圖形化介面的,只需要在圖形化頁面下搜尋Etcher,然後你肯定會用。
參考:
http://conanwhf.github.io/2016/08/25/rpi-cloneimg/
https://www.raspberrypi.org/forums/viewtopic.php?t=190154
https://www.jianshu.com/p/53f7e78fd9f1
https://blog.csdn.net/qq_19175749/article/details/52700246