follow me

CheckPoint V-80、OpenWrtで広大なrootfsを入手するために (UTM200N std/L)

UTM200N std/Lです。(アレクソンが出している Check Point V-80 のOEM品になります。
※何が起きても責任は取れない為、記載されている内容を実施する場合、自己責任で行ってください。
※当方、アレクソンのOEM品でしか確認できていません。構造上Check Point V-80であれば共通と思われますが、確証はありません。

Check Point V-80のOpenWrtへの書き換えはこちらに記載。
@SRCHACK.ORG(えす・あーる・しー・はっく) CheckPoint V-80、OpenWrtに書き換える (UTM200N std/L)
Check Point V-80のブートローダの隠しメニューについてはこちらに記載。
@SRCHACK.ORG(えす・あーる・しー・はっく) CheckPoint V-80、ブートローダ (UTM200N std/L)
Check Point V-80のブートローダの隠しメニュー(b) 標準機能でのUSBブートについてはこちらに記載。
@SRCHACK.ORG(えす・あーる・しー・はっく) CheckPoint V-80、標準機能でのUSBブート (UTM200N std/L)


Check Point V-80のOpenWrtでのrootfs領域の拡張についてです。
ここでの紹介は、USBメモリやSDカードを利用したExtrootの話ではなく、eMMCの使用できていない領域を使ってrootfs領域を増やそうというやり方です。

この様に、3.6GB程度の広大なrootfs環境を入手できます。
変更の仕方によっては、パーティションを複数分けて使用する方法も可能です。
root@OpenWrt:~# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='25.12.2'
DISTRIB_REVISION='r32802-f505120278'
DISTRIB_TARGET='mvebu/cortexa72'
DISTRIB_ARCH='aarch64_cortex-a72'
DISTRIB_DESCRIPTION='OpenWrt 25.12.2 r32802-f505120278'
DISTRIB_TAINTS=''
root@OpenWrt:~# uname -a
Linux OpenWrt 6.12.74 #0 SMP Wed Mar 25 20:09:53 2026 aarch64 GNU/Linux
root@OpenWrt:~# cat /tmp/sysinfo/model
Check Point V-80
root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.8M      3.8M         0 100% /rom
tmpfs                   990.0M    848.0K    989.2M   0% /tmp
/dev/loop0                3.6G    133.4M      3.5G   4% /overlay
overlayfs:/overlay        3.6G    133.4M      3.5G   4% /
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:~#

やり方の前に、Check Point V-80が、どうやってパーティションを認識しているかを知る必要があるので、そこから書いていきます。


書いていくのですが、Check Point V-80にOpenWrtをポーティングした大破さんが、blkdevparts の事を書いていたりするので、そちらも読んだ上で見ていただければと。
Linux Kernel 6.6 rc1以降でblkdevpartsが壊れているメモ - 大破雑記帳


Check Point V-80のeMMCのパーティション構成ですが、パーティションテーブルを使用せず、ubootから渡されるkernelオプションのblkdevpartsを使用して認識させています。
Check Point V-80のuboot envの以下が該当部分になります。
set_bootargs_vx=run set_console ; setenv bootargs $console $crash_kernel mvpp2x.queue_mode=1 ${cp_quiet} blkdevparts=mmcblk${mmc_blk_dev}:${kern_reserved_space}M@${mmc_start_reserved_space}M(kernel-1),${dtb_reserved_space}M(dtb-1),${rootfs_reserved_space}M(rootfs-1),${kern_reserved_space}M(kernel-2),${dtb_reserved_space}M(dtb-2),${rootfs_reserved_space}M(rootfs-2),${default_sw_reserved_space}M(default_sw),${logs_reserved_space}M(logs),${preset_cfg_reserved_space}M(preset_cfg),${adsl_reserved_space}M(adsl),-(storage) ${cpnumofcores}
bootargs=console=ttyS0,115200 earlycon=uart8250,mmio32,0xf0512000 crashkernel=30M mvpp2x.queue_mode=1 quiet blkdevparts=mmcblk1:48M@10M(kernel-1),1M(dtb-1),720M(rootfs-1),48M(kernel-2),1M(dtb-2),720M(rootfs-2),300M(default_sw),650M(logs),1M(preset_cfg),1M(adsl),-(storage) maxcpus=3


この中の blkdevparts がパーティション定義になるわけですが、
以下の青色の部分だけしか OpenWrt で利用できていません。
kernel-2以降の広大な領域を、リカバリの為に指を加えて残してしまっている状態です。
mmcblk1:48M@10M(kernel-1),1M(dtb-1),720M(rootfs-1),48M(kernel-2),1M(dtb-2),720M(rootfs-2),300M(default_sw),650M(logs),1M(preset_cfg),1M(adsl),-(storage)

この広大な領域をrootfs-1にしてしまう事で、rootfs領域を拡張しようという訳です。
方法はいくつかありますが、uboot envの set_bootargs_vx を書き換えてしまう方法。(これは手軽ではあるのですが、Official Firmwareを起動しようとする場合に、uboot envの設定を戻さなくてはいけなくなります。
# fw_setenv set_bootargs_vx 'run set_console ; setenv bootargs $console $crash_kernel mvpp2x.queue_mode=1 ${cp_quiet} blkdevparts=mmcblk${mmc_blk_dev}:${kern_reserved_space}M@${mmc_start_reserved_space}M(kernel-1),${dtb_reserved_space}M(dtb-1),-(rootfs-1) ${cpnumofcores}'
これで、rootfs-1で残り全体の領域が取れてしまうのですが、もう少しOpenWrtのやり方っぽくしてみたいと思います。


OpenWrt起動時に呼び出すブートローダのスクリプト boot.scr (v-80.bootscript) を少し修正して、対応させてみます。
差分はこちら、
diff -urNp a/target/linux/mvebu/image/v-80.bootscript b/target/linux/mvebu/image/v-80.bootscript
--- a/target/linux/mvebu/image/v-80.bootscript
+++ b/target/linux/mvebu/image/v-80.bootscript
@@ -44,6 +44,6 @@ setenv cp_quiet
 # set bootargs with "blkdevparts" option
 run set_bootargs_vx

-test -n "${ow_root}" && setenv bootargs "${bootargs} root=${ow_root} rw rootwait"
+test -n "${ow_root}" && setenv bootargs "${bootargs} blkdevparts=mmcblk${mmc_blk_dev}:${kern_reserved_space}M@${mmc_start_reserved_space}M(kernel-1),${dtb_reserved_space}M(dtb-1),-(rootfs-1) root=${ow_root} rw rootwait"

 booti ${kernel_addr_r} - ${fdt_addr_r}
${bootargs}に既にblkdevpartsが入っている訳ですが、後に記載されているもので上書きされるので、この形にしました。
この修正を入れて、OpenWrtをビルドしなおしても良いのですが、Linux部分は変更しないので、リリースされている25.12.2のファームウェアを流用したかったりします。
リリースされているファームウェアをそのまま使用するとなると、OpenWrtをご存じな方であれば、Image Builder を考えるかもしれませんが、今回はLinux部分は何も変更しないので利用できません。

今回は、scrファイルだけ作成しなおして、この部分だけを差し替える事にします。
scrファイルを、修正したv-80.bootscriptから作成するには、u-boot-tools に含まれる mkimage コマンドを利用します。
これには、USB配置用とeMMC配置用で、スクリプト内の @ROOT@ と @DTB@ を置き換えが必要です。

USB用のv-80.bootscript作成はこちら
$ sed -i 's/@DTB@/armada-7040-v-80/g' v-80.bootscript
$ sed -i 's/@ROOT@/INIT/g' v-80.bootscript
eMMC用のv-80.bootscript作成はこちら
$ sed -i 's/@DTB@/armada-7040-v-80/g' v-80.bootscript
$ sed -i 's/@ROOT@/eMMC-02/g' v-80.bootscript

そして、作成した v-80.bootscript から scrへの変換
$ mkimage -A arm64 -O linux -T script -C none -a 0 -e 0 \
    -d v-80.bootscript \
    openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-initramfs.scr
USBに使用する scr ファイルはこの生成された openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-initramfs.scr がそのまま利用できます。


この次にeMMCの場合、sysupgradeで書き込まれるイメージに、この scr を埋め込まなければいけません。
openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-squashfs-sysupgrade.gz に含まれる kernel ファイルに埋め込みます。
scr部分のサイズが決まっているので、不要箇所を0埋めし、ddでkernelファイルに埋め込みます。
$ truncate -s 2048 openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-initramfs.scr
$ dd if=openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-initramfs.scr of=kernel conv=notrunc
これで、kernel-1パーティションに書き込まれる内容の、scr部分だけが置き換わったファイルが完成します。

後は、ファイル構成はそのままで、openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-squashfs-sysupgrade.gz に再圧縮します。
しかし、tarコマンドで作成するだけでは、署名がなくなるので、sysupgradeコマンドで書き込む際、-Fオプションが必要になります。


補足。署名を付ける場合、OpenWrtビルド時に生成されるfwtoolを利用して付ける事になります。
※治安の悪いファイルになるので、署名付けない方がいいのでは?という意見はあると思います。
# 元のsysupgrade.gzから署名を抜き出す
$ fwtool -i metadata.json original.gz

# 書き換え後のイメージにメタデータを付与
$ fwtool -I metadata.json new.gz


こうして作成されたものが、eMMC のrootfs-1以降すべてをrootfsとして利用してしまう scr と sysupgrade.gz になります。
元の状態に戻すには、USBからのブートと、元の状態の mmcblk1 をddでバックアップしたイメージが必要になります。
バックアップが無い場合、復旧は不可能です。(メーカーが提供している、fw1ファイルでは復旧できません。)

openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-initramfs.scr
openwrt-25.12.2-mvebu-cortexa72-checkpoint_v-80-squashfs-sysupgrade.gz
※何が起きても責任は取れない為、使用は自己責任で行ってください。

では、Check Point V-80で、rootfs 3.6GBな愉快なOpenWrtライフをお愉しみ下さい。
CheckPoint V-80、OpenWrtで広大なrootfsを入手するために (UTM200N std/L) | 0 件のコメント | アカウント登録
サイト管理者はコメントに関する責任を負いません。