1. 程式人生 > >img檔案掛載成一個檔案系統,修改樹莓派的映象檔案,寫入映象———後續

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