Работая с 3 разделами жесткого диска os x, linux, windows я столкнулся с проблемой установки тестовой Windows 7 на свой ноутбук. Ситуация заключалась в том, что установщик ругался на наличие Microsoft Reserved Partition и отказывался продолжать установку на указанный свободный раздел.
Операционная система OS X требует наличие на винчестере GPT разбивки разделов, это отличная от стандартной и привычной всем схемы MBR разделов.
Вкратце: GPT диск состоит из разделов, аналогичным 4 партициям стандартного MBR диска. Однако, в GPT диске, помимо того, что число партициям увеличено до 128, так теперь каждая из них имеет уникальное имя, набор флагов и уникальный uuid идентификатор - определяющий ее назначение.
Подробная статья, не нуждающаяся в комментариях, о GPT диске и его структуре находится в википедии:
Одна из системных утилит, именуемая parted, предназначаемая для редактирования GPT разделов диска содержит ошибку, не позволяющую вам полноценно управлять типами разделов. Проблема заключается в том, что установив тип раздела как msftres вы не сможете больше убрать этот флаг. Единственный и неотвратимый выход - удалять раздел диска.
Для справки, вот 4 основных типа раздела:
- msftres E3C9E316-0B5C-4DB8-817D-F92DF00215AE
- boot C12A7328-F81F-11D2-BA4B-00A0C93EC93B
- linux/windows data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
- os x 48465300-0000-11AA-AA11-00306543ECAC
[root@axet-laptop ~]# hexedit /dev/sda 00000400 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B (s*......K...>.; 00000410 81 A8 24 AF 75 A2 25 46 8D AD FC 4D FA E5 DE 6F ..$.u.%F...M...o 00000420 28 00 00 00 00 00 00 00 27 40 06 00 00 00 00 00 (.......'@...... 00000430 01 00 00 00 00 00 00 00 45 00 46 00 49 00 00 00 ........E.F.I... 00000440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000480 00 53 46 48 00 00 AA 11 AA 11 00 30 65 43 EC AC .SFH.......0eC.. 00000490 88 FA 3C 3A 5C 2E EA 4D A4 53 B7 A2 7C AA E4 09 ..<:\..M.S..|... 000004A0 28 40 06 00 00 00 00 00 27 40 02 04 00 00 00 00 (@......'@...... 000004B0 00 00 00 00 00 00 00 00 4C 00 65 00 6F 00 70 00 ........L.e.o.p. 000004C0 61 00 72 00 64 00 00 00 00 00 00 00 00 00 00 00 a.r.d........... 000004D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000004E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 000004F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000500 A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7 ......3D..h..&.. 00000510 8E 92 E5 FD F1 F2 67 41 96 95 FA 13 78 4F FF 39 ......gA....xO.9 00000520 AB 4A 06 04 00 00 00 00 36 79 44 0B 00 00 00 00 .J......6yD..... 00000530 00 00 00 00 00 00 00 00 46 00 65 00 64 00 6F 00 ........F.e.d.o. 00000540 72 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 r.a............. 00000550 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000580 A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7 ......3D..h..&.. 00000590 C4 0D 90 C4 C0 51 46 41 B3 D5 13 8B 2C BB 62 92 .....QFA....,.b. 000005A0 47 65 48 0B 00 00 00 00 C0 37 F9 0D 00 00 00 00 GeH......7...... 000005B0 00 00 00 00 00 00 00 00 57 00 69 00 6E 00 64 00 ........W.i.n.d. 000005C0 6F 00 77 00 73 00 20 00 37 00 00 00 00 00 00 00 o.w.s. .7.......
Из привиденного выше дампа видно, что GUID находится первой строчкой начиная со смещения 0x400, затем 0x480 и так далее.
Если же для исправления ситуации с зависшем msftres флагом, вы не рискуете исправлять эти значения в ручную можете перекомпилировать parted утилиту с небольшим пачем:
diff -ur parted-1.8.8/libparted/labels/gpt.c
parted-1.8.8.new/libparted/labels/gpt.c
--- parted-1.8.8/libparted/labels/gpt.c 2009-01-31 23:33:06.000000000 +0300
+++ parted-1.8.8.new/libparted/labels/gpt.c 2009-01-31 23:33:00.000000000 +0300
@@ -1299,29 +1299,6 @@
return 1;
}
- if (fs_type) {
- if (!strncmp (fs_type->name, "fat", 3) == 0
- || !strcmp (fs_type->name, "ntfs") == 0) {
- gpt_part_data->type = PARTITION_MSFT_RESERVED_GUID;
- return 1;
- }
- if (!strncmp (fs_type->name, "hfs", 3) == 0) {
- if (!guid_cmp (gpt_part_data->type,
- PARTITION_APPLE_TV_RECOVERY_GUID)
- || gpt_part_data->atvrecv) {
- gpt_part_data->type =
- PARTITION_APPLE_TV_RECOVERY_GUID;
- } else {
- gpt_part_data->type = PARTITION_APPLE_HFS_GUID;
- }
- return 1;
- }
- if (strstr (fs_type->name, "swap")) {
- gpt_part_data->type = PARTITION_SWAP_GUID;
- return 1;
- }
- }
-
gpt_part_data->type = PARTITION_BASIC_DATA_GUID;
return 1;
}
Ссылки по теме:


0 коммент.:
Отправить комментарий