UBI ファイルおよび UBIFS ファイルの確認、展開
UBI ファイルおよび UBIFS ファイルの確認、展開
MTD(=Memory Technology Devices) Subsystem 上に、UBI の layer があり、UBI の layer の上に UBI Filesystem のレイヤーがある。
Can UBIFS mount loop-back devices? の FAQ にあるように、loopback デバイスはブロックデバイスなので、UBI device 上に構築された UBIFS はマウントすることはできない。
通常ループバックマウントできない UBI/UBIFS ファイルではあるが、
ubi_reader というツールを使うことで UBI/UBIFS のファイルの中身を確認、展開することができる。
参考
- http://www.linux-mtd.infradead.org/doc/general.html
- http://www.linux-mtd.infradead.org/doc/ubi.html
- http://www.linux-mtd.infradead.org/doc/ubifs.html
- http://www.linux-mtd.infradead.org/doc/ubifs.html#L_raw_vs_ftl
- http://www.linux-mtd.infradead.org/faq/ubifs.html#L_loop_mount
- https://github.com/jrspruitt/ubi_reader
ubi_reader のインストール方法 (Ubuntu 22.04 で確認)
sudo apt-get install -y liblzo2-dev
sudo apt-get install -y python3-pip
sudo pip3 install python-lzo ubi_reader
ubi_reader の使い方
基本的に https://github.com/jrspruitt/ubi_reader に記載の通りだが、
展開するコマンドを実行する際には -o
オプションを指定して展開先を指定する必要がある。
UBIイメージを展開する場合
UBI ファイルは複数の UBI Filesystem を含むことができる。
このため UBI Image を展開すると、UBIFS を取得することができる。
UBIイメージを展開すると、UBIFSファイルが出力される。
ubireader_extract_images -o OUT/ custom-test-image-rootfs.ubi
UBI/UBIFSをファイル展開する場合
UBIFSファイルを展開すると、内部のファイルが展開される。
ubireader_extract_files -o OUT/ custom-test-image-rootfs.ubifs
UBIファイルを指定しても、内部のファイルを一括で展開することもできる。
ubireader_extract_files -o OUT/ custom-test-image-rootfs.ubi
UBIイメージの中身のファイルリストを取得する場合
ディレクトリの中身を確認するときは ls
コマンドを使うように UBIファイルあるいはUBIFSファイルの中身も ls
コマンドのように確認することができる。
例えば ubi ファイルのトップディレクトリをリストアップしたい場合 -P /
を指定して実行する。
$ ubireader_list_files -P / custom-test-image-rootfs.ubi
40755 2 0 0 0 Jul 18 01:41 bin
40755 2 0 0 0 Jul 18 00:24 dev
40755 8 0 0 0 Jul 18 01:41 etc
40755 3 0 0 0 Jul 18 00:51 lib
40755 2 0 0 0 Jul 18 00:24 mnt
40755 2 0 0 0 Jul 18 00:24 run
41777 2 0 0 0 Jul 18 00:24 tmp
40555 2 0 0 0 Jul 18 00:24 sys
40755 8 0 0 0 Jul 18 01:41 var
40755 9 0 0 0 Jul 18 01:36 usr
40755 2 0 0 0 Jul 18 01:41 boot
40755 3 0 0 0 Jul 18 01:41 home
40555 2 0 0 0 Jul 18 00:24 proc
40755 2 0 0 0 Jul 18 01:41 sbin
40755 2 0 0 0 Jul 18 00:24 media
ubi ファイルの /bin
ディレクトリをリストアップしたい場合 -P /bin
を指定して実行する。
$ ubireader_list_files -P /bin custom-test-image-rootfs.ubi
20777 1 0 0 0 Jul 18 01:41 dd -> /bin/dd.coreutils
120777 1 0 0 0 Jul 18 01:41 cp -> /bin/cp.coreutils
120777 1 0 0 0 Jul 18 01:41 df -> /usr/bin/df.coreutils
120777 1 0 0 0 Jul 18 01:41 ln -> /bin/ln.coreutils
... 中略 ...
120777 1 0 0 0 Jul 18 01:41 base64 -> /usr/bin/base64.coreutils
100755 1 0 0 190660 Jul 18 01:12 ls.coreutils
100755 1 0 0 50920 Jul 18 01:12 cat.coreutils
100755 1 0 0 108396 Jul 18 01:12 stat.coreutils
100755 1 0 0 141312 Jul 18 01:12 cp.coreutils
100755 1 0 0 50880 Jul 18 01:12 mknod.coreutils
120777 1 0 0 0 Jul 18 01:41 printenv -> /usr/bin/printenv.coreutils
100755 1 0 0 42676 Jul 18 01:12 hostname.coreutils
100755 1 0 0 50940 Jul 18 01:12 mkdir.coreutils
100755 1 0 0 1395772 Jul 18 01:07 bash.bash
100755 1 0 0 34436 Jul 18 01:12 true.coreutils
100755 1 0 0 91884 Jul 18 01:12 stty.coreutils
100755 1 0 0 42672 Jul 18 01:12 uname.coreutils
UBIイメージの中身の取り出しを行う場合
UBIファイルまたはUBIFSファイルから指定したパスのファイルを取り出すことができる。
以下のように -C
でコピー元パスを指定して -D
でコピー先ディレクトリを指定する。
ubireader_list_files -C /bin/ls.coreutils -D . custom-test-image-rootfs.ubi
これによりコピー先ディレクトリで使用したディレクトリに対して UBIファイルあるいはUBIFSファイルからファイルを取り出す (ファイルとしてコピーすることができる)
Discussion