2

В дистрибутиве, который я сейчас использую, 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 , как я могу определить реальное базовое блочное устройство, на котором оно стоит?

5 ответов5

2

Команда mount покажет это:

  mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'
1

Ответ из комментариев здесь очень прост. Просто позвони:

findmnt -n -o SOURCE /

При условии, что findmnt присутствует ...

1

Предполагая, что есть файл в /etc/fstab

sudo cat /etc/fstab | grep '\s\/\s'

даст вам запись fstab для блочного устройства, установленного в / .

0

Журналы ядра

Сделать:

dmesg

Во-первых, это может быть явно указано в CLI ядра в самом начале загрузки:

Command line: root=/dev/vda ...

В противном случае, в конце загрузки, если rootfs - это диск, а не initrd / initramfs, ядро говорит:

VFS: Mounted root (ext2 filesystem) on device 254:0.

тогда мы находим, что:

find /proc /sys -iname '*254:0*'

и затем определите, через что оно действительно отображается:

ls -l /sys/dev/block/254:0

выход:

lrwxrwxrwx    1 root     root             0 Jan 30 15:59 /sys/dev/block/254:0 -> ../../devices/pci0000:00/0000:00:09.0/virtio4/block/vda

Протестировано с этой настройкой QEMU + Buildroot.

0

Вы можете использовать stat / и проверить старший / младший номер устройства или с помощью команды rdev получить это автоматически интерпретируется.

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