# Syslinux (日本語)

関連記事

- Arch Boot Process
- ブートローダー

Syslinux はハードドライブや CD、PXE を介したネットワークなどから起動できるブートローダの集合です。FAT, ext2, ext3, ext4, Btrfs ファイルシステムをサポートしています。

Warning: BTRFS ボリュームで Syslinux 6.02 を使うとスーパーブロックが破壊されます。これは Syslinux の changelog に書かれています。
Note:

- Syslinux (バージョン 6.02 現在, BIOS と UEFI 両方で) は (GRUB とは違って) 他のパーティションのファイルにアクセスすることができません。(multi-fs と呼ばれる) この機能は上流で実装される予定です。multi-fs 機能の手助けをしたいのなら、上流に連絡 してください。
- Syslinux 4.xx (または 5.xx) から 6.xx バージョンにアップグレードするときは、Syslinux BIOS を #手動インストール に従って（インストールスクリプトを使わずに）手動で（アップデートではなく）再インストールしてください。インストールスクリプトは Syslinux を 6.xx バージョンに正しくアップグレードすることができません。

## BIOS 環境

### Syslinux ブートプロセス

1. MBR をロード。起動時、BIOS はディスクの一番最初にある440バイトの MBR ブートコードをロードします (`/usr/lib/syslinux/bios/mbr.bin` もしくは `/usr/lib/syslinux/bios/gptmbr.bin`)。
2. アクティブパーティションを検索。MBR はアクティブになっているパーティションを探します (ブートフラグ)。ここでは `/boot` パーティションを例として使います。
3. ボリュームブートレコードを実行。パーティションが見つかったら、パーティションのボリュームブートレコード (VBR) が実行されます。Syslinux では、VBR ブートコードは `extlinux --install` によって作られる `/boot/syslinux/ldlinux.sys` の最初のセクタになります。`ldlinux.sys` と `ldlinux.c32` は違うので注意してください。
4. `/boot/syslinux/ldlinux.sys` を実行。VBR が残りの `/boot/syslinux/ldlinux.sys` を起動します。`/boot/syslinux/ldlinux.sys` のセクタ位置が変更されている場合、Syslinux は起動しません。
   Note: Btrfs の場合、ファイルが移動した時に `ldlinux.sys` のセクタ位置が変わってしまうため上の方法は動作しません。従って、Btrfs では他のファイルシステムと異なり、`ldlinux.sys` コード全体を `/boot/syslinux/ldlinux.sys` にインストールする代わりに VBR の後の 64KB の領域に埋め込みます。
5. `/boot/syslinux/ldlinux.c32` をロード。`/boot/syslinux/ldlinux.sys` は syslinux の残りのコアを含んでいる `/boot/syslinux/ldlinux.c32` (コアモジュール) をロードします (ファイルサイズの制限のため `ldlinux.sys` に入らないもの)。`ldlinux.c32` は全ての syslinux/extlinux で必須でありパーティションにインストールされている `ldlinux.sys` とバージョンが一致している必要があります。そうないと Syslinux が起動しません。詳しくは http://bugzilla.syslinux.org/show_bug.cgi?id=7 を見て下さい。
6. 設定ファイルを検索・ロード。Syslinux が完全にロードされると、設定ファイル `/boot/syslinux/syslinux.cfg` (もしくは `/boot/syslinux/extlinux.conf`) が検索されます。設定ファイルが見つかったら、ロードを行います。設定ファイルが存在しない場合、Syslinux の `boot:` プロンプトが表示されます。

### インストール

- 公式リポジトリから syslinux パッケージをインストールしてください。

    # pacman -S syslinux

Note:

- Syslinux 4 から Extlinux と Syslinux は同じになりました。
- 自動スクリプトによる GPT サポートには gptfdisk が必要です。
- boot パーティションが FAT にある場合、mtools もインストールする必要があります。

#### 自動インストール

Note: `syslinux-install_update` スクリプトは Arch 特有のものです。Syslinux の上流では提供・サポートされていません。このスクリプトに関わるバグレポートは上流ではなく Arch のバグトラッカーに送って下さい。

`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` を作成・編集してください。

Note:

- ここでシステムを再起動すると、Syslinux プロンプトが表示されます。自動でシステムを起動したりブートメニューを表示するには、設定ファイルを作成する必要があります。
- ディスクをクローンして `/mnt/clone` と読んでいる場合、Arch インストールメディアから次のコマンドを実行して syslinux をインストールしてください:

    # syslinux-install_update.sh -i -a -m -c /mnt/clone

#### 手動インストール

Note:

- 使っているパーティションテーブルがどっちか (MBR か GPT か) 定かでない場合は、次のコマンドを使うことで確認できます:

    # blkid -s PTTYPE -o value /dev/sda
    gpt

- ライブ CD でインストール済みのシステムを復旧しようとしているのならば、これらのコマンドの前に chroot をするようにしてください。chroot を最初にしない場合、(`/dev/` パスではない) 全てのファイルパスでマウントポイントを前に付ける必要があります。

Syslinux をインストールする boot パーティションには FAT, ext2, ext3, ext4, Btrfs のいずれかのファイルシステムを含んでなくてはなりません。マウントしたディレクトリ (`/dev/sdXY` デバイスではありません) にインストールしてください。ファイルシステムの root ディレクトリにインストールする必要はありません (例: `/boot` にマウント。したデバイス `/dev/sda1`)。Syslinux を `syslinux` ディレクトリにインストールすることができます:

    # mkdir /boot/syslinux
    # cp -r /usr/lib/syslinux/bios/*.c32 /boot/syslinux/                          ## copy ALL the *.c32 files from /usr/lib/syslinux/bios/, DO NOT SYMLINK
    # extlinux --install /boot/syslinux

この後、次のセクションに書かれているように Syslinux のブートコード (`mbr.bin` もしくは `gptmbr.bin`) をディスクの Master Boot Record の440バイトのブートコード領域 (MBR や msdos パーティションテーブルとは違います) にインストールしてください。

##### MBR パーティションテーブル

次の記事を参照してください: Master Boot Record (日本語)

次にパーティションテーブルで 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 パーティションテーブル

次の記事を参照してください: GUID Partition Table (日本語)

`/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 環境

Note:

- UEFI は Syslinux 6.xx 以降でサポートされています。

- 以下のコマンド中にある `$esp` は ESP (EFI System Partition) のマウントポイントを示しています。

- `efi64` は x86_64 UEFI システムを意味しています。IA32 (32-bit) EFI では、下のコマンド中の `efi64` を `efi32` に置き換えてください。

- syslinux では、自分のパーティションの外 (つまりこの場合 ESP の外) のファイルに syslinux がアクセスできないために、カーネルと initramfs ファイルを ESP に含める必要があります。このために、ESP を `/boot` にマウントすることが推奨されています。

- 自動インストールスクリプト `/usr/bin/syslinux-install_update` は UEFI インストールをサポートしていません。

- UEFI での `syslinux.cfg` の設定構文は BIOS と同じです。

### UEFI Syslinux の制限

- UEFI Secure Boot のために UEFI Syslinux アプリケーション `syslinux.efi` を (sbsigntool の) `sbsign` で署名することはできません。バグレポート - http://bugzilla.syslinux.org/show_bug.cgi?id=8

- UEFI Syslinux のメニューで TAB を使ってカーネルパラメータを編集すると表示がおかしくなります (text on top of one-another)。バグレポート - http://bugzilla.syslinux.org/show_bug.cgi?id=9

- UEFI Syslinux は `UEFI Shell` や `Windows Boot Manager` など他の EFI アプリケーションのチェインロードをサポートしていません。バグレポート - http://bugzilla.syslinux.org/show_bug.cgi?id=17

- QEMU/OVMF や VirtualBox、VMwareUEFI などの仮想環境や DUET などの UEFI エミュレーション環境では Syslinux は起動しません。バグレポート - http://bugzilla.syslinux.org/show_bug.cgi?id=21 and http://bugzilla.syslinux.org/show_bug.cgi?id=23

- UEFI では Memdisk は使えません。バグレポート - http://bugzilla.syslinux.org/show_bug.cgi?id=30

### インストール

- syslinux パッケージをインストールして EFI System Partition (ESP) で syslinux をセットアップしてください:

    # pacman -S syslinux

- syslinux ファイルを ESP にコピーしてください:

    # mkdir -p $esp/EFI/syslinux
    # cp -r /usr/lib/syslinux/efi64/* $esp/EFI/syslinux

- efibootmgr を使って Syslinux のブートエントリを設定してください:

    # mount -t efivarfs efivarfs /sys/firmware/efi/efivars
    # efibootmgr -c -d /dev/sdX -p Y -l /EFI/syslinux/syslinux.efi -L "Syslinux"

- #設定 に従って `$esp/EFI/syslinux/syslinux.cfg` を作成・編集してください。

Note: UEFI での設定ファイルは `$esp/EFI/syslinux/syslinux.cfg` であり、`/boot/syslinux/syslinux.cfg` ではありません。`/boot/syslinux/` 内のファイルは BIOS 用で UEFI syslinux とは関係ありません。

## 設定

Syslinux の設定ファイル, `syslinux.cfg` は Syslinux をインストールしたディレクトリと同じところに作成する必要があります。このページでは、BIOS 環境は `/boot/syslinux/`、UEFI 環境は `$esp/EFI/syslinux/` になります。

ブートローダは `syslinux.cfg` (推奨) もしくは `extlinux.conf` を探します。

Tip:

- `LINUX` の代わりに、キーワード `KERNEL` を使うことも可能です。`KERNEL` はファイルのタイプを検知しようとしますが、`LINUX` はいつでも Linux カーネルと想定します。
- `TIMEOUT` の値の単位は1秒の1/10です。

### サンプル

#### 基本設定

このシンプルな設定ファイルは `boot:` プロンプトを表示して5秒後に自動でブートします。

Note: The partition in question needs to be whatever you have as `/` (root), not `/boot`.

設定:

    /boot/syslinux/syslinux.cfg

     PROMPT 1
     TIMEOUT 50
     DEFAULT arch

     LABEL arch
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

プロンプトを表示しないで直接ブートしたい場合、`PROMPT` を `0` に設定してください。

デバイス名の代わりに UUID を使って永続的なデバイスの命名をしたい場合は、`APPEND` 行を変更して root パーティションの `UUID` と同じにしてください:

    APPEND root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff rw

暗号化 LUKS を使う場合、`APPEND` 行を暗号化されたボリュームを使うように変更してください:

    APPEND root=/dev/mapper/group-name cryptdevice=/dev/sda2:name rw

mdadm を使ってソフトウェア RAID を利用している場合、`APPEND` 行を変更して RAID アレイを記述してください。例えば3つの RAID1 アレイがあってどれかひとつを root に設定する場合:

    APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4

上のカーネルデバイスノードを使ったソフトウェア raid パーティションからの起動が失敗する場合、もっと信頼性のある方法としてパーティションラベルを使う方法があります:

    APPEND root=LABEL=THEROOTPARTITIONLABEL rw

#### テキストブートメニュー

Syslinux ではブートメニューを使うことも可能です。ブートメニューを使うには、`menu` モジュールを Syslinux ディレクトリにコピーしてください:

    # cp /usr/lib/syslinux/bios/menu.c32 /boot/syslinux/

設定:

    /boot/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=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             MENU LABEL Arch Linux Fallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

メニューシステムの詳細は Syslinux のドキュメント を見て下さい。

#### グラフィカルブートメニュー

Syslinux ではグラフィカルなブートメニューを使うことも可能です。グラフィカルなメニューを使うには、`vesamenu` COM32 モジュールを Syslinux フォルダにコピーしてください:

    # cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/

Note: UEFI を使用する場合は `/usr/lib/syslinux/efi64/` (i686 環境なら `efi32`) からコピーしてください。そうしないとブランクスクリーンが表示されます。そうなってしまった場合は、ライブメディアから起動して chroot を使って適切な変更を施して下さい。

この設定は Arch Install CD と同じメニューデザインを使っています。背景ファイルもここになります。この設定を使ってあなたのシステムをブートできるようにするために、正しいパーティションが使われているか確認してください。

設定:

    /boot/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

     # Refer to http://www.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=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             MENU LABEL Arch Linux Fallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

Syslinux 3.84 から、`vesamenu.c32` は `MENU RESOLUTION $WIDTH $HEIGHT` ディレクティブをサポートしています。 これを使うには、1440x900 の解像度なら設定に `MENU RESOLUTION 1440 900` を挿入してください。 背景画像も適切な解像度にする必要があります。そうしないと Syslinux はメニューをロードしません。

### 自動ブート

Syslinux のメニューを表示したくない場合は、`syslinux.cfg` 内の `UI` コマンドを全てコメントアウトして `DEFAULT` を設定してください。

### チェインロード

Note: Syslinux BIOS は他のパーティションからファイルを直接チェインロードできませんが、`chain.c32` はパーティションのブートセクタ (VBR) を起動できます。

他のオペレーティングシステム (Windows など) やブートローダをチェインロードしたい時は、`chain.c32` モジュールを Syslinux ディレクトリにコピー（もしくはシンボリックリンクを作成）してください (詳しくは、前のセクションの説明を参照してください)。そして設定ファイルにセクションを作成してください:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL windows
             MENU LABEL Windows
             COM32 chain.c32
             APPEND hd0 3
    ...

`hd0 3` は最初の BIOS ドライブの3つ目のパーティションです - ドライブは0から数えますが、パーティションは1からになります。

BIOS がどのドライブを"最初"と考えるのかわからない場合は、代わりに MBR identifier (GPT を使っている場合、ファイルシステムラベル) を使うことができます。MBR identifier を使うには、次のコマンドを実行してください:

    # 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

`/dev/sdb` をチェインロードしたいドライブに置き換えてください。Disk identifier には16進数が使われます: この場合 `0xf00f1fd3` です。`syslinux.cfg` の構文は:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL windows
             MENU LABEL Windows
             COM32 chain.c32
             APPEND mbr:0xf00f1fd3
    ...

チェインロードの詳細は Syslinux の wiki を参照してください。

同じパーティションに GRUB をインストールした場合は、以下でチェインロードすることが可能です:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL grub2
            MENU LABEL Grub2
            COM32 chain.c32
            append file=../grub/boot.img
    ...

これは ISO イメージから起動するのに必要になるかもしれません。

### 他の Linux システムをチェインロードする

Windows など他のブートローダをチェインロードする場合、チェインするべきブートローダが明白に存在します。しかし Syslinux では、設定ファイルと同じパーティションにあるファイルしかロードすることができません。そのため、Linux の他バージョンを異なるパーティションに置いている (`/boot` を使っていない) ときは、Extlinux を利用する必要がでてきます。基本的に、Extlinux はパーティションのスーパーブロックにインストールができ、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
    # cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux

`/mnt/boot/syslinux/syslinux.cfg` を作成してください。例:

    /boot/syslinux/syslinux.cfg on /dev/sda3

    timeout 10

    ui menu.c32

    label Other Linux
        linux /boot/vmlinuz-linux
        initrd /boot/initramfs-linux.img
        append root=/dev/sda3 rw quiet

    label MAIN
        com32 chain.c32
        append hd0 0

参照: Djgera の user wiki ページ。

### memtest を使う

公式リポジトリから memtest86+ をインストールしてください。

`LABEL` セクションを使って memtest を起動してください:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL memtest
             MENU LABEL Memtest86+
             LINUX ../memtest86+/memtest.bin
    ...

Note: pxelinux を使用する場合は、memtest.bin から memtest に名前を変えて下さい。pxelinux は .bin 拡張子のファイルをブートセクタとして扱うのでファイルの 2KB しかロードしません。

### 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 キーボード以外で "=", "/" などの文字を打つのが楽になります。

まず互換性のあるキーマップ (例えば German) を作成する必要があります:

    # cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz ./
    # cp /usr/share/kbd/keymaps/i386/qwertz/de.map.gz ./
    # gunzip {de,us}.map.gz
    # mv de.{,k}map
    # mv us.{,k}map
    # keytab-lilo de > de.ktl

最後のコマンドは root で実行してください、そうしないと動きません。

root で `de.ktl` を `/boot/syslinux/` にコピーして所有者を root に設定してください:

    # chown root:root /boot/syslinux/de.ktl

`syslinux.conf` を編集して以下を追加してください:

    /boot/syslinux/syslinux.cfg

     KBDMAP de.ktl

### メニューを隠す

このオプションを使うことでメニューを隠し、タイムアウトだけを表示することができます:

    /boot/syslinux/syslinux.cfg

     MENU HIDDEN

どれかキーを押すとメニューが表示されます。

### Pxelinux

Note: 今のところ Syslinux には UEFI ネットワークスタックがないので、(GRUB では使うことができる) syslinux-efi-git を使うことができませんがカーネルや initramfs に tftp を使うことは可能です。pxelinux はレガシーな PXE ブートでは問題なく動作します。

Pxelinux は syslinux に含まれています。

(syslinux パッケージによって提供されている) pxelinux ブートローダをクライアントの boot ディレクトリにコピーしてください。

    # cp /usr/lib/syslinux/bios/pxelinux.0 "$root/boot"
    # mkdir "$root/boot/pxelinux.cfg"

また、`pxelinux.cfg` を作成しましたが、このフォルダはデフォルトで pxelinux によって設定ファイルが検索されます。異なるホスト MAC を区別したくないので、`default` 設定を作ります。

    # vim "$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

Note: `nbd_host` や `nfsroot` をあなたのネットワーク設定にあわせてそれぞれ変更する必要があります (NFS/NBD サーバーのアドレス)。

pxelinux の設定構文は syslinux と同じです; 詳しくは上流のドキュメントを参照してください。

カーネルと initramfs は TFTP を使って転送されます。そのためそれらのパスは TFTP の相対パスになります。また、root ファイルシステムは NFS マウントになり、NFS サーバーの相対パスになります。

実際に pxelinux をロードするには、`/etc/dhcpd.conf` 内の `filename "/grub/i386-pc/core.0";` を `filename "/pxelinux.0"` に置き換えてください。

## トラブルシューティング

### 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/` が同じパーティション上にある場合。他のパーティションにあるときは両方マウントする必要があります):

