古いPCのUbuntuデュアルブートで grub-install が止まる(blocklists 問題と対処)

当記事内にアフィリエイトリンクを含みます
  • URLをコピーしました!

CPUが古くWindows 11に更新できない2011年製のノートパソコン(Let’s note CF-J10)に、Ubuntu 26.04 LTS を入れました。手順は別記事にまとめてあります。

【初心者向け】古いパソコンにLinux(Ubuntu)を導入する

このとき、入っていた Windows 10(出荷時の Windows 7 から更新)も消さずに、起動時にどちらのOSで立ち上げるかを選べるデュアルブートにしようとしました。ところがインストール終盤で grub-install: error: will not proceed with blocklists が出て、インストーラーがエラー画面のまま止まりました。

GRUB をディスクに書き込む grub-install というコマンドが出したエラーで、この書き込みが標準の方法ではできず、代わりの blocklists 方式は安全でないため止まった、という意味です。

この問題は、ファームウェアが UEFI ではなくレガシーBIOS のPCの一部で、Windows を残したままデュアルブートにするときに起きます。Windows の msinfo32.exe で事前に確認でき、「コンポーネント」→「記憶域」→「ディスク」の「パーティション開始オフセット」が 1,000,000バイト(約1MB)を下回るなら要注意です(3章)。

この記事では、1章でエラーメッセージとディスクの状態を確認し、2章で対処、3章で原因、4章で blocklists 方式のリスクを扱います。

なお、パーティションや MBR といった用語や、PCが起動する仕組みについては、理解している前提でこの記事を進めます。これらを扱った初心者向けの記事を別に用意しました。

【初心者向け】Linuxを入れる前に知っておきたいPC起動の仕組み(BIOS・UEFI・MBR・GPT)

目次

1. 何が起きたのか:grub-install: will not proceed with blocklists

GRUB(グラブ) は Linux で広く使われるブートローダーです。電源を入れた直後に動き、「どちらのOSで起動するか」というメニューを出して、選ばれたOSを立ち上げます。デュアルブートの要になる部品です。

インストール終盤で止まったとき、ターミナルで原因を調べると以下のメッセージが見つかりました。

Stderr: Installing for i386-pc platform.
        grub-install: warning: your embedding area is unusually small.  core.img won't fit in it..
        grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
        grub-install: error: will not proceed with blocklists.

Command: ['unshare', '--fork', '--pid', '--mount-proc=/target/proc', '--', 'chroot', '/target', 'grub-install', '/dev/sda']

中心メッセージは grub-install: error: will not proceed with blocklists. の1行です。そして「なぜ詰まったか」も、直前の警告に書かれています。

  1. your embedding area is unusually small. core.img won't fit in it. — ディスク先頭の隙間が小さすぎ、core.img が収まらない。core.img は GRUB を構成する主要部分のひとつで、数十KBほどあります
  2. Embedding is not possible. GRUB can only be installed in this setup by using blocklists. — 標準の方法では GRUB を設置できない。blocklists 方式ならインストールできる
  3. However, blocklists are UNRELIABLE and their use is discouraged. — しかし blocklists 方式は信頼できないので、使うのは勧められない

だから grub-install自動では blocklists 方式へ進まず、そこで止まりました。エラー画面は再インストールを勧めてきますが、原因はディスク側にあるので、やり直しても同じ場所で止まります。

ただし、ディスクに書いたものが消えるわけではありません。今回のログでは、grub-install/target(インストール先の内蔵ディスク)の中で実行され、そこで失敗しています。その中でコマンドを走らせられる時点で、Ubuntu 本体はすでに展開済みです。

つまりディスクには、次のものが残っています。

  • パーティションの変更(Windows 領域の縮小と、Ubuntu 用パーティションの作成)
  • Ubuntu 本体のファイル一式

一方、grub-install から先の工程は実行されていません。ブートローダーが MBR に書かれていないので、そのままでは Ubuntu が起動しません。さらにその後ろに控えていたユーザーアカウントの作成も終わっていないので、2章で復旧した後の初回起動時にアカウントを作り直すことになります。

インストール工程を4段に並べた図。パーティションの変更と Ubuntu 本体の展開は「済み」で緑、GRUB の書き込み(grub-install)は「ここで停止」で赤、ユーザーアカウントの作成は「未実行」でグレーの破線

中身はほぼ揃っているのに、起動するための仕上げだけが終わっていない状態です。

2. 対処:Windowsを残すか、Ubuntu専用にするか

今回のエラーは、GRUB を通常の方法で書き込むためのディスク先頭の隙間が足りないために起きています。

詳しい仕組みは3章で説明しますが、対処だけを見るなら選択肢は2つです。

