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

把一個img檔案掛載成一個檔案系統,修改樹莓派的映象檔案

這裡不僅僅是針對樹莓派,還有其他的系統也可以使用。

前言:

因為工作需要,現在需要對樹莓派的映象做一個修改。
這裡有一個難點就是我這個映象修改之後,是可以拷貝給其他人直接使用的。所以,第一步我不能直接把映象直接拷貝到u盤/cf卡之類的儲存空間上。因為一旦啟動,系統本身會做一些分割槽,並且這個映象將無法閉合。這個時候,就需要在不拷貝的情況下,把映象掛載成一個虛擬系統,直接進行修改。修改之後儲存退出,讓修改生效。這裡,我只測試了ubuntu系統,正常linux系統應該都能使用,其他發行版未測試。

這裡需要一個指令:
loseup

losetup命令用於設定迴圈裝置。
迴圈裝置可把檔案虛擬成區塊裝置,籍以模擬整個檔案系統,讓使用者得以將其視為硬碟驅動器,光碟機或軟碟機等裝置,並掛入當作目錄來使用。

這裡我們可以使用losetup -a 來檢視所有的區塊裝置。

sudo losetup -a

正常情況下,我們的img映象不是一個空白檔案。這裡我就不演示空白檔案的建立掛載了,如有需要,請參考:https://blog.csdn.net/hejinjing_tom_com/article/details/72529124

我這裡的就是一個樹莓派系統映象檔案————2018-11-13-raspbian-stretch.img

假如它的路徑在**/home/guo/2018-11-13-raspbian-stretch.img**

這裡,我想把它掛載為一個虛擬映象檔案,掛載的路徑是/mnt/img下。如何操作?

需要root許可權執行以下指令.
正常情況下直接使用如下命令即可:

mount -t ext4 -o loop 2018-11-13-raspbian-stretch.img /mnt/img 

then

cd /mnt/img 

想新增,刪除都可以了。

但是!!!

嘗試之後你可能發現不行。因為無法識別檔案型別,這是因為img檔案的開頭包含了mbr,以致於系統無法識別……img檔案相當於一個包含作業系統的硬碟,而我們之需要掛載它的檔案系統部分,所以需要繞過mbr。

繞過的方式。

首先,執行

fdisk -l /home/guo/2018-11-13-raspbian-stretch.img

這裡將會打印出類似下面的東西。

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: 0x025ce4e3

Device                                             Boot Start     End Sectors  Size Id Type
/home/guo/Desktop/2018-11-13-raspbian-stretch.img1       8192   98045   89854 43.9M  c W95 FAT32 (LBA)
/home/guo/Desktop/2018-11-13-raspbian-stretch.img2      98304 6651903 6553600  3.1G 83 Linux

這裡我們找到Type是Linux的,並且我們可以發現,linux的檔案系統的開始位置是98304(注意,Boot那一列為空),因為

Units: sectors of 1 * 512 = 512 bytes

所以扇區大小是512位元組。這個時候計算偏移量為

98304*512=50331648

所以,真正需要執行的指令是

mount -t ext4 -o loop,offset=50331648 /home/guo/2018-11-13-raspbian-stretch.img /mnt/img/

這個時候,cd到/mnt/img目錄下,你就可以想怎麼修改怎麼修改了。

修改完之後,

cd /;然後umount /mnt/img;完成解除安裝。

參考:
http://www.runoob.com/linux/linux-comm-losetup.html
https://blog.csdn.net/hejinjing_tom_com/article/details/72529124
https://songzi0206.iteye.com/blog/1723760
https://www.raspberrypi.org/forums/viewtopic.php?t=190154