persistent の設定方法を探してたんだが、
GRUB で ISO loopback boot とか七面倒なことしなくても、
幾つかファイルをコピーして GRUB に登録するだけで済むことが分かった。
まず、拾ってきた Android-x86 の ISO の root にある
- initrd.img
- kernel
- ramdisk.img
- system.sfs
を USB フラッシュメモリの適当な場所に配置。
更に同じ場所に
dd if=/dev/null of=data.img bs=1 count=0 seek=$((8*1024**3)) # 8GiB sparse file
mkfs.ext4 -L "Android Data" data.img
のようにして Android のユーザー用データ保存領域のための loop-device 用 ext4 ファイルシステムを data.img というファイル名で作成しておく。
試しに btrfs も試してみたが、btrfs だと認識しなかった。
現時点でサポートしているのは
ext2, ext3, ext4, ntfs, fat32 らしい。
あとは grub.cfg にこれらのファイルを参照させればよかった。
今回の場合、USB フラッシュメモリの /boot/iso/android-x86_64-9.0-rc1/ 以下に配置したので、
grub.cfg は以下のようになった。
search.fs_uuid xxxxxxxxxxxxxxxx ISOs
menuentry "Android x86_64 9.0 RC1" {
set src=/boot/iso/android-x86_64-9.0-rc1
set root=($ISOs)
linux $src/kernel root=/dev/ram0 androidboot.selinux=permissive SRC=$src quiet
initrd $src/initrd.img
}
元の ISO を loopback boot させる場合、/boot/iso/android-x86_64-9.0-rc1.iso に配置したなら
search.fs_uuid xxxxxxxxxxxxxxxx ISOs
menuentry "Android x86_64 9.0 RC1 ISO with theme" {
export isofile
set isofile="/boot/iso/android-x86_64-0.9-rc1.iso"
loopback loop0 ($ISOs)$isofile
set root=(loop0)
configfile /boot/grub/grub.cfg
}
menuentry "Android x86_64 9.0 RC1 ISO" {
export isofile
set isofile="/boot/iso/android-x86_64-0.9-rc1.iso"
loopback loop ($ISOs)$isofile
set root=(loop)
configfile /boot/grub/grub.cfg
}
のようにすればよい。
iso loopback boot する場合に nomodeset 等が必要な場合は
configfile で ISO 内の grub.cfg を読ませると、毎回手動で追記しないといけないので、
grub.cfg へ以下のようなエントリを追加しておくと良い。
menuentry "Android x86_64 9.0 RC1 ISO Live nomodeset" {
set isofile=/boot/iso/android-x86_64-9.0-rc1.iso
set src=iso-scan/filename=$isofile
loopback loop ($ISOs)$isofile
set root=(loop)
linux /kernel root=/dev/ram0 androidboot.selinux=permissive $src quiet nomodeset
initrd /initrd.img
}