Linux Live OS определяет текущий загрузочный носитель (CD/USB), который используется для загрузки ядра и rootfs, находящихся на том же носителе

Linux Live OS определяет текущий загрузочный носитель (CD/USB), который используется для загрузки ядра и rootfs, находящихся на том же носителе

Есть ли способ обнаружитьтекущий загрузочный носительиспользуется для загрузкиLinux Live ОС? В работающей ОС я хотел бы однозначно определить текущий загрузочный носитель(CD/USB), который был использован для загрузки диска. Я хотел быопределите это на уровне ОС, а не на уровне загрузчика.

Текущий загрузочный носительв моем случае это означает СМИгде находится загрузчик, который использовался для запуска ОС.

Я проверил следующее, но ни одно из них, похоже, не содержит информации о пути к устройству текущего загрузочного носителя (например, /dev/sr0 указывает на то, что текущий путь к загрузке — cd)

  • Проверка systemdжурналctlжурналы.
  • Проверкаdmesgжурналы.
  • Возможные интерфейсы вудевиудевадмполезность.
  • Busybox rdevкак предложено вhttp://free-electrons.com/blog/find-root-device/. Процедура сравнения stat / с основным:вспомогательным номером устройства /dev/sr0, похоже, не совпадает.

Я также проверил в GRUB2,http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.cгде переменные среды GRUBкореньипрефиксустановлены. Например, если я ввожу в оболочке GRUB2, загруженной с CD,эхо $root, Я получилhd31. Теперь как мне сделать сопоставление этого пути к блочному устройству Linux, например/dev/sr0для CD или некоторых/dev/sdb1для флешки? Я тоже проверилLinux: получить имя устройства текущего загрузочного дискаиhttps://stackoverflow.com/questions/6787819/how-to-determine-the-booting-deviceно ни то, ни другое, похоже, не помогает.

В идеале я бы хотелизбегать монтажакаждый CD/USB (/dev/sr0 или /dev/sdb1 и т. п.) для ручной проверки наличия initrd и файлов ядра. Этот метод не является надежным. Есть ли какой-либо простой способ сделать это?

решение1

Я нашел следующее, но не уверен, что это установит. Возможно, ядро/grub, в этом случае вам следует это установить.

«Это также может быть ссылка на узел устройства для точки монтирования другой файловой системы LiveOS,включая работающий в данный момент (например, загруженный Live CD/DVD/USB, где /run/initramfs/livedev ссылается на загруженное устройство LiveOS))".

От https://www.mankier.com/8/livecd-iso-to-disk

решение2

Само ядро ​​Linux не заботится, откуда оно загружается - и оно считает это работой загрузчика. В идеале загрузчик должен записывать эту информацию где-то, где ядро ​​может получить ее позже - что тривиально с загрузчиком U-Boot, но не так уж и x86 BIOS/UEFI.

В результате, я не думаю, что вы можете получить эту информацию из самого Linux, хотя там, где находится корневая файловая система, Linux, вероятно, загружался большую часть времени. На 100% возможно загрузить ядро ​​из одного места, а корневую файловую систему получить из другого места, что распространено на встраиваемых платформах.

Итак, кое-что вы можете попробовать.

  • cat /proc/cmdlineвероятно, скажет вам, где была загружена корневая файловая система — root=параметр командной строки ядра сообщает вам, где ядру было указано найти корневую файловую систему при загрузке.

  • Вы также можете ввести mountкоманду и найти /файловую систему, а также посмотреть ее устройство.

Связанный контент