14.10.2026 · Лаборатория HDDLab, Берлин
Восстановление объёма HUH721212ALE604 (6→12 ТБ)
Диск HGST HUH721212ALE604 (S/N 8DGG••••) возвращён с 6 ТБ на полные 12 ТБ: после правки двух модулей служебной зоны (0x8C FCOD и 0x3E ZCHS) и рестарта питания паспорт показывает 23 437 770 752 сектора.
Исходные данные
Работали на PC-3000 Portable-III (ПО 7.9.15), утилита HGST CCB Architecture, профили в D:\!Profiles\HGST_CCB\Leo-A-HE12.
| Пациент | Донор | |
|---|---|---|
| Модель | HGST HUH721212ALE604 | WDC WD121PURZ-85GUCY0 |
| S/N | 8DGG•••• | AAHE•••• |
| Прошивка | LEGNW3D0 | 81.H0A80 |
| Семейство | Leo-A-HE12 | Leo-A-HE12 |
| Объём в паспорте | 11 721 532 032 сект. (6 ТБ) | 23 437 770 752 сект. (12 ТБ) |
| Головки | 16 (00–0F), все в карте | 16 |
Диагностика
Ограничение сидело в служебной зоне, а не в ATA-механизмах: все три способа чтения максимума давали одно и то же число.
| Проверка в PC-3000 | Значение |
|---|---|
| Паспорт, LBA48 | 11 721 532 032 |
| Установка MAX LBA (READ NATIVE MAX, HPA) | 11 721 532 031 |
| Device Configuration Overlay, Max LBA | 11 721 532 031 |
- HPA и DCO поддерживаются, но не урезают: native max равен текущему.
- Карта головок полная (00–0F), дорожки есть на всех головках — диск не «депопнут».
- В утилите нет функции смены ёмкости для этого семейства, поэтому искали нужный модуль сравнением с донором.
Сравнение с донором
Объём задаётся в двух местах: конфигурация — в модуле 0x8C FCOD (Drive Configuration Data, 768 байт), итоговый max LBA — в заголовке 0x3E ZCHS (Zone Data). Все смещения — от начала файла модуля, числа little-endian.
| Модуль, смещение | Размер | Пациент (6 ТБ) | Донор (12 ТБ) |
|---|---|---|---|
| FCOD 0x8C | 8 байт, секторы 512 | 11 721 532 032 | 23 437 770 752 |
| FCOD 0xB4 | 4 байта, блоки 4K | 1 465 191 504 | 2 929 721 344 |
| ZCHS 0x54, 0x64, 0x6C | 5 байт, max LBA | 11 721 532 031 | 23 437 770 751 |
| ZCHS 0x52 | 1 байт, флаг | 0x84 | 0x04 |
Кроме этих полей и контрольной суммы (0x0C), FCOD у двух дисков побайтово одинаков, хоть прошивки разные.
Контрольная сумма модулей: сумма всех 32-битных слов модуля (little-endian, со словом 0x0C) = 0xAA55AA55. Правило проверено на 243 модулях обоих дисков; логи его не соблюдают.
Что диск изначально был 12 ТБ и урезан позже:
- журнал событий 0x10 LGEV содержит много записей с ёмкостью 23 437 770 752;
- в 0x17 SLFV (смещение 0x2C) — 23 437 770 752, след самотеста на полный объём;
- заводские 0x0A MFGC, 0x0B MFGD и 0x65 CISP указывают 12 ТБ;
- таблицы зон в ZCHS по всем 16 головкам по размеру такие же, как у донора.
Ход работ
Работа заняла около часа (время по протоколу PC-3000). Запись в служебную зону запускали вручную (кнопка OK), всё остальное — чтение и анализ.
- Диагностика пациента. Паспорт, Max LBA и DCO — везде 6 ТБ (раздел «Диагностика»).
- Бэкап пациента, 19:03. «Резервирование ресурсов HDD»: ПЗУ, все модули, LogDump, ID, Inquiry — всё Ok.
- Бэкап донора, 19:09. То же без LogDump. Утилита оставалась привязана к папке пациента, поэтому файлы донора легли туда же с суффиксом «(1)» (выбрано «Переименовать», ничего не перезаписано; принадлежность проверена по IDDump).
- Сравнение модулей. Побайтовый diff 150 пар модулей и поиск значений ёмкости в разных единицах → найден FCOD.
- Запись FCOD, \~19:25. Записан модуль 0x8C донора из отдельной папки FCOD_12TB. Проверка чтением (19:30): на диске именно этот файл, SHA-1 совпадает.
- Пересчёт транслятора и рестарт — без результата. Паспорт остался 6 ТБ. Повторное чтение всех модулей (19:42) показало: пересчёт поменял в ZCHS только флаг 0x52 (0x84 → 0x04) и контрольную сумму, max LBA в заголовке остался 6 ТБ. Значение 6 ТБ к этому моменту оставалось только в ZCHS.
- Правка ZCHS. Взят текущий ZCHS пациента, в поля 0x54, 0x64, 0x6C записано 23 437 770 751, пересчитана контрольная сумма (сумма = 0xAA55AA55). Заголовок 0x50–0x77 стал побайтово как у донора; таблицы зон остались родными.
- Запись ZCHS, 19:58. Модуль 3E из папки ZCHS_12TB — Ok. Пересчёт транслятора не запускали.
- Рестарт питания — 12 ТБ. Паспорт: 23 437 770 752 сектора.
Файлы и откат
Все пути — от D:\!Profiles\HGST_CCB\Leo-A-HE12\. Для отката до 6 ТБ: записать родные FCOD и ZCHS, затем рестарт питания.
| Файл / папка | Что это |
|---|---|
HGST HUH721212ALE604-LEGNW3D0-8DGG••••\Data\SABackup\ |
Бэкапы: без суффикса — пациент до работ (19:03), «(1)» — донор (19:09) |
...\SABackup\Modules\08C_FCOD_6TB_orig.rpm |
Родной FCOD пациента (6 ТБ) |
...\SABackup\Modules\08C_FCOD.rpm |
Заменён на 12-ТБ версию; оригинал — строкой выше |
ZCHS_6TB_backup\03E_ZCHS.rpm |
ZCHS пациента после пересчёта, до правки (6 ТБ) |
FCOD_12TB\08C_FCOD.rpm |
Записанный FCOD (12 ТБ) |
ZCHS_12TB\03E_ZCHS.rpm |
Записанный ZCHS (12 ТБ); только для диска 8DGG•••• |
HGST HUH721212ALE604-LEGNW3D0-8DGG••••\Data\Modules\ |
Чтение всех модулей после записи FCOD и пересчёта (19:42) |
Что ещё сделать
Объём вернулся, но область 6–12 ТБ пока не проверена: причина урезания неизвестна.
- Полное логическое сканирование с записью и проверкой; следить за ростом G-list и скоростью во второй половине
- Свежий бэкап служебки в состоянии 12 ТБ
- Проверка на хосте:
hdparm -N= 23437770752/23437770752,hdparm --dco-identify - Не запускать пересчёт транслятора без нужды; если паспорт снова покажет 6 ТБ — перезаписать
ZCHS_12TB\03E_ZCHS.rpm
Повтор на другом диске того же семейства. ZCHS у каждого диска свой, чужой записывать нельзя.
- Бэкап ресурсов в собственный профиль диска.
- Прочитать его FCOD и ZCHS; убедиться, что остальной FCOD совпадает с 12-ТБ версией, а таблицы зон полные.
- FCOD: 0x8C = 23 437 770 752 (8 байт), 0xB4 = 2 929 721 344 (4 байта).
- ZCHS: 0x54, 0x64, 0x6C = 23 437 770 751 (5 байт), 0x52 = 0x04.
- В обоих модулях пересчитать 0x0C так, чтобы сумма слов = 0xAA55AA55.
- Записать оба модуля из отдельной папки, без пересчёта транслятора, затем рестарт питания и проверка паспорта.
Не проверено: сработает ли правка одного ZCHS без FCOD и как поведёт себя пересчёт транслятора после обеих правок.
Эта статья на немецком: /wissen/hgst-huh721212-kapazitaet-12tb/
Похожий случай?
Опишите проблему – скажем, сможем ли помочь. Телефон 030-44041476.