В дистрибутиве, который я сейчас использую, Arch Linux ARM, Linux запускается без первоначального RAM-диска, то есть ядро выполняет всю работу по монтированию корневой файловой системы. Эта система установлена на SD-карте, и на ней есть скрипт, который должен определить узел устройства файловой системы, на которой она находится. Этот узел устройства может меняться в зависимости от того, как я загружаю устройство (например, я подключаю его к другому устройству, которое уже запущено).
Я могу определить точку монтирования, используя df -k --output=target ${0} | sed "1d"
. Чтобы определить исходное устройство, я запускаю df -k --output=source ${0} | sed "1d"
. Если я загрузился в Arch Linux, результат этой последней команды выдает /dev/root
, который не существует . Конечно, в некоторых системах udev создаст символическую ссылку из /dev/root
на реальное корневое устройство, но мое не делает этого. Я мог бы посмотреть на содержимое /proc/cmdline
но оно остается неизменным на протяжении всего времени работы ядра, так что это означает, что он ненадежен.
Когда я получаю /dev/root
, как я могу определить реальное базовое блочное устройство, на котором оно стоит?