Bug 44724 - grub2: 30_os-prober: SATAIII removables are not always removable
Summary: grub2: 30_os-prober: SATAIII removables are not always removable
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: grub-common (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Николай Костригин
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-12-24 09:32 MSK by viy
Modified: 2022-12-27 20:00 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2022-12-24 09:32:14 MSK
Устанавливал племяннику alt, столкнулся с тем, что наш /etc/grub.d/30_os-prober в упор не видел винды на отдельном ssd.

После расследования оказалось, что 30_os-prober полагается на свойство устройства /removable ( /sys/block/${DEVICE_KDNAME}/removable ),
однако ssd с виндой внутри был подключен в плату расширения - китайский sata3 PCIE контроллер (на мат плате был только SATA2) который из коробки был в eSATA3 режиме (плюсы: можно более длинный кабель, hotplug).
Раз он hotplug, то в ядре он /removable, но по факту нет.

подобная фигня случается и под винды тоже
https://winitpro.ru/index.php/2019/04/11/sata-ssd-disk-otobrazhaetsya-removable/

Надо бы усложнить логику.

Например, добавить в /etc/sysconfig/grub2 поддержку переменных явного списка устройств removable и not_removable:
что-то вроде 
GRUB_OVERRIDE_REMOVABLE_DEVICES="..."
GRUB_OVERRIDE_NOT_REMOVABLE_DEVICES="..."

Возможно, лучше считать устройства, подключенные через SATA,
not_removable по умолчанию.

К примеру, если устройств /removable
смотреть еще его udevadm info --query=all
и если там ID_ATA_SATA=1,
то 
если дополнительно не выставлено
UDISKS_SYSTEM_INTERNAL=0
то полагать, что это не /removable.
а иначе (если выставлено UDISKS_SYSTEM_INTERNAL=0)
полагать, что это все же /removable.

Выставить UDISKS_SYSTEM_INTERNAL=0
можно через udev rules, для случаев, когда eSATA там не случайно, а именно для hotplugging.
Comment 1 Николай Костригин 2022-12-25 20:21:03 MSK
Спасибо за подробную диагностику и предложенные решения.
Поэкспериментирую.
Comment 2 viy 2022-12-27 20:00:23 MSK
еще бы посоветовал посмотреть на 
30_os-prober
в других дистрибутивах, fedora, mageia, opensuse
в поисках вдохновения и интересного кода.
там 30_os-prober совсем другой.