/boot
フォルダーを/
パーティションから/dev/sdb
に移動しようとしています。次のスクリプト:
parted -s /dev/sdb mklabel msdos mkpart primary ext2 1M 100% set 1 boot on
mkfs.ext2 /dev/sdb1
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
cd /boot
find . -depth -print0 | \
cpio --null --sparse --make-directories --pass-through --verbose /mnt/boot
cd /
umount /mnt/boot
mv /boot /boot.orig
mkdir /boot
echo "/dev/sdb1 /boot ext2 ro 0 2" >>/etc/fstab
mount /dev/sdb1 /boot
parted /dev/sda set 1 boot off
grub-install /dev/sdb
update-grub
reboot
このエラーが発生します:
error: file '/boot/grub/i386-pc/normal.mod' not found.
grub rescue>
何か案は?
編集:元の/boot
ディレクトリが別のパーティション(たとえば/dev/sda2
)にある場合、上記のスクリプトは正常に機能しているようです。 /
パーティション(/dev/sda1
)と同じパーティションにある場合にのみ失敗します。
Ubuntu13.04とFedora19の両方で、上記のスクリプトの多くのバリエーションを試しましたが、まだfile '/boot/grub/i386-pc/normal.mod' not found
エラーを回避していません。
他のアイデアはありますか?
問題は、grubが/boot/grub/i386-pc/normal.mod
新しいパーティション上を探していることです。そのパーティションのルートが/boot
にマウントされているため、ファイルは現在、新しいパーティションの/grub/i386-pc/normal.mod
にあります。 grub
をそのパーティションに再インストールする必要があります。または、一時的な手段として、ln -s . /boot/boot
を呼び出してシンボリックリンクを作成できます。これにより、ファイルをどちらの名前でも見つけることができます。
「ls」を実行して、ブートパーティション(つまり新しいパーティション)を見つけ、(hdX、Y)と言います。
次に、ls(hdX、Y)/ usr/lib/grub/i386-pc
そこにファイルがありますか?
おそらく、レスキューCDまたはUSBで起動し、grubを再インストールする必要があります。何かが壊れています。
これは、core.img
によってgrub-install
イメージにハードコードされているprefix
変数がパーティションレイアウトと一致しなくなったために発生します。この変数を一時的に手動でオーバーライドし、レスキューシェルで次のコマンドを実行することでGRUBを1回ロードできます。
set prefix=(hd0,1)/boot/grub
insmod normal
normal
プレフィックスは、GRUBのファイル(grub.cfgなど)が存在する場所へのパスである必要があります。通常、単一のルートパーティションの場合は(hdX,Y)/boot/grub
のようになり、専用の(hdX,Y)/grub
パーティションがある場合は/boot
のようになります。 mdadm管理のRAIDの場合、hdX,Y
はおそらくmd/xxx
またはmduuid/xxxx...
になります。
すべてがうまくいけば、GRUBはモジュールをロードしてgrub.cfg
をロードでき、OSを起動できるはずです。起動したらgrub-install
を実行してcore.img
を再生成します(これは埋め込まれます)ディスクのMBR内)に新しいプレフィックスを付けます。
彼らの(ひどい) ドキュメント の詳細情報。