Админим альтовую флешку по-спектрумовскиНачнём с того, как выглядит альтовая флешка и что такое гибридная флешка.
Несмотря на то что образ представляет из себя образ cd-диска
# file -s ./alt-p9-xfce-sysv-20200912-x86_64.iso
./alt-p9-xfce-sysv-20200912-x86_64.iso: ISO 9660 CD-ROM filesystem data 'ALT p9 xfce-sysv/x86_64 ' (bootable)
по своей структуре, образ представляет из себя образ винчестера
# fdisk -l ./alt-p9-xfce-sysv-20200912-x86_64.iso
Диск ./alt-p9-xfce-sysv-20200912-x86_64.iso: 949 MiB, 995098624 байт, 1943552 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
./alt-p9-xfce-sysv-20200912-x86_64.iso1 * 64 1943551 1943488 949M 0 Пустой
./alt-p9-xfce-sysv-20200912-x86_64.iso2 636 106363 105728 51,6M ef EFI (FAT-12/16/32)
И командой dd, он один-в-один, поблочно, байт-в-байт записывается на устройство (здесь и дальше, это устройство, флешка, - /dev/sdc)
# fdisk -l /dev/sdc
Диск /dev/sdc: 3,8 GiB, 4013948928 байт, 7839744 секторов
Disk model: DataTraveler 2.0
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdc1 * 64 1943551 1943488 949M 0 Пустой
/dev/sdc2 636 106363 105728 51,6M ef EFI (FAT-12/16/32)
Загрузка в режиме сохранения сессии, создаёт ещё один раздел, - раздел для сохранения сессии и всех настроек и файлов
# fdisk -l /dev/sdc
Диск /dev/sdc: 7,5 GiB, 8054112256 байт, 15730688 секторов
Disk model: Silicon-Power8G
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdc1 * 64 1943551 1943488 949M 0 Пустой
/dev/sdc2 636 106363 105728 51,6M ef EFI (FAT-12/16/32)
/dev/sdc3 1943553 15730687 13787135 6,6G 83 Linux
Который содержит
файловую систему ext4
# mount | grep sdc3
/dev/sdc3 on /media/alt-live-storage type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2)
с меткой alt-live-storage
# file -s /dev/sdc3
/dev/sdc3: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=..., volume name "alt-live-storage/" (extents) (64bit) (large files) (huge files)
со структурой каталогов/файлов, соответствующей системе, включая и домашний каталог пользователя, с UID/GID соответствующим правам доступа первого созданного в системе пользователя, предоставляя ему возможность использовать этот каталог для хранения своих файлов
$ ls -la -n /media/alt-live-storage/rw/home/
итого 20
drwxr-xr-x 3 0 0 4096 сен 12 07:14 .
drwxr-xr-x 10 0 0 4096 ноя 3 2020 ..
drwx------ 11 500 500 4096 ноя 3 2020 altlinux
Возвращаем альтовую флешку к оригиналуПредполагается что вы уже прочитали предупреждение:
https://www.altlinux.org/Запись_образов_на_DVD_и_USB_Flash#Проверка_целостности_записанного_образаПрежде всего вспомним, из каких логических частей она состоит?
- MBR -изменяем.
- Файл-образ системы - неизменяем, по-причине файловой системы iso9660, которая всегда будет монтироваться в read only.
- EFI-раздел - изменяем по-причине fat16 и его следует беречь от изменений.
- Раздел для сохранения сессии - изменяем, несущественно для возврата флешки к оригиналу в исходное состояние.
Для возврата флешки к оригиналу, раздел для сохранения сессии вы можете удалить, например через cfdisk.
Что ещё останется изменённым?, - таблица разделов MBR.
Скопируем mbr в файл:
# dd if=/dev/sdc of=mbr-sdc+1-2.bin bs=512 count=1 &>/dev/null
Таблица разделов в MBR находится по смещению 446:
# hexdump -C -s 446 mbr-sdc+1-2.bin
000001be 80 02 01 00 00 3f e0 b4 40 00 00 00 c0 a7 1d 00 |.....?..@.......|
000001ce 00 fe ff ff ef fe ff ff 7c 02 00 00 00 9d 01 00 |........|.......|
000001de 00 fa 04 78 83 30 dd d3 01 a8 1d 00 ff 5f d2 00 |...x.0......._..|
000001ee 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001fe 55 aa |U.|
00000200
Первые два массива по 16 байт, это файл-образ системы и файл-образ ESP (EFI System Partition), что составляет основу образа. Остальные два по 16 байт, это могут быть дополнительные разделы. Но в данном случае, третий 16-тибайтный массив, это раздел для сохранения сессии с файловой системой ext4, содержащую метку alt-live-storage.
Логика подсказывает, что если удалить этот массив, то MBR придёт в исходное систояние, а раздел для сохранения сессии исчезнет с флешки.
Какими инструментами можно воспользоваться для редактирования *.bin-файла MBR? Например просмотрщиком mc на bin-файле (F3 > F4 Hex) или biew. Но у каждого свои недостатки:
- Hex-редактор mc после перехода на начальный адрес таблицы разделов, не смещает начало таблицы разделов в левый верхний угол окна редактора. А это усложняет обслеживание таблицы разделов 16-тибайтными блоками.
- biew не уемет работать в tty и ломает отображение.
Но для примера воспользуемся biew:
# TERM=vt100 biew -h mbr-sdc+1-2.bin
Вспомним, что таблица разделов в MBR находится по адресу 01be по смещению 446:
# hexdump -C -s 446 mbr-sdc+1-2.bin
000001be 80 02 01 00 00 3f e0 b4 40 00 00 00 c0 a7 1d 00 |.....?..@.......|
000001ce 00 fe ff ff ef fe ff ff 7c 02 00 00 00 9d 01 00 |........|.......|
000001de 00 fa 04 78 83 30 dd d3 01 a8 1d 00 ff 5f d2 00 |...x.0......._..|
000001ee 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001fe 55 aa |U.|
00000200
Что такое смещение? В смещении указывается, сколько байт от начала файла нужно пропустить, чтобы просмотр начался или курсор перешёл, на необходимый адрес. В случае таблицы разделов в MBR, нужно пропусить 446 байт от начала файла-копии MBR.
Но вернёмся к biew:
Поскольку уже известно, что таблица находится по адресу 01be, в открытом bin-файле, по F5 Goto, необходимо перейти по этому адресу. Пропустив 2 по 16 байт, начиная с адреса 01de, по F4 Modify переходим в режим редактирования и обнуляем байты третьего и четвёртого 16-тибайтных массивов таблицы разделов (не трогая сигнатуру 55 AA !).
Сохранияем по F2 Update, выходим
и возвращаем изменённый MBR на флешку:
# dd if=mbr-sdc+1-2.bin of=/dev/sdc
Смотрим контрольную сумму оригинального образа
# grep xfce-sysv ./MD5SUM | grep x86_64
f95a587b7215f336208fb86f568d1a02 alt-p9-xfce-sysv-20200912-x86_64.iso
и проверяем контрольную сумму модифицированной флешки (проверять только когда все файловые системы флешки размонтированы!):
# du -b ./alt-p9-xfce-sysv-20200912-x86_64.iso
995098624 ./alt-p9-xfce-sysv-20200912-x86_64.iso
# head -c 995098624 /dev/sdc | md5sum
f95a587b7215f336208fb86f568d1a02 -
Контрольные суммы совпадают, а флешка вернулась к состоянию оригинала, на момент, сразу же после записи образа через dd.
Нужно это или не нужно, вопрос спорный.
Может сложится так, что доступа к оригинальному образу нет, а под руками есть флешка, которую нужно вернуть в исходное систояние, для снятия с неё оригинального образа:
Как вытащить образ из usb-flash?
(Чтобы он соответствовал оригиналу на сервере)https://forum.altlinux.org/index.php?topic=157.msg222053#msg222053Запрещаем UEFI загрузку с флешкиЗдесь есть момент:
- Все альтовые образы i586 грузятся только через MBR (Legacy mode).
- Все альтовые образы x86_64 грузятся и через MBR (Legacy mode) и через UEFI.
Возможно будут причины по которым необходимо дать доступ к образу чтобы загрузка с флешки с образом была только через MBR (Legacy mode), причины мы здесь не будем обсуждать.
Как это сделать?
Займёмся сразу дайвингом и погрузимся в глубины моря операционной системы:
Вы здесь не видите ничего необычного?
# fdisk -l ./alt-p9-xfce-sysv-20200912-x86_64.iso
Диск ./alt-p9-xfce-sysv-20200912-x86_64.iso: 949 MiB, 995098624 байт, 1943552 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
./alt-p9-xfce-sysv-20200912-x86_64.iso1 * 64 1943551 1943488 949M 0 Пустой
./alt-p9-xfce-sysv-20200912-x86_64.iso2 636 106363 105728 51,6M ef EFI (FAT-12/16/32)
Обратите внимание на адреса разделов в образе:
- Оба раздела находятся в одном адресном пространстве. Чего в обычной ситуации быть не может и никогда не происходит: раздел EFI находится внутри адресного пространства раздела, который содержит образ системы.
Что это нам даёт? Это даёт возможность запретить загрузку флешки с лайв-образом, через UEFI.
Выше уже было описано как сбросить MBR в файл и вернуть его на флешку.
В данном случае, нас интересуют первые 16 байт в таблице разделов, которые содержат данные по файлу-образу с системой, который в образе лежит как раздел с типом Empty (Пустой).
На тип раздела Empty, указывает байт по смещению 4 (пятый байт начиная с адреса 01be):
# hexdump -C -s 446 mbr-sdc.bin
000001be 80 02 01 00 00 3f e0 b4 40 00 00 00 c0 a7 1d 00 |.....?..@.......|
000001ce 00 fe ff ff ef fe ff ff 7c 02 00 00 00 9d 01 00 |........|.......|
000001de 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001fe 55 aa |U.|
00000200
Решение здесь простое:
Если этот байт изменить например на 0b
# sfdisk -T | grep -i '^ b'
b W95 FAT32
то ни UEFI BIOS, ни Boot menu UEFI BIOS, не увидят флешку как UEFI загрузочную. По причине того, что пересекающихся разделов быть не должно. И загрузка с флешки, будет доступна только через MBR (Legacy mode). И в Boot menu и в UEFI BIOS, флешка как загружаемая через UEFI будет отсутствовать. И в наличии будет, только MBR загрузка.
Вернуть в исходное состояние, можно вернув разделу тип Empty.
Почему админим по-спектрумовски?Всё просто:
Здесь мы работали напрямую с машинным кодом, как это нередко бывает на платформе ZX Spectrum. Во времена старой школы кодеров, ходила легенда, что были кодеры, которые по машинному коду видели текст кода.
Общий принцип, методы и инструменты, близки к тому что применялось на ZX Spectrum.
Но если бы были инструменты близкие к тем которые есть в Real Commader (Pawel, Павел Кисляк, Брест, ex Real Software) и в Conver Commander (Conver, Юрий Ковалевский, Санкт-Петербург), то манипуляций было бы меньше. Почему? disk doctor -ы входящие в эти коммандеры, написанные этими Спектрум кодерами, предоставляли прямой доступ к диску. Но этот метод требовал от Спектрум-пользователя понимания предмета и внимательности. Требования к пользователю здесь на порядок выше и ошибки здесь недопустимы.
И так же вопрос, зачем это всё?Даже если это не пригодится, наверное затем, чтобы увидеть, что с пониманием как работает операционная система, на поверхности и в глубинах, приходит понимание, что не система может управлять нами, а мы ей. Управлять ею, отбросив все догмы и правила. На шаг ближе к лучшему.
Критическое замечание по теме:
# sfdisk -T | grep -i '^ b'
b W95 FAT32
Байт в hex, всегда имеет двухсимвольное значение. И исключений здесь нет.