USBドライブからgrubを再インストールしようとしています。次を実行します:

sudo mount /dev/sda6 /mnt sudo grub-install --root-directory=/mnt /dev/sda 

次のエラーが発生します:

grub-probe: error: failed to get canonical path of /cow. 

誰かがエラーを説明できますか、およびそれを解決する方法は?

編集

試していますlinuxmintを含むUSBから実行されている壊れたデュアルブートシステムを修復します。

コメント

  • OK、その編集は右側のステップです方向。 Linuxシステムがすでにインストールされていると仮定しますか? sda6から起動しますか?私の答えはここで役に立ちますか?
  • FWIW、/cowはivを参照しているようですCDまたはUSBから起動するときに/にマウントされるid = “09ffbb3fa2″>

コピーオンライトファイルシステム

回答

次の手順に従います。

  1. ライブLinuxセッションを起動します。

  2. インストールしたOSの/パーティションを/mnt

  • chroot環境をセットアップします:

    sudo chroot /mnt 
  • これで、/mnt/として扱う「偽の」Linuxインストールが開始されました。 。これは、GRUBに必要なすべてのファイルが/bootにあり、システムがそれらを想定していることを意味し、実際にインストールしたシステムを実行しているかのようにGRUBをインストールできます。

    sudo update-grub sudo grub-install /dev/sda 
  • 再起動すると、GRUBメニューが正常に表示されます。

    コメント

    • 私は' usbデバイスからからインストールしようとしています。とにかく、私はマウントせずに試しました-同じエラー。エラーについて説明していただけますか?
    • @elyashiv質問を編集して、何をしようとしているのか説明してください。壊れたシステムを救出しようとしていますか? USBからライブシステムを起動していますか?もしそうなら、教えてください。どのOSを使用していますか? GRUBにroot-deviceオプションがあると思う理由と、そのオプションで何ができると思いますか? chroot環境を設定しましたか?質問するときはいつでも、何をしようとしているのかを正確に説明する必要があります。'推測できません。
    • おっと、つまり-root -ディレクトリ
    • @elyashiv there 'も--root-directoryではありません。 grubを再インストールする方法を説明している私の回答ここを読んでください。
    • 最初の回答ここ

    回答

    grubが何かの正規パスを解決できなかったと言った場合、存在しないか、realpath()が失敗したことを意味します。

    この場合は、次のことを試してください。

    $ realpath /cow $ ls -la /cow 

    両方のコマンドで「ファイルまたはディレクトリが見つかりません」と表示された場合は、作成する必要があります。

    2番目のコマンドは機能するが、最初のコマンドは機能しない場合は、理由を確認してくださいrealpath()は機能しません。理由の1つは、/procがマウントされていないことです。 libcの一部の実装では、/proc/self/fdを使用してファイルの正規パスを取得します。

    コメント

    • 最初のコマンドは機能していますが、2番目のコマンドは機能していません。
    • ME:root @ ubuntu:/#realpath / cow TERMINAL:/ cow ME:#ls -la / cow TERMINAL:ls:不可能アクセス' / cow ':この種のファイルまたはフォルダーはありません(大まかに翻訳されています)。

    回答

    このエラーも発生しますが、chrootでは発生しないと思います。

    背景

    これは、systemdがディレクトリにマウントされているためにパスを見つけられない場合だと思います。したがって、chrootをセットアップするときの違いは、ドライブを含むハードウェアへのアクセスをすでに構成していることです。

    Systemd内でこのアクセスを構成できますが、これらのドライブのアクセス許可を同じ方法で構成できるわけではありません。

    たとえば、次のファイルを作成しました:

    /etc/systemd/system/[email protected]/override.conf 

    そしてそれは含まれています■これらの設定:

    [Service] DeviceAllow=char-usb_device rwm DeviceAllow=char-usb [Files] Bind=/var/cache/apt/pkgcache.bin Bind=/var/cache/apt/srcpkgcache.bin 

    grub-install /dev/sdaまたは DebianStretchでデブートストラップされたPi上のUSBの場合。 grub-ubootとgrub-efi-armを使用しても、grub-probeが正規パスを見つけることができないというエラーがあります。

    それだけでなく、update-grubはオペレーティングシステムが何であるかを確認して認識しますが、興味深いことにgrub-installは認識しません。 DebianオペレーティングシステムがUSB上にあることを認識します。

    root@raspixmc:/home/pi# grub-install /dev/sda Installing for arm-uboot platform. grub-install: warning: no hints available for your platform. Expect reduced performance. grub-install: warning: WARNING: no platform-specific install was performed. Installation finished. No error reported. root@raspixmc:/home/pi# 

    興味深いことに、chrootを作成してupdate-grubを実行できると、 USB自体にブートストラップ解除したオペレーティングシステムを使用していても、独自のオペレーティングシステムが表示されません。

    root@raspixmc:/home/pi# mount /dev/sda1 /mnt root@raspixmc:/home/pi# cd /mnt root@raspixmc:/mnt# mount --bind /dev dev/ root@raspixmc:/mnt# mount --bind /sys sys/ root@raspixmc:/mnt# mount --bind /proc proc/ root@raspixmc:/mnt# mount --bind /dev/pts dev/pts root@raspixmc:/mnt# chroot . bin/bash root@raspixmc:/# update-grub Generating grub configuration file ... Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2 done root@raspixmc:/# 

    Raspbianのみが表示されます。これは、コンテナ内にGRUBをインストールして更新しようとした場合にのみ発生しますが、chrootを終了した場合に発生します。

    chrootディレクトリをアンマウントしなかったため、現在の動作を確認してください。

    /dev dev/ /sys sys/ /proc proc/ /dev/pts dev/pts 

    コンテナの外部から、実行しています。 grub-ubootがRaspbianにインストールされ、デブートストラップされたDebianを含むUSBにGrubがインストールされていないこのコマンド。

    root@raspixmc:/mnt# update-grub Generating grub configuration file ... Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2 Found Debian GNU/Linux 9 (stretch) on /dev/sda1 done root@raspixmc:/mnt# 

    これはしません Debian ARMで非公式に利用可能なイメージの1つを使用して発生しますが、明らかにこれはまだデブートストラップに利用できないカスタマイズです。

    トラブルシューティング

    実際には、パスを作成するだけの方がよい場合があります。次の唯一の可能性(そして可能性のあるもの)は、単にGRUBを書くことです。そのために、このページを読みます。

    https://www.dedoimedo.com/computers/grub-2.html

    この問題について共有したいもう1つのことは、機能する可能性のあるソリューションですが、microSDカードは非常に機密性が高いことを認識してください。私は自分のLinuxイメージを構築していて、これをすばやく学びました。最善の方法は、可能な限りQemuを使用することですが、古いパーティションテーブルをクリアするには、ドライブでsgdisk --zap-allを実行してみてください。

    sgdisk --zap-all /dev/sdd 

    実際、最初にエラーが発生し、ではない場合読み取り専用エラーの場合、再度実行すると、最終的にすべてのパーティションテーブルが新旧になります。

    そして、 Qemuを使用してRaspberryをエミュレートできます。標準のAMD / IntelベースのPC上のPi 。私はそれをお勧めします。これは元の投稿に関連する情報よりも多くの情報であることを私は知っていますが、それがこのエラーの原因である可能性が高いと思います。コンテナの経過時間です。

    回答

    記述されている内容に基づくと、GRUBをインストールしようとしているようです。 / dev / sda。ディスクをマウントしたくない。

    おそらく探しているもの:grub-install /dev/sda

    GRUBのマニュアルページ参考までに、またはシステムからman grub-installできます: http://linux.die.net/man/8/grub-install

    コメント

    • (dev.sda1で)すでにgrub-installコマンドを入力しましたが、ブロックについての説明でエラーが発生しました。そして、" cow "エラーが" grub-install–recheckで発生しました。 –root-directory = / mnt / dev / sda1 "コマンド。

    回答

    これに苦労していて、ライブUSBまたはchrootの他の手段を使用してgrubを再インストールまたはインストールしようとしている人のために-私はこれに数回対処し、以前に文書化するのを忘れました。 。

    あなたが直面している問題は、grubがソース(/ boot)または宛先として参照しているパスにアクセスできないことです(システムとchrootは/dev/sdaたとえば?)またはその両方。 chrootの準備をするときは、chroot環境でアクセスできるバインドマウントを作成するか、mount-tを使用してchroot内で作成します。オンラインには、どちらの方法でも実行できるガイドがたくさんあります。

    / devをバインドするか、/ boot内のブートファイルを含む特定のパーティション(例:/ dev / sda1)だけをバインドする必要があります。 。 / bootは、/内の個別のパーティションまたはディレクトリのいずれかです。chrootは、grubを(再)インストールするドライブにアクセスする必要があります。chrootでfdisk -lを実行して、出力にリストされているデバイスが表示されることを確認します。また、個別のブートパーティションがなくても、/ rootにブートファイル(マウントポイントだけでなく)を含むブートディレクトリがある場合は、rootを含むパーティションをマウントするだけで済みます。 / root / bootに何かをマウントする必要はありません。

    また、procファイルシステムとsysファイルシステムをバインドする必要がありますが、私が見たすべてのガイドにはこれら2つがあります。 / devは時々逃しました。必要ない場合もあるかもしれませんが、私にはわかりません。

    tl; dr:マウント/ devをバインドしてください

    コメント

    • 質問が'ではないのに、なぜchrootについて話しているのですか? chroot“?
    • OPは、Linux mint "を含むUSBから実行している"と言っています。それはchrootになります。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です