ユーザ用ツール

サイト用ツール


transpeed_8k618-t_マスターディスク作成

Transpeed 8K618-T マスターディスク作成

【趣旨】

Transpeed 8K618-T にて、複数台を構築する際に利用。

OSイメージ(500MB)をダウンロード。解凍すると約2GBになった。
SDカード(32GB)に2GBを書き込み、SBCで起動すると初回だけ自動拡張スクリプトが動作して、
OSのデータ領域が、SDカード全容量の32GBへ自動拡張される。
ディスク容量 32GBとなった状態で初期構築を完了させる訳だが、32GB中で実使用容量は2.5GB。
このイメージデータをファイルサーバーで保存しておこうと思ったり、配布しようと思うと可能な限り圧縮したい。

【圧縮作業にあたり】

〇 利点

  • HDD保管領域の容量節約
  • イメージをSDカードへ展開する時間の短縮

〇 欠点

  • 面倒くさい
  • HDD保管領域や作業時間が十分に取れる場合は、マスターとなるSDカードを空のSDカードへディスクコピーしたほうが簡単

1回しか使わない。初期構築したOSイメージは残さないのであれば、そもそも以下作業は不要

【マスターイメージの作成】

Android TV BoxのLinux化の際、内蔵ディスク(NVMe, SATA等)へ書き込む際は、十分な注意が必要。
可能な限りリスクを減らすため、SDカード上でマスターイメージとなるベースを構築しておく。

【作業環境】

手頃なLinuxOS端末 – 母艦OSと呼称。

  • SDカードで使用されているファイルシステムは、サポート可能である事。FAT, ext4など

【情報収集】

  • SDカードのOSはArmbian
  • SDカードの総容量は32GB
  • Loaderはu-bootが使用されている。
  • 母艦OSにSDカード(USB変換アダプタなどで)を認識。認識デバイス /dev/sdf仮定。
  • 作業領域として母艦OSのHDD領域を利用。使用容量は、情報収取の上で確定。
パーティション情報

# fdisk -l /dev/sdf

ディスク /dev/sdf: 29.1 GiB, 31266439168 バイト, 61067264 セクタ
単位: セクタ (1 * 512 = 512 バイト)|
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xa37fb839

デバイス 起動 開始位置 終了位置 セクタ  サイズ Id タイプ
/dev/sdf1    8192 60424191 60416000 28.8G 83 Linux ⇒ ① 開始位置

# lsblk -f /dev/sdf

NAME FSTYPE  LABEL        UUID
sdf
|-sdf1  ext4   armbi_root  caeb0884-218b-4fd6-85f6-288d5f44773b ⇒ ② FSTYPE/LABEL/UUID

# mkdir /mnt/temp
# mount -o ro /dev/sdf1 /mnt/temp
# df -h /mnt/temp

ファイルシス  サイズ 使用 残り 使用% マウント位置
/dev/sdf1    29G  2.2G 26G  8%  /mnt/temp

# umount /mnt/temp
# rmdir /mnt/temp

【圧縮作業開始】

母艦OSの作業場所は、/x1/temp

(1) イメージデータの作成
  上記の情報収集にて、実使用容量は2.2GB。 (なんとなく)10%増しの2.5GBを作成。

# dd if=/dev/zero of=/x1/temp/8k618t.img bs=1M count=2500

(2) ファイルをループデバイスとしてマウント

# losetup -P -f /x1/temp/8k618t.img
# losetup -l

NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE           DIO LOG-SEC
/dev/loop0         0      0         0  0 /x1/temp/8k618t.img   0     512

(3) パーティション作成

# fdisk /dev/loop0
  上記の情報収集にて、開始セクターは8192を指定

コマンド (m でヘルプ): n
パーティションタイプ
  p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
  e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1):1
最初のセクタ (2048-5119999, 既定値 2048): 8192
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (8192-5119999, 既定値 5119999):5119999
コマンド (m でヘルプ): w

パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

# fdisk -l /dev/loop0

ディスク /dev/loop0: 2.5 GiB, 2621440000 バイト, 5120000 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xa37fb839

デバイス     起動 開始位置 終了位置  セクタ サイズ Id タイプ
/dev/loop0p1          8192  5119999 5111808   2.4G 83 Linux

(4) パーティション1をフォーマット

  • 値は、上記情報収集②を参照。
  • なるべく作業を減らすために、値はそのままを使用

# mkfs.ext4 -L armbi_root -U caeb0884-218b-4fd6-85f6-288d5f44773b /dev/loop0p1

Discarding device blocks: done
Creating filesystem with 638976 4k blocks and 160000 inodes
Filesystem UUID: caeb0884-218b-4fd6-85f6-288d5f44773b
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

(5) SDカード内のファイルをイメージファイルへ同期

# mkdir /mnt/{src,dst}
# mount -o ro /dev/sdf1 /mnt/src
# mount /dev/loop0p1 /mnt/dst

# rsync -aHWh -X \
–exclude=“/dev/*” \
–exclude=“/proc/*” \
–exclude=“/run/*” \
–exclude=“/tmp/*” \
–exclude=“/sys/*” \
–exclude=“/home/*” \
–info=progress0,stats1 \
/mnt/src/ /mnt/dst/

sent 2.07G bytes  received 1.32M bytes  11.87M bytes/sec
total size is 2.07G  speedup is 1.00

# sync
# umount /mnt/dst

(6) イメージファイルへ u-bootをインストール

# dd if=/dev/zero of=/dev/loop0 bs=1k count=1023 seek=1 status=noxfer

1023+0 レコード入力
1023+0 レコード出力

# dd if=/mnt/src/usr/lib/linux-u-boot-edge-transpeed-8k618-t/u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8 status=noxfer

749+1 レコード入力
749+1 レコード出力

# sync
# umount /mnt/src
# rmdir /mnt/{src,dst}

(7) ループバックデバイスの解除

# losetup -l

NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE           DIO LOG-SEC
/dev/loop0         0      0         0  0 /x1/temp/8k618t.img   0     512

# losetup -d /dev/loop0
# losetup -l
#

(7) 新しいSDカードへ書き込みと動作確認
 
 作成したマスターイメージが起動するか、試しに確認してみる。

 母艦OSに挿していたマスターイメージのSDカードを抜いて、新しいSDカードを挿す。
 ⇒ 認識デバイスは、/dev/sdf となった。

# dd if=/x1/temp/8k618t.img of=/dev/sdf bs=1M iflag=fullblock oflag=direct status=progress
# sync

 新しいSDカードを母艦OSから抜いて、Transpeed 8K618-tへ差し込み、SDカードから起動すればOK

(8) マスターイメージを圧縮させる

# ls -lh

合計 2.4G
-rw-r--r-- 1 root root 2.5G  5月 13 12:14 8k618t.img

# xz -z 8k618t.img
# ls -lh

合計 546M
-rw-r--r-- 1 root root 546M  5月 13 12:14 8k618t.img.xz

以上で終了です。

最終的に32GBのOSイメージが2.5GB。
保管の為に、xz圧縮かけると540MBとなりました。

transpeed_8k618-t_マスターディスク作成.txt · 最終更新: by admin