Толик Панков
hex_laden
............ .................. ................
November 2020
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Толик Панков [userpic]
Интересный способ определить, является ли раздел активным (стоит ли флаг boot)

В 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/interesnyj-sposob-opredelit-yavlyaetsya-li-razdel-aktivnym-stoit-li-flag-boot/

Tags: , ,