1

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

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

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

  • Проверка журналов systemd journalctl .
  • Проверка логов dmesg .
  • Возможные интерфейсы в утилитах udev и udevadm .
  • 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 root и префикс. Например, в оболочке GRUB2, которая была загружена с компакт-диска, если я наберу echo $ root, я получу hd31. Теперь, как мне сопоставить это с путем к блочному устройству Linux, таким как /dev/sr0 для компакт-диска или каким-либо /dev/sdb1 для дисковода? Я также проверил Linux: получите имя текущего загрузочного диска и https://stackoverflow.com/questions/6787819/how-to-determine-the-booting-device, но оба они, похоже, не помогают.

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

2 ответа2

0

Я нашел следующее, но не уверен, что бы это установить. Может быть, ядро / Grub, в этом случае вы должны быть установлены.

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

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

0

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

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

Так что некоторые вещи вы можете попробовать.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .