В Linux, с помощью dd
.
Делается это вот такой огромной командой:PARTREC=$(dd if=$DEV bs=1 count=16 status=none skip=$((0x1BE + 16 * ($PART - 1) )) | od -t x1 -A n |awk '{print $1}')
В переменную $DEV
записывается устройство (например /dev/sda
), а в переменную $PART
- номер раздела, например 1
для /dev/sda1
, потом проверяем, что накапало в $PARTREC
- если там будет 00
- флаг boot для раздела не установлен, раздел неактивен, если 80
- раздел активный, если что-то еще, ну или с разделом что-то странное, или попытались установить флаг boot логическому разделу. Внезапно, gparted
может такое сделать, хотя смысла в этом нет - активным разделом может быть только основной, но не логический и не расширенный.
В принципе, способ логичный - информация о флагах хранится в таблице разделов, надо только знать, как вычислить, а dd
может выдернуть нужный байт откуда угодно. Далее od
преобразует байт в удобочитаемую форму в шестнадцатеричном виде, забираем значение первого байта awk'ой
и проверяем.
1. На GitHub
2. На PasteBin
1. The MBR (master boot record) and the Partition Tables. Там как раз подробное описание, как оно выковыривается.
2. Нашел здесь
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/04/21/inte