Help us understand the problem. What is going on with this article?

Android x86 6.0をUSBメモリにインストールする

More than 3 years have passed since last update.

Android-x86をUSBに入れる際に苦労したので手順をメモしておきます

インストール時の罠は何だったか

それはずばり、GRUBのバージョンにありました。
Android-x86のデフォルトのインストーラーではGRUB(無印)がインストールされますが、
これは実はext4のパーティションからブートすることができないのです…!

しかし、実際のインストーラーでは最初のパーティションのフォーマット画面でext4/ntfs/fat32しか選択できません。
androidformat.png

当然ntfs/fat32はlinuxが直接読み書きできないので論外として(ntfsは試してみましたが起動すらしませんでした)、
ext4を使うとGRUBからは起動できずError 17で止まってしまいます。

それではext3で自分でフォーマットすればよいだろうということで、Ubuntuを使いフォーマットしてからインストールしてみるも、どうにもうまくいかず…
調べてみると、インストーラーがアップデートされておらず正しく動作しないといった話もちらほら見受けられました。

それではどうすればいいかと調べていたところ、下記のページにたどり着きました。
https://forum.xda-developers.com/android/general/guide-triple-boot-android-ubuntu-t3092913

これは「AndroidをUbuntuとデュアルブートするためにデフォルトのインストーラーを使わずにインストールしてみたぜ!」といった趣旨の記事です。
試しにこれを参考にしてUSBにインストールしてみたところうまくいきましたので、その手順を以下に記します。

必要な環境

・Ubuntuが起動するPC(バージョンはなるべく新しいほうが良いと思います)

手順

1.Android-x86をダウンロード

以下のページからダウンロードします。
Android-x86 プロジェクト日本語トップページ - OSDN
最新版のisoイメージをダウンロードしてください。

2.USBメモリのフォーマット

まず、USBメモリをUbuntuPCに接続します。
そうしたら端末でfdisk -lを実行し、USBにどのデバイスidが割り当てられているかを確認します。
(例えば、HDDが1台だけの環境であれば/dev/sdbが割り当てられているはずです)
以下は、/dev/sdxに割り当てられているものとして話を進めます。

次に、USBのパーティションテーブルがGPTだといけないので、以下のコマンドで一応MBRに書き換えておきます。

$ sudo parted /dev/sdx -s mklabel msdos

そうしたら次はGpartedを使ってUSBメモリ上にext4の基本パーティションを1つ作成します。
Gpartedをインストールしたのち、root権限で起動します。

$ sudo apt-get install gparted
$ sudo gparted

あとは、gparted上でUSBメモリを選択し、ext4の基本パーティションを一つ作成します。
(既存のパーティションがもしあればそれらはすべて削除します)

これでフォーマットは完了です。

3.Androidのシステムイメージのコピー

まずは、Android-x86のisoを7zを使って展開します。

$ 7z android-x86-6.0-r2.iso -oandroid_installation
$ cd android_installation

次に、system.sfs内のファイルを展開します。
squashfs-toolsを使いますのでそれをインストールしたのちに行います。

$ sudo apt-get install squashfs-tools
$ sudo -s
$ unsquashfs -f -d . system.sfs
$ mkdir temp
$ mount -o loop system.img temp

最後に、USBメモリをマウントし、そこにデータをコピーします。

$ mkdir /mnt/usb
$ mount /dev/sdx1 /mnt/usb
$ cp initrd.img ramdisk.img kernel /mnt/usb/
$ mkdir /mnt/usb/system
$ mkdir /mnt/usb/data
$ cp -avr temp/* /mnt/usb/system/
$ umount temp
$ exit

4.GRUB2のインストール

まずは、メニューエントリにAndroid x86を追加します。
/etc/grub.d/40_customを管理者権限で開き、以下の記述を追加して保存します。

menuentry "Android x86 6.0" {
set root='(hd0,1)'
linux /kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 acpi_sleep=s3_bios,s3_mode SRC=/ HWACCEL= 
initrd /initrd.img
}

次に、USBメモリにGRUB2をインストールし、設定ファイルを書きだします。

$ sudo grub-install --boot-directory=/mnt/usb/boot /dev/sdx
$ sudo grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg

最後に、grub.cfgに書き出された不要な部分(Ubuntuの起動に関する部分)を削除します。
/mnt/usb/boot/grub/grub.cfgを管理者権限で開き、
「### END /etc/grub.d/00_header ###」の直後の行から、
「### BEGIN /etc/grub.d/40_custom ###」の直前の行までを削除し、保存します。

これでインストールは完了なので、USBメモリをアンマウントします。

$ sudo umount /mnt/usb

補足

上記の手順ではGRUB2を入れてるので、おそらくUEFIから起動するようにすることも可能かと思われます。

おわりに

今回のことを通して、grub,grub2の扱い方がなんとなく分かった。
OSって色々と難しいな。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした