半年程前にチャレンジして、どうしても上手くいかず諦めてたんだが、OSのバージョンも上がってるだろうしという事で、再度チャレンジしてみた。

「最終目標」
Kali Linux を USB で起動して、Persistence を使って設定や編集したファイルなどを維持できるようにする。
「使った物」
・ 16GB USBメモリー (Windows ディスク管理で適当なサイズでFAT32を作って置く。Win32 Disk Imageerが切りなおすので、Win32 Disk Imageerに認識させるために作るだけ)
・ Surface Pro
・ Kali Linux light ISO (2.0 64bit)
・ Win32 Disk Imager (Version 0.9.5)
「手順A」
1. Win32 Disk Imager で、事前に作っておいたFAT32領域に ISO を書き込む。
Linux Boot領域と、EFI用FAT32領域75MBを作り、残りは未割当となる。
2. これとは別にSurfaceのBIOSを設定するために、ヴォリュームの+ (プラス) ボタンを押しながら、電源投入
Surfaceの文字でたら離してOK。
3. BIOSメニュー見たいな画面で、EUFI、TPMの両方を無効にする。
TMP無効にしたらSurface起動画面が赤になる。有効にすると黒に戻るけど、USB Bootできなくなるので、赤のまま使うw
「手順B」
Win32 Disk ImageerでISO書き込むと、パーティションを作りなおしてくれる。Windows上から、75MB程度のドライブが見えるようになってて、EFI/BOOTのフォルダーやファイルが作られている。
1. 既にある EFI/BOOT/ に、以下のファイルを Debian FTP から持ってきてコピーする。
BOOTX64.efi (上書きする)
grubx64.efi
grub.cfg
2. grub.cfg をメモ帳とかで開いて以下をコピペ。
ただし、この3行は後々必要になるので、スマホやメモ書きでみれるようにしとくと便利。
set root=(hd0,1) linuxefi /live/vmlinuz boot=live noconfig=sudo username=root hostname=kali persistence initrdefi /live/initrd.img
grub.cfg ファイルの内容
set menu_color_normal=yellow/blue set menu_color_highlight=blue/yellow function load_video { insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrus insmod all_video } load_video set gfxpayload=keep # Timeout for menu set timeout=5 # Set default boot entry as Entry 0 set default=0 set color_normal=yellow/blue menuentry "Kali - Boot Non Persistent Mode" { set root=(hd0,1) linuxefi /live/vmlinuz boot=live noconfig=sudo username=root hostname=kali initrdefi /live/initrd.img } menuentry "Kali - Boot Persistent" { set root=(hd0,1) linuxefi /live/vmlinuz boot=live noconfig=sudo username=root hostname=kali persistence initrdefi /live/initrd.img }
3. Surfaceをシャットダウン
4. ヴォリュームのマイナスボタン押しながら電源投入
5. 手順Aが済んでれば、Linuxの起動メニューがでてくる。
でも、どちらを選んでもエラーになるはず。(ドライブ指定がずれてるから。)
「手順C」
Linuxが入ったドライブを探す。
1. 手順B のLinuxの起動メニュー画面で「C」ボタンを押し、コマンドモードへ遷移する。
2. ls でドライブ一覧を表示し、msdos と付いたドライブを探す。(msdosはWindowsフォーマットのドライブ)
例: (hd0,msdos2)
3. ls でmsdosとついたドライブの中身を見て、手順Bの時に見てるはずの EFI、Live、Install のディレクトリーがあるものを探す。
コマンド例> ls (hd0,msdos2)
「手順D」
コマンドから手動で、正しいディレクトリーを指定して起動するために、cfgに書いた以下の3行を思い出す。
set root=(hd0,1) linuxefi /live/vmlinuz boot=live noconfig=sudo username=root hostname=kali persistence initrdefi /live/initrd.img
1. 手順Cで見つけたドライブを指定して、Setコマンドを実行
> set root=(hd0,msdos1)
2. 2行目をそのまま実行
> linuxefi /live/vmlinuz boot=live noconfig=sudo username=root hostname=kali persistence
3. 3行目をそのまま実行すると、なんかメッセージがでてくる。
> initrdefi /live/initrd.img
4. 以下のコマンドを実行して、Linuxを起動
> boot
これで起動することが確認できたら、grub.cfg をVIとかで書き直す。しかし、SDカードを入れてるせいかドライブ番号がいつも変わるようで、一回grub.cfgを書き換えても、次回起動できる保証がない。その為、起動メニューにドライブ名だけ変えた物を作っておくと良いかも。例えば、(hd0,msdos1)で起動するものと、(hd1,msdos2)で起動するものといった感じで、cfg のroot=をかえるだけで良い。Linuxの起動メニュー画面で、msdos1で起動できなかったら、msdos2の方を選べば良いだけ。
「手順E」
やっと、ここからが Persistenceの設定で、Kali 上での作業
1. gparted (メニューか、gparted コマンドで起動)
2. USB の2個目のパーテーションを指定して、以下の設定で領域を作成。Labelは必ずpersistenceにする。
Format: ext4
Label: persistence
3. 出来たパーテーション名を覚えておく
例: /dev/sdc2
4. 以下のコマンドをそれぞれ実行。/dev/sdc2 は、手順3のパーテーション名に変更する。
> mkdir -p /mnt/my_usb > mount /dev/sdc2 /mnt/my_usb > echo "/ union" > /mnt/my_usb/persistence.conf > umount /dev/sdc2
5. presistence.conf が作成されてる事を確認したら、再起動
6. 確認作業として、再起動後、Rootとかにファイルを新規作成。
7. また再起動して、そのファイルが残ってたらOK
パーティションを作成して再起動するとF2を長押しで起動して出る青い設定画面からUsbの欄が消えてしまいLinuxを起動できないです。
何故でしょうか?