Note: Busybox cannot mount `/boot` if it is on its own ext2 partition.

     # 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

Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted USB drive may boot on a more recent computer, some computers may hang if the boot partition containing the kernel and initrd are not on a FAT16 partition. To prevent an older machine from loading `ldlinux` and failing to read `syslinux.cfg`, use `cfdisk` to create a FAT16 partition (<=2GB) and format using dosfstools:

    # mkfs.msdos -F 16 /dev/sda1

then install and configure 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 パーティションのブートフラグは無効にする必要があります。上のインストールセクションを参照してください。

The MBR that comes with Syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS `fdisk` provides.

### メニューエントリが動作しない

メニューエントリを選択しても何も起こらない場合、メニューを"更新"するだけになっています。おそらく `syslinux.cfg` ファイルにエラーが存在しています。`Tab` を押してブートパラメータを編集してください。もしくは、`Esc` を押してブートエントリの `LABEL` を入力してください (例: arch)。

### ldlinux.sys を削除できない

`ldlinux.sys` ファイルには immutable 属性が設定されるので、削除したり上書きすることができません。これはファイルのセクター位置が変わってしまうと Syslinux を再インストールする必要があるからです。ファイルを削除するには、以下を実行してください:

    # chattr -i /boot/syslinux/ldlinux.sys
    # rm /boot/syslinux/ldlinux.sys

### vesamenu の使用時に白いブロックが左上に現れる

Problem: As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having Syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in Syslinux (the white block is actually an attempt to keep the Syslinux menu, but the driver fails to capture the picture from vesa graphics mode).

If you have a custom resolution and a `vesamenu` with early modesetting, try to append the following in `syslinux.cfg` to remove the white block and continue in graphics mode:

    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` をオプションに追加してください。

## 参照

- 公式ウェブサイト
- PXELinux configuration
- Multiboot USB using Syslinux

Category:

- Boot loaders (日本語)