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")
これカールこのコマンドは次のことを行います。
-#
端末にバーで進行状況を表示-O
URLから派生した名前でファイルを書き込む-J
URLの代わりに「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に必要なブートパラメータが見つかりました。秋園子ツリー。