воскресенье, 1 февраля 2009 г.

gpt msftres flag

02.02.2009 rewrite

Работая с 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
Для исправления данной ситуации вы можете в ручную открыть системный диск утилитой hexedit, пробежаться по разделу GPT диска и отредактировать его, изменив GUID msftres раздела на GUID linux data раздела.

[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 коммент.:

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