Есть ли способ обнаружитьтекущий загрузочный носительиспользуется для загрузки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))".
решение2
Само ядро Linux не заботится, откуда оно загружается - и оно считает это работой загрузчика. В идеале загрузчик должен записывать эту информацию где-то, где ядро может получить ее позже - что тривиально с загрузчиком U-Boot, но не так уж и x86 BIOS/UEFI.
В результате, я не думаю, что вы можете получить эту информацию из самого Linux, хотя там, где находится корневая файловая система, Linux, вероятно, загружался большую часть времени. На 100% возможно загрузить ядро из одного места, а корневую файловую систему получить из другого места, что распространено на встраиваемых платформах.
Итак, кое-что вы можете попробовать.
cat /proc/cmdline
вероятно, скажет вам, где была загружена корневая файловая система —root=
параметр командной строки ядра сообщает вам, где ядру было указано найти корневую файловую систему при загрузке.Вы также можете ввести
mount
команду и найти/
файловую систему, а также посмотреть ее устройство.