A案:--force で GRUB を入れる B案:ディスクを消去して入れ直す
Windows 残る 消える
デュアルブート 維持できる できない
操作 ターミナルから手動で復旧 Ubuntuインストーラーで再インストール
GRUB blocklists 方式を使う 標準方式で入る
難しさ やや高い 簡単
位置づけ 回避策 根本解決

古いPCをUbuntu専用機にするなら、B案が簡単です。Windowsを残したい場合は、A案の --force を使ってGRUBを手動で入れます。

2-1. A案:Windowsを残して --force で復旧する

Ubuntu 26.04 のインストーラーには、今回必要な grub-install --force を指定する項目がありません。エラーで止まった今も、PCはUSBから起動したライブ環境(USBから直接動いている仮のUbuntu)のままなので、エラー画面が出ている状態で Ctrl+Alt+T を押すとターミナルが開きます。

このターミナルから、内蔵ディスクにインストール済みのUbuntuへchrootで入り、GRUBだけを手動で入れ直します。

今回のCF-J10では、Ubuntuを入れたパーティションが /dev/sda4 だったので、次のように実行しました。

sudo mount /dev/sda4 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install --force /dev/sda
update-grub
exit
sudo reboot

/dev/sda4 は環境によって異なります。自分のUbuntuが入っているパーティションに読み替えてください。

ここでやっていることは、大きく3段階です。

  1. インストール済みUbuntuのパーティションを /mnt に接続する
  2. chroot で、そのUbuntuの中に入った状態にする
  3. grub-install --force でGRUBを書き込み、update-grub で起動メニューを作り直す

各コマンドの意味

sudo mount /dev/sda4 /mnt

インストール済みUbuntuのパーティションを、USBから起動しているライブ環境の /mnt から見えるようにします。

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

これから入るUbuntu側から、ディスクやハードウェアなどのシステム情報を使えるようにします。

sudo chroot /mnt

操作対象を、USBのUbuntuから、内蔵ディスクにインストールされたUbuntuへ切り替えます。

grub-install --force /dev/sda

GRUBを内蔵ディスクへ書き込みます。

通常の grub-install は今回のディスク配置を安全ではないと判断して停止しましたが、--force を付けることで、警告されていた blocklists 方式でのインストールを許可します。

このとき、1章で見た2つの警告はそのまま出ます。変わるのは最後の1行です。

Installation finished. No error reported.

警告は blocklists 方式を使ったという通知なので、この行が出ていれば成功しています。

update-grub

GRUBの起動メニューを作り直します。このとき update-grubos-prober という別のプログラムを呼び出します。これが他のOSを探し、見つかった Windows がメニューに追加されます。

exit

chroot から抜け、USBのライブ環境へ戻ります。

sudo reboot

再起動します。再起動するときはUSBメモリを抜きます。 挿したままだと、再びUSBから起動してライブ環境に戻ってしまいます。

再起動後、CF-J10ではGRUBのメニューが表示され、UbuntuとWindowsを選んで起動できるようになりました。

初回のUbuntu起動時には「About you」の画面が表示され、ユーザー名とパスワードの設定を求められました。インストールが終盤で止まっていたため、その工程が残っていたものです。

2-2. B案:Windowsを消してUbuntu専用にする

Windowsを残す必要がなければ、こちらの方が簡単です。

Ubuntuインストーラーをもう一度起動し、「ディスクを消去してUbuntuをインストール」を選びます。

既存のパーティション構成を捨てて作り直すため、今回問題になったディスク先頭の狭い隙間も解消され、--force を使わず標準方式でGRUBをインストールできます。

ただしメーカーのリカバリー領域も消えるので、リカバリーメディアがない限り Windows には戻せません。

2-3. 補足:もう1つの方法

Windowsを残したまま、パーティション編集ツール(GParted など)で第1パーティションの開始位置を後ろへ移動し、GRUB用の隙間を広げる方法もあります。デュアルブート維持と blocklists 回避を両立できる根本解決です。

ただし Windows の回復領域(WinRE)などディスク先頭の区画を丸ごと物理的に書き直す操作になり、時間とリスクがかかります。Windows のブート構成(BCD)が壊れて起動修復が必要になることもあるため、この記事では扱いません。

3. なぜこのPCで起きたのか

今回の原因は、第1パーティションがディスクの先頭に近すぎたことです。

3-1. 隙間は3.5KBしかなかった

CF-J10 のディスクでは、第1パーティション(sda1)がディスク先頭から 8セクタ目から始まっていました。実機では次のコマンドで確認できます。

sudo fdisk -l /dev/sda

CF-J10 では、次のように表示されました。

Disk /dev/sda: 256.17 GiB
Disk model: Crucial_CT275MX3

Device     Boot     Start       End  Type
/dev/sda1               8  24574975  Hidden NTFS WinRE
/dev/sda2  *     24576000  25190399  Hidden NTFS WinRE
/dev/sda3        25190400 302534655  HPFS/NTFS/exFAT
/dev/sda4       302534656 537233407  Linux (ext4)

4つの区画は上から順に次のもので、StartEnd はセクタ番号です。

  • sda1 — メーカーのリカバリー領域(約12GB。Windows を工場出荷状態へ戻すためのもの)
  • sda2 — Windows の起動用の小さな区画(300MB。Boot 列の * は起動フラグ)
  • sda3 — Windows 本体(約132GB)
  • sda4 — 今回追加した Ubuntu(約112GB)

注目するのは sda1Start8 になっているところです。このディスクでは1セクタが512バイトなので、8 × 512 = 4,096バイト。第1パーティションはディスク先頭から約4KBの位置でもう始まっています。

さらに、その先頭512バイトは MBR 自身が使っています。したがって、MBR と第1パーティションの間に残っている隙間は 4,096 – 512 = 3,584バイト、約 3.5KB しかありません。

一方、GRUB がその隙間に置こうとしていた core.img30KB前後あります。

CF-J10 のディスク先頭の図。MBR(512バイト、boot.img)、その後ろの狭い隙間(3,584バイト)、セクタ8から始まる第1パーティション sda1 が横に並ぶ。core.img が必要とする幅がオレンジの破線の枠で示され、隙間を越えて第1パーティションまで及んでいる

これでは入りません。だから

your embedding area is unusually small.
core.img won't fit in it.

という警告が出て、標準方式でのインストールが止まりました。

なお、この隙間の広さは Windows 側からも確認できますmsinfo32(システム情報)を Windowsキー + R から開き、「パーティション開始オフセット」を見ます。CF-J10 なら「4,096 バイト」(=8セクタ)と出るはずです。この値から 512 を引いた分が隙間です。

3-2. なぜこんな狭い配置になっていたのか

これは Ubuntu が作った配置ではありません。

CF-J10 は出荷時から Windows 7 が入っていた機械で、その時点ですでに第1パーティションがディスク先頭から8セクタ目に置かれていました。

今回のデュアルブートでは、Ubuntu インストーラーは既存の Windows パーティションを残したまま、空いている後ろ側へ Ubuntu 用のパーティションを追加しています。前掲の fdisk 出力がまさにそれで、Windows の3区画(sda1sda3)はそのまま残り、Ubuntu は末尾に sda4 として足されています。

つまり、

  • Windows 時代からあった先頭のパーティション配置はそのまま
  • Ubuntu は後ろへ追加されただけ
  • 先頭の3.5KBという狭い隙間も、そのまま引き継がれた

ということです。

今回の問題は、「古いPCだから」直接起きたわけではありません。より正確には、古いパーティション配置を残したまま使ったために起きた問題です。

同じPCでも、ディスクを全消去して Ubuntu だけを入れ直せば、インストーラーが現在一般的な配置でパーティションを作り直します。その場合は GRUB を置く場所が確保されるので、この問題は起きません(2-2のB案)。

なお、今回のように隙間の広さが足りずに起きる問題は、レガシーBIOSで起動する MBR のディスクに限られます。UEFI で起動するPCは GPT のディスクを使い、GRUB を隙間ではなく専用のパーティションへ置くので、広さの問題そのものがありません。

4. blocklists 方式にはどんなリスクがあるのか

A案で使った grub-install --force は、GRUB が標準では避けている blocklists 方式でインストールを続行する指定です。実行時には次の警告が出ます。

warning: however, blocklists are unreliable...

動くことは動くが、GRUB自身も信頼性の低い方法として扱っている、ということです。では何が危ないのでしょうか。

4-1. core.img の居場所を番号で指す

標準方式では、core.img は MBR と第1パーティションの間の隙間へ置かれます。そこはファイルシステムの外なので、通常のファイル操作で位置が変わることはありません。

blocklists 方式では置き場所が変わります。core.img は Ubuntu のパーティション内にある普通のファイルになり、隙間は使われなくなります

標準方式と blocklists 方式で core.img の置き場所を比べた図。標準方式では MBR の直後の隙間に core.img が入る。blocklists 方式では隙間が未使用のままで、core.img は Ubuntu のパーティション内のファイルになり、MBR の boot.img が「その先頭セクタを読め」という指示を持っている

居場所は2か所に分かれて記録されます。1つ目は MBR の中です。MBR には GRUB のもう一つの部品 boot.img が書き込まれていて、これが「core.img の先頭セクタは何番か」という数字をひとつだけ持ちます。2つ目は、その指し先である core.img 自身の先頭セクタで、ここに「残りはどのセクタにあるか」の一覧が入っています。この一覧が blocklists(ブロックリスト)です。

