本地掛載openwrt鏡像

以下編譯了一個X86-64平臺的openwrt鏡像,完成之後在bin/targets/x86/64目錄下文件,主要由內核文件,和兩個根文件系統文件,格式分別爲ext4和squashfs,還有兩個內核與文件系統打包在一起的鏡像文件(ext4和squashfs兩種格式)。

$: ~/openwrt/bin/targets/x86/64$ ls -l
total 27360
drwxr-xr-x 4 kai kai    4096 Apr  6 02:51 ./
drwxr-xr-x 3 kai kai    4096 Jan 19 14:43 ../
-rw-r--r-- 1 kai kai 7761300 Jan 20 02:47 openwrt-x86-64-combined-ext4.img.gz
-rw-r--r-- 1 kai kai 6711833 Jan 20 02:47 openwrt-x86-64-combined-squashfs.img.gz
-rw-r--r-- 1 kai kai 3311875 Jan 20 02:46 openwrt-x86-64-generic-rootfs.tar.gz
-rw-r--r-- 1 kai kai 3585977 Jan 20 02:47 openwrt-x86-64-rootfs-ext4.img.gz
-rw-r--r-- 1 kai kai 2533138 Jan 20 02:47 openwrt-x86-64-rootfs-squashfs.img.gz
-rw-r--r-- 1 kai kai 4034624 Jan 20 02:46 openwrt-x86-64-vmlinuz

以下僅以ext4格式爲例,對於文件系統鏡像,如openwrt-x86-64-rootfs-ext4.img.gz,在解壓縮之後,可直接掛在到本地目錄查看:

~/openwrt/bin/targets/x86/64$ gzip -d openwrt-x86-64-rootfs-ext4.img.gz 
~/openwrt/bin/targets/x86/64$
~/openwrt/bin/targets/x86/64$ mkdir mnt 
~/openwrt/bin/targets/x86/64$ ls
mnt  openwrt-x86-64-rootfs-ext4.img

~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ sudo mount -o loop openwrt-x86-64-rootfs-ext4.img mnt                                 
~/openwrt/bin/targets/x86/64$ ls mnt/
bin  dev  etc  lib  lib64  lost+found  mnt  overlay  proc  rom  root  sbin  sys  tmp  usr  var  www
~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ sudo umount mnt

但是對於合併之後的鏡像文件,如openwrt-x86-64-combined-ext4.img.gz,在解壓縮之後,不能直接使用mount命令掛載,需要繞過鏡像頭部字段。

~/openwrt/bin/targets/x86/64$ gzip -d openwrt-x86-64-combined-ext4.img.gz 
~/openwrt/bin/targets/x86/64$ ls
mnt openwrt-x86-64-combined-ext4.img

以下使用fdisk顯示img鏡像文件中包含兩個部分,img1爲內核所在分區,img2未文件系統所在分區。

~/openwrt/bin/targets/x86/64$ fdisk -lu openwrt-x86-64-combined-ext4.img 
Disk openwrt-x86-64-combined-ext4.img: 272.5 MiB, 285736960 bytes, 558080 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: 0xbecaa1aa

Device                            Boot Start    End Sectors  Size Id Type
openwrt-x86-64-combined-ext4.img1 *      512  33279   32768   16M 83 Linux
openwrt-x86-64-combined-ext4.img2      33792 558079  524288  256M 83 Linux
~/openwrt/bin/targets/x86/64$ 

首先計算第一個分區的起始位置,其由第512個扇區開始,每個扇區的大小爲512字節,起始地址爲:262144。在掛載時使用offset關鍵字指定起始地址。以下可見此分區包含啓動相關的grub配置和內核鏡像vmlinuz文件。

~/openwrt/bin/targets/x86/64$ echo $((512*512)) 
262144
~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ sudo mount -o loop,offset=262144 openwrt-x86-64-combined-ext4.img mnt
~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ ls mnt
boot  lost+found
~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ cd mnt
~/openwrt/bin/targets/x86/64/mnt$ 
~/openwrt/bin/targets/x86/64/mnt$ ls boot/
grub  vmlinuz
~/openwrt/bin/targets/x86/64/mnt$ 
~/openwrt/bin/targets/x86/64/mnt$ ls boot/grub/grub.cfg 

通過加載第二個分區,可見其中爲根文件系統。

~/openwrt/bin/targets/x86/64$ echo $((33792*512))
17301504

~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ sudo mount -o loop,offset=17301504 openwrt-x86-64-combined-ext4.img mnt
~/openwrt/bin/targets/x86/64$ ls mnt
bin  dev  etc  lib  lib64  lost+found  mnt  overlay  proc  rom  root  sbin  sys  tmp  usr  var  www
~/openwrt/bin/targets/x86/64$ 
~/openwrt/bin/targets/x86/64$ sudo umount mnt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章