⛳
ZynqMP用SDカードの自動パーティーション拡張に挑戦してみる
概要
先日、ZynqMP 用の SDイメージを SD カードを使わずに作るというのをやってみた。
これで、Linux環境が無い人にも Win32DiskImagerなどでSDカードのイメージ共有がやりやすくなった。
折角なので、そこからさらに、Raspberry PI のように初回起動時にSDカードサイズにあわせて自動調整する機能を考えたい。
resize2fs_once スクリプト
Raspberry PI の場合ここにあるようなスクリプトを使っているようだ。
調べてみると既になひたふ氏がZynq用に踏み込んだ詳細をされていた。
そのまままねさせて頂いて、resize2fs_once に parted の行を1行追加させて頂いて、下記のようなスクリプトとした。
#!/bin/sh
### BEGIN INIT INFO
# Provides: resize2fs_once
# Required-Start:
# Required-Stop:
# Default-Start: 3
# Default-Stop:
# Short-Description: Resize the root filesystem to fill partition
# Description:
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting resize2fs_once"
ROOT_DEV=$(findmnt / -o source -n) &&
parted -s /dev/mmcblk0 unit s "resizepart 2 -1s" &&
resize2fs $ROOT_DEV &&
update-rc.d resize2fs_once remove &&
rm /etc/init.d/resize2fs_once &&
log_end_msg $?
;;
*)
echo "Usage: $0 start" >&2
exit 3
;;
esac
img の加工
以前のこの記事と同様に
/mnt/usb2 にイメージの第二パーティーション(ext4)がマウントされている前提で進める。
まず下記のように上のファイル(resize2fs_once)をコピーして実行権限を付ける。
sudo cp resize2fs_once /mnt/usb2/etc/init.d/
sudo chmod 755 /mnt/usb2/etc/init.d/resize2fs_once
そして、chroot で中に入って parted コマンドのインストールと起動予約を行う。
sudo mv /mnt/usb2/etc/resolv.conf /mnt/usb2/etc/resolv.conf.org
sudo cp /etc/resolv.conf /mnt/usb2/etc
sudo cp /usr/bin/qemu-aarch64-static /mnt/usb2/usr/bin
sudo chroot /mnt/usb2/
apt update
apt install -y parted
update-rc.d resize2fs_once defaults
exit
sudo mv /mnt/usb2/etc/resolv.conf.org /mnt/usb2/etc/resolv.conf
sudo rm /mnt/usb2/usr/bin/qemu-aarch64-static
Discussion