隙間には何も置かないので、隙間の広さは問題でなくなります。--force を付けると、この blocklists 方式でインストールすることになります。

4-2. ファイルの場所が変わると起動できなくなる

問題は、パーティション内のファイルが将来もずっと同じ物理位置にあるとは限らないことです。

WindowsやLinuxから見ると、core.img は単なるファイルです。ファイル名が同じでも、書き直したりコピーし直したりすれば、ディスク上の別の場所へ移ることがあります。

しかし、boot.img が持つ先頭位置も、core.img 先頭セクタの一覧も、どちらも生のセクタ番号でしかありません。それを読む boot.img はファイルシステムを解釈できないので、書かれた番号どおりの場所を読むしかない。一方 ext4 の側は、その番号が特別な意味を持つことを知りません。だから、位置が変わっても誰も追従してくれません。

boot.img が 513551656番のセクタを読みに行く
 ↓
そこに core.img はもう無い
 ↓
GRUB を読み込めない
 ↓
OS が起動しない

これが、blocklists 方式が UNRELIABLE と警告される理由です。

4-3. 普通に使っているだけなら、すぐ壊れるわけではない

とはいえ、--force で入れたら頻繁に起動不能になる、というわけでもありません。

Ubuntu の通常のアップデートでは、GRUB の起動メニュー設定である grub.cfg は更新されますが、core.img 自体は毎回書き直されるわけではありません。ファイルが書き直されないので、位置も動きません。

CF-J10 でも、--force でインストールした状態のまま現在まで正常に起動しています。2026年8月に確認したところ、

  • core.img は断片化せず1か所にまとまっている
  • MBRに記録されたセクタ番号と、実際の core.img の位置が一致している
  • MBRと第1パーティションの間の3,584バイトは未使用(全部ゼロ)

となっていました。つまり誰も触っていないから動き続けているのであって、位置が保証されているわけではありません。

4-4. 注意した方がよい操作

次のような操作では、core.img の物理位置が変わる可能性があります。

  • core.img を削除して作り直す
  • /boot/grub 以下をコピーし直す
  • 断片化を解消するツール(e4defrag など)でファイルを詰め直す
  • ファイルシステムを再構成する
  • SSDやHDDを別のディスクへ移行する
  • ファイル単位でコピーする方式のクローンを行う

Windows の「ドライブの最適化」は ext4 のパーティションを扱えないので、そちらは core.img に触れません。

こうした操作の後に起動できなくなった場合は、blocklists に記録された位置と、実際の core.img の位置がずれた可能性があります。

その場合、Ubuntuを最初から再インストールする必要はありません。ライブUSBからUbuntuを起動し、内蔵ディスクのUbuntuをマウントして、2-1と同じ手順でGRUBだけを書き直します。既存の /home 以下のファイルや設定は、そのまま残ります。

次の2行は、2-1 と同じく内蔵Ubuntuをマウントして chroot に入った後で実行します。

grub-install --force /dev/sda
update-grub

これで現在の core.img の位置に合わせてGRUBを書き直せます。逆に言えば、手当ての方法さえ知っていれば復旧できます。

5. まとめ

今回の grub-install: error: will not proceed with blocklists は、GRUBを標準方式で置くためのディスク先頭の隙間が足りなかったために起きました。

CF-J10では、第1パーティションがディスク先頭から8セクタ目にあり、MBRの後ろに使える隙間は約3.5KBしかありません。一方、core.img は30KB前後あり、そのままでは収まりません。

対処は、Windowsを残すかどうかで分かれます。

  • Windowsとのデュアルブートを残すなら、grub-install --force で blocklists 方式を使う
  • Windowsが不要なら、ディスクを消去してUbuntuを入れ直し、標準方式でGRUBを入れる

--force を使う方法は実際に動きますが、blocklists 方式では core.img の物理的な位置をセクタ番号で記録するため、その位置が変わると起動できなくなる可能性があります。GRUB自身が UNRELIABLE と警告しているのはこのためです。

一方で、通常のUbuntu利用ですぐ壊れるという意味でもありません。CF-J10では現在もこの方式で正常に起動しており、実測でもMBRが記録している位置と core.img の実際の位置が一致していました。

今回のような問題は、単純に「古いPCだから起きる」のではなく、古いパーティション配置を残したまま使うことで起きることがある、というのがポイントです。

この記事が前提とした起動の仕組みと、Ubuntu を入れる手順そのものは、次の2記事で扱っています。

参考資料

よかったらシェアしてね!
  • URLをコピーしました!
目次