Я також отримую цю помилку, і я не думаю, що це відбувається в chroot.
Фон
Я думаю, що це коли systemd не може знайти шлях, оскільки він встановлений у каталозі. Отже, різниця полягає в тому, що ви встановлюєте chroot, ви вже налаштовуєте доступ до обладнання, включаючи диски.
Хоча ви можете налаштувати цей доступ всередині Systemd, це не означає, що ви можете налаштувати дозволи для цих дисків так само.
Наприклад, я створив цей файл:
/etc/systemd/system/systemd-nspawn@.service.d/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
або update-grub
для USB на Pi, дезабудованому Debian Stretch. Навіть використовуючи 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, а не Grub на USB, що містить перезавантажений Debian.
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 , але очевидно, це все-таки налаштування, ще не доступне для деботстрапінгу.
Вирішення проблем
Дійсно бувають випадки, коли краще просто створити шлях. Наступна можливість (і ймовірна) - просто написати GRUB. І для цього я просто збираюся прочитати на цій сторінці.
https://www.dedoimedo.com/computers/grub-2.html
Ще одна річ, яку я хочу поділитися з цього питання - це рішення, яке може працювати, але розумію, що картки microSD дуже чутливі. Я будував свої власні образи в Linux і швидко вчився цьому. Найкраще зробити це - використовувати Qemu коли завгодно, але намагатися очистити стару таблицю розділів, ви можете спробувати запустити sgdisk --zap-all
на диску.
sgdisk --zap-all /dev/sdd
Насправді, іноді, якщо вона вперше дає помилку, і це не помилка лише для читання, ви можете запустити її ще раз, і нарешті всі таблиці розділів нові чи старі.
І ви можете використовувати Qemu для емуляції Raspberry Pi на стандартному ПК на базі AMD / Intel. Я б рекомендував це. Я знаю, що це більше інформації, ніж стосується оригіналу публікації, але я думаю, що, ймовірно, як ця помилка походить. Це вік контейнера.
sda6
? Чи допомагає моя відповідь тут ?