サンプル画像

サンプル画像

64GBマルチブートUSBドライブを作成したいです。

Windowsでファイルへのアクセスに使用できるように、最初のパーティションを32GB fat32パーティションにしたいと思います。 (Windowsでは、リムーバブルドライブの最初のパーティションのみが表示されます。)

その後、背面パーティションにいくつかの(または可能であればそれ以上の)Linuxディストリビューションを配置したいと思います。

私は小さなブートパーティション(好ましくはsyslinux)が必要だと仮定します。しかし、最初のパーティションにすることはできません。

どのように設定するのが最善ですか?

マルチブートUSB(LinuxおよびWindows)を作成するために見たユーティリティのうち、パーティションテーブルの先頭に追加のパーティションを追加するオプションを提供するユーティリティはありません。

ベストアンサー1

以下では、BIOSを使用してコンピュータを起動するか、「レガシー」起動モードをサポートする必要があります(互換性サポートモジュール) - 少なくとも私の考えにはEFIシステムの経験はありません。


起動可能なUSBスティックの作成システムLinuxあなた:

  • パーティションの作成
  • パーティション内のファイルシステムの初期化
  • パーティションに syslinux をインストールします。
  • syslinuxパーティションをアクティブとしてマーク
  • syslinuxのインストールハードディスクパスワード

この手順を完了したら、USBドライブから起動できる必要があり、USBドライブから起動するとsyslinux起動プロンプトが表示されます。ここでコマンドを実行して、より多くのコードをロードして起動プロセスを続行できます。

起動するたびに長いコマンドラインを入力する必要がないようにファイルを作成できます。systemlinux.cfgコマンドラインを保存してください。いくつかあるかもしれません。

通常もインストールシステムLinuxモジュール対応する *.c32 ファイルをパーティションの syslinux ディレクトリにコピーする場合、これらのモジュールの例は次のとおりです。メニュー.c32チェーン.c32

サンプル画像

利用可能なUSBスティックがなかったので、次のコマンドを使用して例として2 GBのイメージを作成しました。

dd if=/dev/zero of=example.img bs=1k count=2M

その後、次を実行してループデバイスに接続しました。

losetup --find --show example.img

このコマンドにはパラメーターが必要です。最大の部分~のリングモジュールは、少なくともイメージファイルのパーティション数と同じ数字に設定する必要があります。

rmmod loop
modprobe loop max_part=10

ループモジュールがカーネルに組み込まれている場合は、次のように指定できます。最大の部分カーネルのブートパラメータ:

loop.max_part=10

または、以下を使用してループデバイスを設定できますkpartx

kpartx -av example.img

区画の装置ノードは以下に見出すことができる。/開発者/マッパー/kpartx例を使用して従うには、以下を設定する必要があります。開発部適切に可変です。

変わりやすい

たとえば、次の変数を設定しました。

# device node
dev=$(losetup --find --show example.img)
# set to e.g. /dev/mapper/loop0 when using kpartx
dev_part=${dev}

# loop devices use the letter 'p' to denote partitions (e.g. /dev/loop0p1)
# drives normally do not (e.g. /dev/sda1)
part_divider=p

# path to syslinux modules and mbr
libpath=/usr/lib/syslinux

# Path to mount point; used when e.g. files need editing
mount_point=/mnt

# The number of the partition that you use to share files with windows
files_part_nr=1
# The number of the boot partition
boot_part_nr=2
# The number of the partition that holds a linux distribution CD's content
dist_part_nr=3

サンプルディストリビューションとして私が選んだマイクロコアLinux:

