українськомовний посібник із завантажувача Grub4dos
Є два типи мапінгу, це прямий мапінг і мапінг пам'яті. Прямий мапінг зазвичай використовується для великих образів/пристроїв. Якщо використовувати прямий мапінг, то щоб створити віртуальний пристрій із образу диска, файл образу має бути безперервним (не фрагментованим). Ці утиліти - contig чи wincontig можуть дефрагментувати файл образу. Спроба замапит фрагментований файл приведе до результату - Error 60: File for drive emulation must be in one contiguous disk area , при такому повідомленні потрібно робити мапінг на згадку чи дефрагментувати образ і пробувати знову.
Мапінг пам'яті, це означає, що пристрій/образ переноситься в оперативну пам'ять, зазвичай використовується для маленьких образів - наприклад, образів флоппі дисків. При мапінгу в пам'ять образ диска може бути фрагментованим. Розмір наявної оперативної пам'яті буде визначати максимальний розмір образу, який можна завантажити.
Процес "map" здійснюється за допомогою INT 13 - і емульований диск буде доступний з інших ОС, які використовують спільний доступ до файлів, наприклад DOS і Windows 9x. Не буде доступу до дисків образів ОС, які використовують захищений режим драйверів (Windows NT/2000/XP/Vista, Linux, FreeBSD), як тільки режим захисту вступить в роботу.
Прямий Мапінг
Завантаження образів дисків
Приклад прямого мапінгу образу флоппі диска вже наводився раніше в цьому посібнику:
Ось що ми бачимо, коли робимо все це у командному рядку:
grub> map (hd0,0)/win98.ima (fd0) FAT12 BPB заснований на 0xEB (jmp), що беруть boot sector.
probed C/H/S =80/2/18, probed total sectors = 2880
floppies_orig=0, harddrives_orig=2, floppies_curr=1, harddrives_curr=2
grub> chainloader (fd0)+1
grub> rootnoverify (fd0)
grub> map --floppies=1
Коли використовується прямий мапінг, образ диска повинен мати працездатну MBR. Образ із кількома розділами повинен мапіруватися як (hd) пристрій. Якщо образ диска складається з одного розділу (без MBR), тоді треба мапит його як флоппі.
Ряд прикладів мапінгу можна зустріти у файлі README_GRUB4DOS.txt.
Підміна диска
Наприклад, можна використовувати команду map для заміни дисків, коли ми завантажуємося з USB пристрою (Наприклад флешка або УСБ-жорсткий диск). Коли налаштування BIOS виставлені на завантаження з USB, жорсткий диск стане (HD1). DOS і Windows 9x не зможуть завантажуватися з цього жорсткого диска. Windows NT системи теоретично можуть вантажитися не з першого диска, але шляхи boot.ini будуть не вірні, коли відбудеться завантаження з USB пристрою. Якщо windows встановлена на жорсткий диск, вона не завантажуватиметься.
Наприклад, ми ставимо в комп'ютер новий жорсткий диск. А старий жорсткий диск із встановленою Windows XP - перетворюємо з первинного (master) на вторинний (slave) (він стає (hd1)). Новий диск стає первинним (master) (hd0) на ньому встановлена Vista і тепер немає жодної можливості вантажити Windows XP зі старого диска.
У разі ми можемо завантажити систему не з першого розділу шляхом заміни дисків (Наприклад: поміняємо (hd1) на (hd0)).
(hd0,0) містить файл-мітку hd0.tag та (hd1,0) містить файл-мітку hd1.tag. Програма MBR Wizard знаходиться на (hd1,0), щоб перевірити, який диск буде доступний з ДОС після експериментів з командою map .
В результаті отримаємо помилку,
ПРИМІТКА - використовуючи наведений вище набір команд, заміна (hd1) на (hd0) не матиме ефекту поки команда boot не виконана. Хоча пристрій (hd1) було замаплено як (hd0),всі посилання на фактичні пристрої залишаються (hd1) у Grub4dos. Введення команди find /hd0.tag з командного рядка, поверне пристрій (hd0,0), введення команди find /hd1.tag із командного рядка, поверне пристрій (hd1,0) - дивимося приклад нижче:
grub> map (hd1) (hd0)
grub> find /hd0.tag (hd0,0)
grub> find /hd1.tag (hd1,0)
grub> root (hd1,0) Filesystem type is fat, partition type 0xe
grub> chainloader /io.sys Will boot MS-DOS 7.x від drive=0x81, partition=0x0(hidden sectors=0x3f)
Зверніть увагу на те, що виводить команда chainloader - . від drive = 0x81. Після завантаження ДОС виконуємо команду mbrwizd.exe/list. Тепер ви можете побачити за розміром та типом файлової системи на Фото 1 - перед нами пристрій (hd1) відображається як Disk:0 і Disk:1 - а пристрій (hd0) не видно.
ПРИМІТКА - використання вищезазначеного набору команд замінить (hd1) на (hd0) негайно, після того як команда map --hook буде виконана. Введення команди find /hd0.tag з командного рядка матиме результат - "File not found" (файл не знайдено), введення команди find /hd1.tag з командного рядка поверне пристрої (hd0,0) та (hd1,0) - дивимося приклад нижче:
grub> map (hd1) (hd0)
grub> find /hd0.tag Error 15: File not found
grub> find /hd1.tag (hd0,0) (hd1,0)
grub> root (hd0,0) Filesystem type is fat, partition type 0xe
grub> chainloader /io.sys Will boot MS-DOS 7.x від drive=0x80, partition=0x0(hidden sectors=0x3f)
Зверніть увагу на те, що виводить команда chainloader - . від drive = 0x80 . Після завантаження ДОС виконуємо команду mbrwizd.exe/list. Результат буде таким же, як і в попередньому прикладі, пристрій (hd1) відобразиться як Disk:0 іDisk:1 - а пристрій (hd0) знову не видно.
ПРИМІТКА - після введення команди map (hd1) (hd0) та map (hd0) (hd1), введення команди find /hd0.tag з командного рядка поверне пристрій (hd0). Введення команди find/hd1.tag поверне пристрій (hd1). Коли ДОС буде завантажено, обидва диски будуть доступні, хоча фізичний пристрій (hd1) буде відображено як Disk: 0 і пристрій (hd0) буде Disk: 1 - дивимося Фото 2.
Запам'ятайте, що диски, що емулюються, доступні тільки з ОС, що використовують INT 13. У прикладі показаному вище, Windows-подібна система побачить пристрій (hd0) як "disk 0" і пристрій (hd1) як "disk 1".
Коли мапінг розділу виконаний у наступному синтаксисі (hdm,n)+1, він використовується для представлення цілого розділу (Де m=номер диска, і n=номер розділу), а не тільки першого сектора.
Приклад відповіді Grub4dos на наступні команди:
grub> map (hd1,0)+1 (hd0) FAT16 BPB заснований на 0xEB (jmp) leading the boot sector.
probed C/H/S =40/16/63, probed total sectors = 40257 Три до місцевості розширеної партії (hd1)0+40320 для віртуальної (hd0).
probed C/H/S =40/16/63, probed total sectors = 40320
grub> map (hd1) (hd0)
grub> chainloader /io.sys Will boot MS-DOS 7.x від drive=0x80, partition=0x0(hidden sectors=0x3f)
grub> rootnoverify (hd0)
Уривок із попередженням з README_GRUB4DOS.txt :
Мапінг пам'яті
Мапінг пам'яті використовується з комадами як і прикладах вище, і додався параметр --mem.
Коли ми використовуємо мапінг пам'яті, допускається, що образ диска може бути фрпагментований. Пристрій переноситься в оперативну пам'ять - Наприклад: map-mem(hd0,0)+1 (fd0) (як говорилося раніше, +1 використовується з командою map щоб позначити цілийдиск). Якщо замапити образ диска без MBR в пам'ять, він може бути як (hd) пристрою, а MBR буде створено в рамках Grub4dos - ґрунтуючись на даних розділу.
Стиснутий образ також можна використовувати при карті пам'яті. Образ повинен бути стиснутий gzip-ом (виходить файл з розширенням .gz), це безкоштовний "opensource" архіватор. Оскільки багато образів дисків не є "заповненими", їх стиснення може звільнити досить багато місця. Стандартні образи дискет (1440 Кб) зазвичай залишають як є. Стискати образи рекомендується тому що це дозволяє економити місце і прискорювати їх запуск.
gzip можна скачати Тут. Якщо будемо тиснути gzip-ом образ флоппі диска bcdl201a.ima 1440Кб, то в стислому вигляді він важитиме 10.4Кб.
Grub4dos підтримує тільки .gz формат, а ядро memdisk (частина пакета syslinux) підтримує .zip формат - Наприклад Winimage .imz формат. Ядро memdisk може бути стиснуте gzip і завантажено за допомогою Grub4dos.
- find --set-root /memdisk.gz[enter]
- kernel /memdisk.gz[enter]
- initrd /win98.ima.gz[enter]
- boot[enter]
- find --set-root /memdisk.gz[enter]
- kernel /memdisk.gz[enter]
- initrd /win98.ima.zip[enter]
- boot[enter]
ПРИМІТКА - на наведених вище прикладах win98.ima повинен знаходитися в тому ж розділі, що і memdisk.gz .
Завантаження з .ISO образу
У наступному прикладі був взятий образ CD, що містить у собі завантажувальний сктор у вигляді ДОС-завантажувальної дискети, з різними ДОС програмами на диску CD (не в завантажувальній області). Коли ми завантажуємося з цього (реального) CD, образ у завантажувальному секторі визначається як диск A: і сам CD-ROM (і програми в його корені) займаютьнаступну доступну букву диска. Файл образу CD (hd0,0)/dos.iso буде вантажитися використовуючи команди наведені вище, ось те, що покаже Grub4dos в результаті цих команд:
grub> map (hd0,0)/dos.iso (hd32)
grub> root (hd32) Filesystem type is iso9660, using the whole disk
grub> chainloader (hd32)
Load segment: 0x0 System Type: 0x0 Sector Count: 0x1 Load RBA: 0x3E Boot Type: 2 = 1.44M floppy
На вигляд CD завантажився нормально. Завантажувальний сектор CD визначився як A: а CD-ROM визначився як E:. Але на жаль спроба дострупа до файлів на диску E: (корінь CD образу) закінчується помилкою.
Файл README_GRUB4DOS.txt свідчить:
ПРИМІТКА - Якщо команда mkisofs -iso-level 4 була використана для створення .iso образу (як це робиться в PE білдах), MSCDEX.EXE не повинна використовуватися - видаліть її з SHSUCDX (Подробиці Тут).
Відредаговані config.sys та autoexec.bat і з доданим у завантажувальний образ файлом eltorito.sys записали в dos.iso. Цей перероблений CD завантажився як і раніше з доступним як A: завантажувальним чином і з недоступним коренем CD.
Коли ми мапимо .iso, що містить eltorito.sys в завантажувальному секторі пристрою (0xFF), CD-ROM завантажується і тепер обидві частини, завантажувальний образ (А:) і корінь CD доступні!
Цей приклад показує, які складності трапляються при емуляції CD-ROM. Якщо хочете подивитися на робочі приклади, то це можна зробити.
Вкладений Мапінг
Використовуючи останні версії Grub4dos можна замапити образ з іншого замапленого образу - Іноді це називають подвійний мапінг. UBCD проект, наприклад, використовує завантажувальний CD, що містить завантажувальний образ дискети. Використовуючи емуляцію CDROM, ми можемо замапити файл UBCD .iso як (hd32), потімзамапити образ флоппі диска з (hd32) як пристрій (fd0), потім завантажитися зі свіжозмапленого образу флоппі диска.
Наприклад:
- map --mem (hd0,0)/ubcd34-basic.iso (hd32)[enter]
- map --hook[enter]
- map --mem (hd32)/IMAGES/MAXBLAST.IGZ (fd0)[enter]
- map --hook[enter]
- root (fd0)[enter]
- chainloader +1[enter]
- boot[enter]