Здравствуйте, коллеги!
Возникла задача сделать некую утилитарную флешку со средствами тестирования дисков, памяти и прочих утилитарных приблуд. Типа эдакого rescue disk.
Большая часть работы уже проделана. Затык оказался с memtest86.
Скачал с сайта https://www.memtest86.com/downloads/memtest86-usb.zip распаковал. Из всего, что там есть, на моу взгляд, интересен лишь memtest86-usb.img. Нужно всего лишь вытащить из образа непосредственно memtest, посмотреть как он там прописан в загрузчике и повторить эту запись в grub.cfg загрузочной флешки.
Казалось бы, что может быть проще?
# fdisk -l memtest86-usb.img
Диск memtest86-usb.img: 1 GiB, 1073741824 байт, 2097152 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: F2710038-86B6-4948-9A58-56F4E2EFB775
Устр-во начало Конец Секторы Размер Тип
memtest86-usb.img1 2048 524287 522240 255M Microsoft basic data
memtest86-usb.img2 524288 1048575 524288 256M EFI
memtest86-usb.img3 1048576 2097118 1048543 512M Microsoft basic data
Первая странность: целых 3 раздела!
Где-то на сайте нашел инструкцию как добраться до самой программы. Сейчас найти не смог, но history все помнит!
# mount -o loop,offset=263192576 memtest86-usb.img /mnt
# mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
О как!
Ну да ладно. Берем в мозолистые руки loosetup!
# losetup -f memtest86-usb.img -P
# losetup -a
/dev/loop0: [0035]:4069625 (/root/memtest86-usb.img)
[root@dragonfly ~]# ls /dev/loop*
/dev/loop0 /dev/loop0p1 /dev/loop0p2 /dev/loop0p3 /dev/loop-control
Все замечательно. Имеем сам образ в /dev/loop0, разделы /dev/loop0p{1,2,3}
Интуиция подсказывает, что все самое интересное расположено на /dev/loop0p3, но не будем торопиться. Посмотрим, что же мы имеем на первых двух разделах:
# mount /dev/loop0p1 /mnt
# tree /mnt
/mnt
├── EFI
│ └── BOOT
│ ├── Benchmark
│ ├── blacklist.cfg
│ ├── BOOTAA64.efi
│ ├── BOOTIA32.efi
│ ├── BOOTX64.efi
│ ├── mt86.png
│ └── unifont.bin
├── help
│ └── MemTest86_User_Guide_UEFI.pdf
└── license.rtf
5 directories, 8 files
Стандартный ESP раздел. Ни чего интересного! Посмотрим, что на втором:
# umount /mnt
# mount /dev/loop0p2 /mnt
# tree /mnt
/mnt
├── EFI
│ └── BOOT
│ ├── Benchmark
│ ├── blacklist.cfg
│ ├── BOOTAA64.efi
│ ├── BOOTIA32.efi
│ ├── BOOTX64.efi
│ ├── mt86.png
│ └── unifont.bin
├── help
│ └── MemTest86_User_Guide_UEFI.pdf
└── license.rtf
5 directories, 8 files
Хм… Что-то мне это напоминает… О! /dev/loop0p1! Странно…
# umount /mnt
# umount /mnt
# mount /dev/loop0p3 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0p3, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
О как!
lsblk -o path,fstype /dev/loop0
PATH FSTYPE
/dev/loop0
/dev/loop0p1 vfat
/dev/loop0p2 vfat
/dev/loop0p3
И правда. /dev/loop0p3 без fs!
Хрень какая-то…
Запилил флешку:
# dd if=memtest86-usb.img of=/dev/sdc bs=1G
1+0 records in
1+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 53,4333 s, 20,1 MB/s
# mount /dev/sdc3 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdc3, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
Что не удивительно. Ведь /dev/loop0p3 монтироваться у нас ранее отказывался.
Но, блин!
С этой флешки memtest грузится и даже что-то проверяет!
Но мне совсем не хочется выделять под memtest отдельную флешку! Мне все нужно на однй! Пытался заставить gfrub загрузить memtest из образа memtest86-usb.img, но тут я слабоват.
Вроде, нужно как-то через chainloader, но это я не умею :(