# Download Tiny Core's iso and set variable "isofile" to its destination
# filename
isofile=$(curl -# -OJ -w '%{filename_effective}\n' "http://tinycorelinux.net/6.x/x86/release/TinyCore-current.iso")

これカールこのコマンドは次のことを行います。

  • -#端末にバーで進行状況を表示
  • -OURLから派生した名前でファイルを書き込む
  • -JURLの代わりに「Content-Disposition」ヘッダーから名前を派生
  • -w標準出力にファイル名を書き込みます(「isofile」変数に保存されます)。

パーティションの作成

膜バイオリアクター

# Create an empty msdos style partition table
parted -s   "${dev}"   mktable  msdos

# Create two primary partitions (i.e. sdb1, sdb2)
# one holding your files and one for syslinux
parted -s   "${dev}"   mkpart   primary   fat32     0MB   800MB
parted -s   "${dev}"   mkpart   primary    ext2   800MB   900MB

GPT

# Create an empty gpt partition table
parted -s   "${dev}"   mktable  gpt

# Create two primary partitions (i.e. sdb1, sdb2)
# one holding your files and one for syslinux
parted -s   "${dev}"   mkpart   files   fat32     0MB   800MB
parted -s   "${dev}"   mkpart   boot     ext2   800MB   900MB

ファイルシステムの初期化

# DATA
mkfs.vfat   "${dev_part}${part_divider}${files_part_nr}"
# BOOT
mkfs.ext2   "${dev_part}${part_divider}${boot_part_nr}"

パーティションにsyslinux(extlinux)をインストールします。

起動パーティションをマウントし、次を実行しますextlinux

mount   "${dev_part}${part_divider}${boot_part_nr}"   "${mount_point}"
mkdir   "${mount_point}/syslinux"
extlinux -i "${mount_point}/syslinux"

umount   "${mount_point}"

syslinux用のファイルを保存するために、パーティション内の他のディレクトリを選択できます。ファイルをルートディレクトリに配置します。extlinux -i "${mount_point}";/開始するextlinux -i "${mount_point}/boot"

そしてシステムLinuxコマンドは次のとおりです。いいえブートパーティションのインストール):

syslinux -i -d /syslinux   "${dev_part}${part_divider}${boot_part_nr}"

syslinuxパーティションをアクティブとしてマーク

デフォルトの syslinux MBR ブートローダコードは、アクティブとマークされたパーティションを検索して制御を渡します。ボリュームブートレコード荷物。

膜バイオリアクター

# Mark boot partition as active (MBR)
parted "${dev}"   set   "${boot_part_nr}"   boot         on

GPT

# Mark boot partition as active (GPT)
parted "${dev}"   set   "${boot_part_nr}"   legacy_boot  on

使用する場合gdiskxドライブを分割するには、そのドライブをクリックして「プロパティ設定」()を有効にして「アドオン」を有効にする必要がありますa

syslinux MBRコードのインストール

dd conv=notrunc bs=440 count=1 if="${libpath}/mbr/mbr.bin" of="${dev}"

GPTパーティションドライブの場合は、次を使用します。gptmbrファイル変えるブートファイルストア

代替ローダーもあります代替ファイルストアアクティブとマークされたパーティションを検索する代わりに、次のように指定されたパーティションを使用します。

print '\x2' | cat ${libpath}/mbr/altmbr.bin - | dd conv=notrunc bs=440 count=1 iflag=fullblock of=${dev}

電源オン

これを追加すると、デバイスから起動してsyslinux起動プロンプトを受け取ることができます。

qemu-system-i386 -drive file="${dev}",format=raw

syslinuxは同じパーティションからのみファイルをロードできるため、まだオペレーティングシステムの起動プロセスを続行できません。

チェーンローディングによるLinuxディストリビューションのロード

パーティションの作成

別のパーティションを作成します(MBRタイプパーティションの場合)。

parted    "${dev}"   mkpart   primary   ext2   900MB   100%

または (GPT の場合) 以下を使用します。

parted    "${dev}"   mkpart   distribution   ext2   900MB   95%

その後、ファイルシステムを初期化します。

mkfs.ext2 "${dev_part}${part_divider}${dist_part_nr}"

チェーンローディング

システムLinuxチェーン.c32モジュールを使用してチェーンをロードできます。ボリュームブートレコードロードされたパーティションのファイルのみをロードできるsyslinux制限を解決するために使用できる別のパーティション。この方法では、ISOイメージに含まれているsyslinux / isolinux構成ファイルを再利用することもできます。

利用できるようにチェーン.c32そのモジュールとその依存項目をコピーする必要があります(libcom32.c32そしてlibutil.c32)起動パーティションのsyslinuxディレクトリに移動します。

mount "${dev_part}${part_divider}${boot_part_nr}" ${mount_point}
cp "${libpath}/modules/bios/libcom32.c32" ${mount_point}syslinux/
cp "${libpath}/modules/bios/chain.c32" ${mount_point}/syslinux
cp "${libpath}/modules/bios/libutil.c32" ${mount_point}/syslinux
umount ${mount_point}

次に、ISOイメージを解凍して名前を変更します。isolinux.cfgsyslinuxが期待する名前で:systemlinux.cfg

