「Syslinux」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→サポートされているファイルシステム: 更新) |
Kusanaginoturugi (トーク | 投稿記録) (→サポートされているファイルシステム: 章を追加) |
||
20行目: | 20行目: | ||
{{Note|1=Syslinux だけでは、[https://bugzilla.syslinux.org/show_bug.cgi?id=33 syslinux が存在するパーティション以外]にあるファイルにアクセスできません。この問題を回避する方法は [[#チェインロート]] 章を見てください。}} |
{{Note|1=Syslinux だけでは、[https://bugzilla.syslinux.org/show_bug.cgi?id=33 syslinux が存在するパーティション以外]にあるファイルにアクセスできません。この問題を回避する方法は [[#チェインロート]] 章を見てください。}} |
||
+ | |||
+ | == インストール == |
||
+ | |||
+ | {{Pkg|syslinux}} パッケージを[[インストール]]します。 |
||
+ | |||
+ | BIOS ブートには、BIOS/GPT 設定のために {{Pkg|gptfdisk}} パッケージと、{{ic|/boot}} パーティションが [[FAT]] フォーマットされている場合は {{Pkg|mtools}} が必要です。 |
||
+ | |||
+ | UEFI ブートには、{{Pkg|efibootmgr}} パッケージのインストールが必要です。 |
||
== BIOS システム == |
== BIOS システム == |
2024年7月21日 (日) 20:43時点における版
関連記事
Syslinux は、ドライブ、CD、および PXE 経由でネットワーク経由でブートできるブート ローダーのコレクションです。
目次
- 1 サポートされているファイルシステム
- 2 インストール
- 3 BIOS システム
- 4 UEFI システム
- 5 設定
- 6 トラブルシューティング
- 6.1 Failed to load ldlinux
- 6.2 Syslinux プロンプトを使う
- 6.3 Fsck が root パーティションで失敗する
- 6.4 No Default or UI found on some computers
- 6.5 Missing operating system
- 6.6 Syslinux を無視して Windows が起動する
- 6.7 メニューエントリが動作しない
- 6.8 ldlinux.sys を削除できない
- 6.9 vesamenu 使用時に白いブロックが左上に現れる
- 6.10 Windows を他のドライブにインストールしている時に、チェインロードが動作しない
- 6.11 ブートローダーログの読み取り
- 6.12 Btrfs の圧縮
- 6.13 Btrfs のマルチデバイス
- 7 参照
サポートされているファイルシステム
サポートされているファイルシステムの一部には、FAT、NTFS、ext2、ext3、ext4、XFS、UFS/FFS、および非圧縮のシングルデバイス Btrfs があります。
インストール
BIOS ブートには、BIOS/GPT 設定のために gptfdisk パッケージと、/boot
パーティションが FAT フォーマットされている場合は mtools が必要です。
UEFI ブートには、efibootmgr パッケージのインストールが必要です。
BIOS システム
ブートプロセスの概要
- ステージ 1 : パート 1 - MBR をロードする - 起動時、BIOS は、ディスクの先頭にある 440 バイトの MBR ブートコードをロードします (
/usr/lib/syslinux/bios/mbr.bin
または/usr/lib/syslinux/bios/gptmbr.bin
)。 - ステージ 1 : パート 2 - アクティブなパーティションを探索する - ステージ 1 の MBR ブートコードは、アクティブとマークされている (MBR ディスクのブートフラグ) パーティションを探索します。以降は例として、そのパーティションは
/boot
パーティションであると仮定しましょう。 - ステージ 2 : パート 1 - ボリュームブートレコードを実行する - ステージ 1 の MBR ブートコードは、
/boot
パーティションのボリュームブートレコード (VBR) を実行します。Syslinux の場合、VBR ブートコードは/boot/syslinux/ldlinux.sys
(extlinux --install
コマンドで作成されます) の開始セクターです。ldlinux.sys
はldlinux.c32
と同じでないことに注意してください。 - ステージ 2 : パート 2 -
/boot/syslinux/ldlinux.sys
を実行する - VBR は、/boot/syslinux/ldlinux.sys
の残りをロードします。/boot/syslinux/ldlinux.sys
のセクタの位置が変更されてはなりません。さもないと、Syslinux は起動しません。 - ステージ 3 -
/boot/syslinux/ldlinux.c32
をロードする -/boot/syslinux/ldlinux.sys
は syslinux の残りのコアを含んでいる/boot/syslinux/ldlinux.c32
(コアモジュール) をロードします (ファイルサイズの制限のためldlinux.sys
に入らないもの)。ldlinux.c32
は全ての Syslinux 環境で必須であり、パーティションにインストールされているldlinux.sys
とバージョンが一致している必要があります。そうないと Syslinux が起動しません。詳しくは https://bugzilla.syslinux.org/show_bug.cgi?id=7 を見て下さい。 - ステージ 4 - 設定ファイルを探索、ロードする - Syslinux が完全にロードされると、設定ファイル
/boot/syslinux/syslinux.cfg
(もしくは/boot/syslinux/extlinux.conf
) が検索されます。設定ファイルが見つかったら、ロードを行います。設定ファイルが存在しない場合、Syslinux のboot:
プロンプトが表示されます。このステップ、および Syslinux の非コア部分 (/boot/syslinux/*.c32
モジュール、lib*.c32
とldlinux.c32
は除く) では、/boot/syslinux/lib*.c32
(ライブラリ) モジュールが存在することを要求します ( https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF )。lib*.c32
ライブラリモジュールと非コアな*.c32
モジュールは、パーティションにインストールされている*.c32
のバージョンと一致していなければなりません。
インストール
# pacman -S syslinux
パッケージのインストールとブートローダーのインストールは別の作業です。システムを起動できるようにするにはパッケージをインストールした後に、ブートローダーのコードを (適切な領域に) インストールしなくてはなりません。以下のセクションではシステムの特性にあわせてインストールする方法を説明しています。
自動
syslinux-install_update
スクリプトは Syslinux をインストールし、*.c32
モジュールを /boot/syslinux
にコピーし、ブートフラグを設定して MBR にブートコードをインストールします。ソフトウェア RAID の MBR や GPT ディスクを扱うことができます。
- 1. boot パーティションを分割している時はそのパーティションがマウントされているか確認してください。
lsblk
で確認できます。/boot
マウントポイントがないときは、先に進む前にマウントしてください。
- 2.
syslinux-install_update
をフラグを付けて実行してください:-i
(ファイルをインストール),-a
(boot フラグでパーティションを active にする),-m
(MBR ブートコードをインストール):
# syslinux-install_update -i -a -m
- 3. #設定 に従って
/boot/syslinux/syslinux.cfg
を作成・編集してください。
手動
Syslinux をインストールする boot パーティションには FAT, ext2, ext3, ext4, Btrfs のいずれかのファイルシステムを含んでなくてはなりません。マウントしたディレクトリ (/dev/sdXY
デバイスではありません) にインストールしてください。ファイルシステムの root ディレクトリにインストールする必要はありません (例: /boot
にマウント。したデバイス /dev/sda1
)。Syslinux を syslinux
ディレクトリにインストールすることができます:
# mkdir /boot/syslinux # cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ # /usr/lib/syslinux/bios/ から *.c32 ファイルをすべてコピーします、シンボリックリンクでは駄目です # extlinux --install /boot/syslinux/
この後、次のセクションに書かれているように Syslinux のブートコード (mbr.bin
もしくは gptmbr.bin
) をディスクの Master Boot Record の440バイトのブートコード領域 (MBR や msdos パーティションテーブルとは違います) にインストールしてください。
MBR パーティションテーブル
次にパーティションテーブルで boot パーティションを active にする必要があります。これができるアプリケーションは fdisk
, cfdisk
, sfdisk
, parted/gparted
("boot" フラグ) などです。以下のようにしてください:
# fdisk -l /dev/sda
[...] Device Boot Start End Blocks Id System /dev/sda1 * 2048 104447 51200 83 Linux /dev/sda2 104448 625142447 312519000 83 Linux
MBR をインストールしてください:
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda
Syslinux はもうひとつ MBR を提供しています: altmbr.bin
。この MBR はブータブルパーティションのスキャンをしません。代わりに、MBR の最終バイトを使ってどのパーティションを起動するか示します。以下は altmbr.bin
を所定の位置にコピーする方法の例です:
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | \ dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sda
この場合、シングルバイトの値5が altmbr.bin
の内容に加えられ結果的に440バイトがデバイス sda
の MBR に書き込まれます。Syslinux はディスクの最初の論理パーティション (/dev/sda5
) にインストールされます。
GUID パーティションテーブル
/boot
パーティションでビット2の属性 ("legacy_boot" 属性) を設定する必要があります:
# sgdisk /dev/sda --attributes=1:set:2
このコマンドによってパーティション1の legacy BIOS bootable 属性が切り替わります。確認するには:
# sgdisk /dev/sda --attributes=1:show
1:2:1 (legacy BIOS bootable)
MBR をインストールしてください:
# dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda
このコマンドが動かない時は次のコマンドを試して下さい:
# syslinux-install_update -i -m
UEFI システム
UEFI Syslinux の制限
- UEFI Syslinux のメニューで TAB を使ってカーネルパラメータを編集すると表示がおかしくなる場合があります (text on top of one-another)。バグレポート: [2]
- UEFI Syslinux は
UEFI Shell
やWindows Boot Manager
など他の EFI アプリケーションのチェインロードをサポートしていません。改善リクエスト: [3] - QEMU/OVMF、VirtualBox、一部の VMware 製品/バージョン、DUET などの UEFI エミュレーション環境では UEFI Syslinux は起動しないことがあります。VMware Workstation 10.0.2 と Syslinux-6.02 以上では問題ないとされています。バグレポート: [4]、[5]、[6]
- UEFI では Memdisk は使えません。改善リクエスト: [7]
UEFI でのインストール
- syslinux と efibootmgr パッケージをインストールしてください。そして、以下のように ESP 内に Syslinux をセットアップしてください:
- Syslinux のファイルを ESP にコピーしてください:
# mkdir -p esp/EFI/syslinux # cp -r /usr/lib/syslinux/efi64/* esp/EFI/syslinux
- efibootmgr を使って、Syslinux のブートエントリをセットアップしてください (
/dev/sdXY
は、ブートローダを含むパーティションです):
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --unicode
- #設定 セクションに従って、
esp/EFI/syslinux/syslinux.cfg
を作成/編集してください。
設定
Syslinux の設定ファイル, syslinux.cfg
は Syslinux をインストールしたディレクトリと同じところに作成する必要があります。このページでは、BIOS 環境は /boot/syslinux/
、UEFI 環境は esp/EFI/syslinux/
とします。
ブートローダーは syslinux.cfg
(推奨) もしくは extlinux.conf
を探します。
サンプル
ブートプロンプト
以下の例は、boot:
プロンプトを表示し 5 秒後に自動的に起動するシンプルな設定ファイルです。プロンプトを表示させずに直接起動させたい場合は、PROMPT
を 0
に設定してください。
設定:
* BIOS: /boot/syslinux/syslinux.cfg * UEFI: esp/EFI/syslinux/syslinux.cfg
PROMPT 1 TIMEOUT 50 DEFAULT arch LABEL arch LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux.img LABEL archfallback LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux-fallback.img
テキストブートメニュー
Syslinux ではブートメニューを使うこともできます。ブートメニューを使うには、モジュール menu
と libutil
を Syslinux のディレクトリにコピーしてください:
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/
バージョン 5.00 以降、追加の lib*.c32
ライブラリモジュールも頻繁に必要になります。モジュールの依存関係ツリーは Syslinux wiki を見てください。
設定:
* BIOS: /boot/syslinux/syslinux.cfg * UEFI: esp/EFI/syslinux/syslinux.cfg
UI menu.c32 PROMPT 0 MENU TITLE Boot Menu TIMEOUT 50 DEFAULT arch LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux.img LABEL archfallback MENU LABEL Arch Linux Fallback LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux-fallback.img
メニューシステムに関する詳細は Syslinux wiki を見てください。
グラフィカルブートメニュー
Syslinux では、グラフィカルなブートメニューも使うことができます。グラフィカルなブートメニューを使うには、vesamenu
COM32 モジュールを Syslinux のフォルダーにコピーしてください:
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/
バージョン 5.00 以降、追加の lib*.c32
ライブラリモジュールも頻繁に必要になります。モジュールの依存関係ツリーは Syslinux wiki を見てください。
以下の設定では、Arch のインストール CD と同じメニューデザインを使用します。インストール CD の設定は gitlab.archlinux.org で入手できます。Arch Linux の背景画像もそこからダウンロードできます。画像を /boot/syslinux/splash.png
にコピーしてください。
設定:
* BIOS: /boot/syslinux/syslinux.cfg * UEFI: esp/EFI/syslinux/syslinux.cfg
UI vesamenu.c32 DEFAULT arch PROMPT 0 MENU TITLE Boot Menu MENU BACKGROUND splash.png TIMEOUT 50 MENU WIDTH 78 MENU MARGIN 4 MENU ROWS 5 MENU VSHIFT 10 MENU TIMEOUTROW 13 MENU TABMSGROW 11 MENU CMDLINEROW 11 MENU HELPMSGROW 16 MENU HELPMSGENDROW 29 # https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 を参照 MENU COLOR border 30;44 #40ffffff #a0000000 std MENU COLOR title 1;36;44 #9033ccff #a0000000 std MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all MENU COLOR unsel 37;44 #50ffffff #a0000000 std MENU COLOR help 37;40 #c0ffffff #a0000000 std MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std MENU COLOR msg07 37;40 #90ffffff #a0000000 std MENU COLOR tabmsg 31;40 #30ffffff #00000000 std LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux.img LABEL archfallback MENU LABEL Arch Linux Fallback LINUX ../vmlinuz-linux APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw INITRD ../initramfs-linux-fallback.img
Syslinux 3.84 以降、vesamenu.c32
は MENU RESOLUTION $WIDTH $HEIGHT
ディレクティブをサポートしています。
このディレクティブを使うには、MENU RESOLUTION 1440 900
を設定に追加することで、解像度を 1440x900 に設定できます。
ただし、背景画像が正確に同じ解像度である必要があります。解像度が異なる場合、Syslinux はメニューをロードしません。
メニューを中央に配置し解像度を調整するには、MENU RESOLUTION
、MENU HSHIFT $N
、MENU VSHIFT $N
を使ってください。ただし、$N
は正の数です。デフォルトの $N
の値は両方 0
で、これはモニターの左上を表します。負の値はスクリーンの反対側からとなります (例: VHSHIFT -4
はスクリーンの下から 4 行となります)。
メニューを中央に移動させるには、以下の値を追加/編集してください:
* BIOS: /boot/syslinux/syslinux.cfg * UEFI: esp/EFI/syslinux/syslinux.cfg
MENU RESOLUTION 800 600 # or whatever your screen resolution is MENU WIDTH 78 # width of the menu also required to bring the menu box to size MENU VSHIFT 10 # moves menu down MENU HSHIFT 10 # moves menu right
VESA 規格は、一般的には 25 行 80 列が最大で、これらの値より大きくするとメニューがスクリーンからはみ出し、場合によってはレスキュー CD から設定を編集する羽目になります。
カーネルパラメータ
カーネルパラメータ は、syslinux.cfg
で APPEND
ディレクティブを使って設定します:
それぞれの LABEL
エントリに対して、最大 1 行の APPEND を受け入れます (つまり、複数の行に分けることはできません)。
以下の変更は、「フォールバック」エントリに対しても行っておくことをおすすめします。
最も単純な場合、root
パラメータの値を変更する必要があります。サポートされている形式は 永続的なブロックデバイスの命名 を見てください。
APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw
root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
を変更して、正しいルートボリュームを指定してください。
dm-crypt 暗号化をしている場合、APPEND
の行を変更して、暗号化されているボリュームを使用してください:
APPEND root=/dev/mapper/name cryptdevice=UUID=YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY:name rw
btrfs サブボリュームを起動する場合、APPEND
の行を rootflags=subvol=<root subvolume>
の用に変更してください。例えば、/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
が 'ROOT' という btrfs サブボリュームとしてマウントされている場合 (例: mount -o noatime,subvol=ROOT /dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /mnt
)、APPEND
の行を以下のように変更する必要があります:
APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=ROOT
そうしないと、次のエラーメッセージが表示されるでしょう: ERROR: Root device mounted successfully, but /sbin/init does not exist.
自動ブート
Syslinux のメニューを表示したくない場合は、#ブートプロンプト を使い、PROMPT
を 0
に設定し、すべての UI
メニューエントリをコメントアウトしてください。TIMEOUT
変数を 0
にしても良いでしょう。syslinux.cfg
で DEFAULT
が設定されていることを確認してください。起動時に Shift
または Alt
を押すか、Caps Lock
または Scroll Lock
を有効化することで、デフォルト以外のオプションを使用できるようになります。
他の手段については、上流の wiki を見てください。
セキュリティ
Syslinux には、ブートローダーのセキュリティとして2つのレベルがあります: メニューのマスターパスワードとメニューアイテムごとのパスワードです。syslinux.cfg
を編集して、以下のようにブートローダーのマスターパスワードを設定できます:
MENU MASTER PASSWD passwd
また、LABEL
ブロックの中に以下を記述することでブートアイテムを個別にパスワードで保護できます:
MENU PASSWD passwd
passwd は平文かハッシュ値のどちらかを設定できます: 公式のドキュメントを参照してください。
チェインロード
Syslinux BIOS は他のパーティションからファイルを直接チェインロードできませんが、chain.c32
はパーティションのブートセクタ (VBR) や他のディスクの MBR を起動できます。
パーティションの VBR をチェインロードする
他のオペレーティングシステム (Windows など) やブートローダをチェインロードしたい場合は、chain.c32
モジュールを Syslinux ディレクトリにコピーしてください (追加の lib*.c32
ライブラリモジュールも必要かもしれません。前のセクションの指示を見てください)。そして設定ファイルにセクションを作成してください:
/boot/syslinux/syslinux.cfg
... LABEL windows MENU LABEL Windows COM32 chain.c32 APPEND hd0 3 ...
hd0 3
は、1つ目の BIOS ドライブ上の3つ目のパーティションを指します。ドライブは0からカウントしますが、パーティションは1からカウントします。
ディスクの MBR をチェインロードする
BIOS がどのドライブを "最初" とみなすかわからない場合は、代わりに MBR 識別子を (GPT を使用している場合はファイルシステムラベル) 使うこともできます。MBR 識別子を使うには、以下のコマンドを実行してください (/dev/sdb
はチェインロードしたいドライブに置き換えてください):
# fdisk -l /dev/sdb
Disk /dev/sdb: 128.0 GB, 128035676160 bytes 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf00f1fd3 Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT /dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT
ディスク識別子では16進数を使用します (この例では 0xf00f1fd3
)。syslinux.cfg
の構文は以下のようになります:
/boot/syslinux/syslinux.cfg
... LABEL windows MENU LABEL Windows COM32 chain.c32 APPEND mbr:0xf00f1fd3 ...
チェインロードに関する詳細は Syslinux wiki を見てください。
他のブートローダをチェインロードする
同じパーティションに GRUB がインストールされている場合、以下の設定を使用して GRUB をチェインロードできます:
/boot/syslinux/syslinux.cfg
... LABEL grub2 MENU LABEL Grub2 COM32 chain.c32 APPEND file=../grub/boot.img ...
あるいは、lnxboot.img
を core.img
の前に付けて GRUB を Linux カーネルとしてロードすることもできます。lnxboot.img
ファイルは core/grub
の一部で、/usr/lib/grub/i386-pc
の中にあります。
/boot/syslinux/syslinux.cfg
... LABEL grub2lnx MENU LABEL Grub2 (lnxboot) LINUX ../grub/i386-pc/lnxboot.img INITRD ../grub/i386-pc/core.img ...
これは、ISO イメージから起動する場合に必要になるかもしれません。
他の Linux システムをチェインロードする
Windows など他のブートローダをチェインロードする場合、チェインするべきブートローダが明白に存在します。しかし Syslinux では、設定ファイルと同じパーティションにあるファイルしかロードすることができません。そのため、Linux の他バージョンを異なるパーティションに置いている (/boot
を使っていない) ときは、他の OS のブートローダ (例: GRUB2) ではなく Extlinux を利用する必要がでてきます。基本的に、Extlinux はパーティションのスーパーブロック/VBR にインストールができ、Syslinux によってインストールされた MBR から 異なるブートローダ として呼ぶことができます。Extlinux は Syslinux プロジェクトの一部であり syslinux パッケージに含まれています。
以下の手順は既に Syslinux がインストールされていることを前提にしています。また、/boot/syslinux
の Arch Linux 設定パスを使っていてチェインロード /
は /dev/sda3
にあると仮定しています。
起動した Linux (Syslinux が起動するように設定されたパーティション) から、他の root パーティションを適当なマウントポイントにマウントしてください。ここでは例として /mnt
を使います。また、2番目のオペレーティングシステムで /boot
パーティションを分割している場合、それもマウントする必要があります。ここでは /dev/sda2
がそのパーティションとします。
# mount /dev/sda3 /mnt # mount /dev/sda2 /mnt/boot (only necessary for separate /boot)
Extlinux をインストールして、必要な *.c32
ファイルをコピーしてください:
# extlinux -i /mnt/boot/syslinux/ (first create the directory if necessary) # cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux
/mnt/boot/syslinux/syslinux.cfg
を作成してください。他の Linux のブートメニューファイルを参考にすることができます。以下は例です:
/mnt/boot/syslinux/syslinux.cfg on /dev/sda3
TIMEOUT 10 UI menu.c32 LABEL OtherLinux LINUX /boot/vmlinuz-linux INITRD /boot/initramfs-linux.img APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw quiet LABEL MAIN COM32 chain.c32 APPEND hd0 0
そしてメインの syslinux.cfg
にエントリを追加してください:
/boot/syslinux/syslinux.cfg
LABEL OtherLinux COM32 chain.c32 APPEND hd0 3
<other-OS>/boot/syslinux/syslinux.cfg
にある他の Linux エントリは、/
内の最新のカーネルと initrd へのシンボリックリンクを貼らない限り、その OS のカーネルがアップデートされるたびに編集する必要があります。カーネルを直接ブートし、他の OS のデフォルトのブートローダをチェインロードしないからです。
memtest を使う
公式リポジトリから memtest86+ をインストールしてください。
LABEL
セクションを使って memtest を起動してください:
/boot/syslinux/syslinux.cfg
... LABEL memtest MENU LABEL Memtest86+ LINUX ../memtest86+/memtest.bin ...
HDT
HDT (Hardware Detection Tool) はハードウェアの情報を表示します。.c32
ファイルを /boot/syslinux/
からコピーする必要があります。
PCI 情報は、/usr/share/hwdata/pci.ids
を /boot/syslinux/pci.ids
にコピーしてから以下を設定ファイルに追加してください:
/boot/syslinux/syslinux.cfg
LABEL hdt MENU LABEL Hardware Info COM32 hdt.c32
再起動と電源オフ
以下のセクションを使ってマシンを再起動したり電源オフにできます:
/boot/syslinux/syslinux.cfg
LABEL reboot MENU LABEL Reboot COM32 reboot.c32 LABEL poweroff MENU LABEL Power Off COMBOOT poweroff.com
メニューをクリアする
メニューを終了した時に画面をクリアするには、次の行を追加してください:
/boot/syslinux/syslinux.cfg
MENU CLEAR
キーボードリマッピング
ブートパラメータを頻繁に編集する必要があるような場合、キーボードレイアウトのリマップを行うとよいかもしれません。US キーボード以外で "=", "/" などの文字を打つのが楽になります。
まず互換性のあるキーマップ (例えばドイツ語キーマップ) を作成するには:
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl
syslinux.cfg
を編集して以下を追加してください:
/boot/syslinux/syslinux.cfg
KBDMAP de.ktl
詳しくは Syslinux wiki を参照してください。
メニューを隠す
このオプションを使うことでメニューを隠し、タイムアウトだけを表示することができます:
/boot/syslinux/syslinux.cfg
MENU HIDDEN
どれかキーを押すとメニューが表示されます。
PXELINUX
PXELINUX は syslinux に含まれています。
BIOS クライアントの場合は、lpxelinux.0
と ldlinux.c32
をクライアントのブート ディレクトリにコピーします。
# cp /usr/lib/syslinux/bios/lpxelinux.0 "TFTP_root/boot/" # cp /usr/lib/syslinux/bios/ldlinux.c32 "TFTP_root/boot/" # mkdir "TFTP_root/boot/pxelinux.cfg"
また、pxelinux.cfg
を作成しましたが、このフォルダはデフォルトで pxelinux によって設定ファイルが検索されます。異なるホスト MAC を区別したくないので、default
設定を作ります。
TFTP_root/boot/pxelinux.cfg/default
default linux label linux kernel vmlinuz-linux append initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch
NBD を使っている場合、次の append 行を使って下さい:
append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_name=arch root=/dev/nbd0
pxelinux の設定構文は syslinux と同じです; 詳しくは上流のドキュメントを参照してください。
カーネルと initramfs は TFTP を使って転送されます。そのためそれらのパスは TFTP の相対パスになります。また、root ファイルシステムは NFS マウントになり、NFS サーバーの相対パスになります。
実際に pxelinux をロードするには、/etc/dhcpd.conf
内の filename "/grub/i386-pc/core.0";
を filename "/pxelinux.0"
に置き換えてください。
memdisk を使って ISO9660 イメージファイルを起動
Syslinux は memdisk モジュールを使って ISO イメージを直接起動できます。詳しくはマルチブート USB ドライブ#Syslinux と memdisk を使うを参照。
シリアルコンソール
シリアルコンソールを有効にするには syslinux.cfg
ファイルの一番上に SERIAL port [baudrate]
を追加します。"port" はポート番号 (/dev/ttyS0
の場合は 0) に置き換えてください。"baudrate" を省略すると、デフォルトのボーレートである 9600 bps が使われます。シリアルパラメータはパリティビット無しストップビットひとつの8ビットにハードコードされています [8]。
syslinux.cfg
SERIAL 0 115200
APPEND
オプションに console=tty0 console=ttyS0,115200n8
を追加することで起動時にカーネルでシリアルコンソールを有効にできます [9]:
syslinux.cfg
APPEND root=UUID=126ca36d-c853-4f3a-9f46-cdd49d034ce4 rw console=tty0 console=ttyS0,115200n8
GRUB でシリアルコンソールを有効にする方法はシリアルコンソールを見てください。
一度だけ別の OS をブートする
一時的に Syslinux のデフォルト動作を変更し、次回のブート時にのみ別のラベルをブートすることができます。以下のコマンドは、次回のブート時に archfallback
ラベルを一度だけブートする方法を示しています:
# extlinux -o archfallback /boot/syslinux
次回のブート時に、指定されたラベルが Syslinux のプロンプトを表示せずにブートされます。次回の再起動で、Syslinux のデフォルトのブート動作が復元されます。
トラブルシューティング
Failed to load ldlinux
起動時に "Failed to load ldlinux.c32" というエラーメッセージが表示される理由は様々なものが考えられます。ファイルシステムツールやファイルシステムの構造の変化がそのひとつです。例えば、新しい ext4 ファイルシステムでは64ビット機能がデフォルトで有効になっています (古いバージョンの mke2fs では手動で設定する必要がある機能でした)。ext4 以外のファイルシステムでも構造やツールに変更が加えられることがあり、ブートローダーの挙動に影響します。
詳しくは [10] を参照してください。
Syslinux プロンプトを使う
(syslinux.cfg
で設定した) 起動したいエントリの LABEL
名を入力することができます。サンプル設定を使っている場合、次を入力してください:
boot: arch
設定ファイルがロードできないというエラーが表示される場合、必要なブートパラメータを渡すことができます。例:
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img
ramfs の boot:
にアクセスできないと、一時的にカーネルを起動することができません。
- 1. root パーティションをマウントするために、一時ディレクトリを作成して下さい (存在しない場合):
# mkdir -p /new_root
- 2.
/new_root
に/
をマウントしてください (/boot/
が同じパーティション上にある場合。他のパーティションにあるときは両方マウントする必要があります):
# mount /dev/sd[a-z][1-9] /new_root
- 3.
vim
を使って必要に応じてsyslinux.cfg
を編集しファイルを保存してください。 - 4. 再起動してください。
Fsck が root パーティションで失敗する
root パーティションが破損している (ジャーナルが壊れている) 場合、ramfs の緊急シェルで、root ファイルシステムをマウントしてください:
# mount /dev/root partition /new_root
そして root パーティションから tune2fs バイナリを取得してください (Syslinux には含まれていません):
# cp /new_root/sbin/tune2fs /sbin/
ext2fs: no external journal の指示に従って root パーティションの新しいジャーナルを作成して下さい。
No Default or UI found on some computers
特定のマザーボードメーカーでは USB デバイスからの起動への対応が遅れています。最近のコンピュータでは起動できる ext4 でフォーマットされた USB ドライブでも、カーネルや initrd が含まれているブートパーティションが FAT16 パーティションでないとフリーズするコンピュータもあります。旧式のマシンが ldlinux
をロードして syslinux.cfg
の読み込みに失敗するのを防ぐには、cfdisk
を使って (2GB 以下の) FAT16 パーティションを作成して dosfstools を使ってフォーマットしてください:
# mkfs.msdos -F 16 /dev/sda1
それから Syslinux をインストール・設定してください。
Missing operating system
このメッセージが表示されるときは、/boot
が含まれているパーティションの boot フラグが有効になっているか確認してください。フラグが有効になっている場合、おそらくパーティションがセクタ63や2048でなく1から始まっています。fdisk -l
で開始セクタを確認してください。セクタ1から始まっている場合は、レスキューディスクの gparted
を使ってパーティションを移動することができます。もしくは、boot パーティションを分割しているのなら、次のコマンドで /boot
をバックアップして Arch のインストールディスクで起動することができます:
# cp -a /boot /boot.bak
次に、cfdisk
を使って /boot
パーティションを削除して、再作成してください。この時パーティションを正しいセクタ 63 から開始してください。ビギナーズガイドに記述されているようにパーティションをマウントして、マウントしたシステムに chroot
してください。次のコマンドで /boot
を復元します:
# cp -a /boot.bak/* /boot
/etc/fstab
が問題ないかどうか確認して、次のコマンドを実行して再起動してください:
# syslinux-install_update -iam
md RAID 1 アレイから起動しようとして Syslinux が理解しない新しいバージョンのメタデータを使ってアレイを作成した場合にもこのエラーが表示されます。2013年8月現在、mdadm はデフォルトでバージョン 1.2 のメタデータでアレイを作成しますが、Syslinux は 1.0 以上の新しいメタデータを理解しません。この場合、--metadata=1.0
フラグを使って mdadm で RAID アレイを再生成する必要があります。
Syslinux を無視して Windows が起動する
解決方法: /boot
を含むパーティションのブートフラグが有効になっているか確認してください。また、Windows パーティションのブートフラグは無効にする必要があります。上のインストールセクションを参照してください。
Syslinux に含まれている MBR はブートフラグが設定されている一番最初の active なパーティションを検索します。おそらく最初に Windows のパーティションが認識されてしまっています。必要であれば、Windows や MS-DOS の fdisk
による MBR を使うことができます。
メニューエントリが動作しない
メニューエントリを選択しても何も起こらない場合、メニューを"更新"するだけになっています。おそらく syslinux.cfg
ファイルにエラーが存在しています。Tab
を押してブートパラメータを編集してください。もしくは、Esc
を押してブートエントリの LABEL
を入力してください (例: arch)。
ldlinux.sys を削除できない
ldlinux.sys
ファイルには immutable 属性が設定されるので、削除したり上書きすることができません。これはファイルのセクター位置が変わってしまうと Syslinux を再インストールする必要があるからです。ファイルを削除するには、以下を実行してください:
# chattr -i /boot/syslinux/ldlinux.sys # rm /boot/syslinux/ldlinux.sys
問題: linux-3.0 現在、modesetting ドライバーは解像度が変更された後もディスプレイの表示内容を保持しようとします (テキストモードの Syslinux で Intel のグラフィックチップを使っている場合に確認)。Syslinux の vesamenu モジュールと組み合わさると問題が発生します (白いブロックは Syslinux のメニューを保持しようとしたものですが、ドライバーは vesa グラフィックモードから画像を取得できていません)。
初期モードセッティングでカスタム解像度と vesamenu
を使用している場合、以下の設定を syslinux.cfg
に追加してみてください:
APPEND root=/dev/sda6 rw 5 vga=current quiet splash
Windows を他のドライブにインストールしている時に、チェインロードが動作しない
Windows を Arch とは別のドライブにインストールしていてチェインロードに問題が起こるときは、以下の設定を試して下さい:
LABEL Windows MENU LABEL Windows COM32 chain.c32 APPEND mbr:0xdfc1ba9e swap
mbr コードはあなたの windows ドライブのものに置き換えて (詳しくは上を参照)、swap
をオプションに追加してください。
ブートローダーログの読み取り
いくつかのケース(例:ブートローダーがカーネルをブートできない場合)では、ブートプロセスからより多くの情報を取得することが非常に望ましいです。Syslinux はエラーメッセージを画面に表示しますが、ブートメニューがすぐにテキストを上書きしてしまいます。ログ情報を失わないようにするために、syslinux.cfg
で UI menu
を無効にし、デフォルトの「コマンドライン」プロンプトを使用します。具体的には:
UI
ディレクティブを避けるONTIMEOUT
を避けるONERROR
を避けるMENU CLEAR
を避ける- 高い
TIMEOUT
を使用する PROMPT 1
を使用するDEFAULT problematic_label
を使用する
より詳細なデバッグログを取得するには、追加の CFLAGS で syslinux パッケージを再コンパイルします:
-DDEBUG_STDIO=1 -DCORE_DEBUG=1
Btrfs の圧縮
圧縮が有効になっている btrfs からの起動はサポートされていません [11]。以下のエラーが表示されます:
btrfs: found compressed data, cannot continue! invalid or corrupt kernel image.
Btrfs のマルチデバイス
マルチデバイス Btrfs からの機能はサポートされていません [12] (main.c の validate_device_btrfs() の1246行目)。以下のようなエラーが表示されます:
/boot/syslinux is device /dev/sda1 extlinux: path /boot/syslinux doesn't match device /dev/sda1