В 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. Нашел здесь
2 Responses to Интересный способ определить, является ли раздел активным (стоит ли флаг boot)