mount "${dev_part}${part_divider}${dist_part_nr}" "${mount_point}"
7z x -o"${mount_point}" "${isofile}"
mv "${mount_point}/boot/isolinux/isolinux.cfg" "${mount_point}/boot/isolinux/syslinux.cfg"

クリーナーで名前を変更することも可能であることがわかりましたisolinux/フォルダシステムLinux/、必ずしも必要ではありませんが、いくつかの不要なファイルも削除しました。

mv "${mount_point}/boot/isolinux" "${mount_point}/boot/syslinux"
rm "${mount_point}/boot/syslinux/isolinux.bin"
rm -r "${mount_point}/[BOOT]"

TinyCoreのisoが欠けているようです。libutil.c32(必要メニュー.c32):

cp ${libpath}/modules/bios/libutil.c32 "${mount_point}/boot/syslinux"

パーティションにブートローダをインストールして削除します。

extlinux -i ${mount_point}/boot/syslinux
umount ${mount_point}

電源オン

今イメージを起動すると

qemu-system-i386 -drive file=${dev},format=raw

そして、syslinuxブートプロンプトで次のように入力します。

chain.c32 hd0 3

あなたは資格がありますマイクロコアLinuxシスLinuxメニュー。

構成

ブートパーティションをマウントして作成systemlinux.cfg文書:

mount ${dev_part}${part_divider}${boot_part_nr} ${mount_point}

cat >${mount_point}/syslinux/syslinux.cfg <<EOF
LABEL tc
MENU LABEL Boot TinyCore
COM32 chain.c32
APPEND hd0 3

umount ${mount_point}

GPT形式を使用してパーティション化されたディスクでは、パーティションのGUIDまたはそのラベルを使用して、guid=またはlabel=チェーン.c32:

APPEND label=<LABEL>

または

APPEND guid=<GUID>

blkid以下を使用して両方を見つけることができます。商標そしてガイド


GRUB2

GPT

GPTの場合、grub2にはいくつかの起動コードを保存するための追加のパーティションが必要です。parted次のコマンドを使用して作成できます。

parted ${dev} grub_boot 95% 100%
parted ${dev} set bios_grub on

gdiskあなたの選択としてEF02パーティションタイプ。

グラブによると情報文書の最小サイズは31KiBでなければなりません。

グラップインストール

mount ${dev_part}${part_divider}${boot_part_nr} ${mount_point}
# use --modules="part_gpt" for a gpt partition drive
grub-install -d ${mount_point} --modules="part_msdos ext2"
umount ${mount_point}

それが絶対に必要かどうかはわかりません--modules。少なくともループデバイスを使用すると、grubはそれなしではファイルにアクセスできません。

チェーンローディング

grubブートプロンプトで次のように入力します。

insmod chain
set root=(hd0,3)
chainloader +1
boot

あなたは見なければなりませんマイクロコアLinuxsyslinuxメニューに戻ります。

構成

~のためマイクロコアLinux例では、ブートパーティションの/grub/grub.cfgに次の内容を入れます。

menuentry "Tiny Core Linux" {
    insmod chain
    set root=(hd0,3)
    chainloader +1
}

ドライブがリストされている順序に関係なく、UUIDを使用してルートを設定できます。 。 。交換set root:

search --set root --fs-uuid <UUID>

UUIDを取得するために使用されますblkid

ISOスタート

一部のディストリビューションのライブCDは、grubのloop機能と組み合わせたISOイメージからファイルシステムをマウントできます。たとえば、次のようにします。アーチLinux)ライブCD):

isofile=archlinux-2015.11.01-dual.iso

mount ${dev_part}${part_divider}${dist_part_nr} ${mount_point}

cp ${isofile} ${mount_point}

umount ${mount_point}

次に、次を使用します。グラップ構成ファイル:

menuentry "Archlinux LiveCD" {
    insmod loopback

    set isofile="archlinux-2015.11.01-dual.iso"
    search --set isodrive --file /$isofile
    probe --fs-uuid --set uuid $isodrive

    loopback loop ($isodrive)/$isofile
    set root=loop

    echo "Loading kernel vmlinuz"
    linux /arch/boot/i686/vmlinuz img_loop=$isofile img_dev=/dev/disk/by-uuid/$uuid
    echo "Loading initial ramdisk archiso.img"
    initrd /arch/boot/i686/archiso.img
}

Archlinux ISOに必要なブートパラメータが見つかりました。秋園子ツリー

おすすめ記事