Жесткий диск WD10EARS с сектором 4 КБ. Подготовка к эксплуатации в Linux.

Исходя из специфики работы автору приходится регулярно приобретать различные новые жесткие диски, как правило для сохранения посекторных копий с неисправных накопителей.

На этот раз для этих целей был приобретен терабайтный винчестер фирмы Western Digital, модель WD10EARS-00Y5B1. В винчестере используется технология «Advanced Format», что в переводе на русский означает новый внутренний (низкоуровневый) формат с размером сектора 4096 байт (4 КБ) вместо устоявшегося за десятки лет стандартного 512-байтного сектора.

Теоретически, никаких особых нюансов в работе с этим винчестером быть не должно, т. к. он представляется как обычный НЖМД со стандартным сектором 512 Байт (разумеется, это эмулируется самим накопителем), что видно из его идентификационных данных, обозначенных на наклейке - LBA: 1953525168. Подверждение этому получаем и (забегая немного наперед) программно:

root@tazik001:~# hdparm -I /dev/sdb | grep LBA48
        LBA48 user addressable sectors: 1953525168

root@tazik001:~# hdparm -I /dev/sdb | grep Sector\ size
        Logical/Physical Sector size:          512 bytes

Тем не менее, производитель почему-то настойчиво акцентирует внимание на предварительной подготовке накопителя для работы в «устаревших» системах, о чем пишет на крышке самого накопителя и дополнительно дублирует на наклейке на упаковочном кульке. Причем явно указана только Windows XP. Для остальных ОС «drive is ready for use as is», что можно интерпретировать как «подготовки не требует», так и «ешьте, что дают :) ».

Разумеется, мы зададимся вопросом, есть ли особенности в работе этого HDD в Linux, раз ни прямо ни косвенно об этом не упоминается.

Исследования ведутся на IBM-PC совместимом компьютере, собранном на базе материнской платы ECS KV2 Extreme (чипсет VIA K8T880+VT8237R с дополнительным контроллером PATA+SATA на SiS 180, к которому и подключается испытуемый винчестер), процессор Athlon64 3700+, 1ГБ ОЗУ. Установлен частично русифицированный Slackware-12.1, проапгрейжен hdparm с 8.6 до 9.27.

 

Как издавна на Руси повелось, перво-наперво ориентируемся в пространстве:

root@tazik001:~# fdisk -l

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000945ef

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sda1                 1          127      1020096     b   W95 FAT32
/dev/sda2               128         5099     39937590    83   Linux
/dev/sda3    *         5100        10071     39937590     7   HPFS/NTFS
/dev/sda4             10072       121601    895864725     7   HPFS/NTFS

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

На диске /dev/sdb отсутствует верная таблица разделов

 

Уточняем устройство для экспериментов:

 

root@tazik001:~# hdparm -i /dev/sdb | grep Model
 Model=WDC WD10EARS-00Y5B1, FwRev=80.00A80, SerialNo=WD-WCAV55974950

 

Тест скорости чтения:

 

root@tazik001:~# hdparm -t /dev/sdb

/dev/sdb:
 Timing buffered disk reads: 302 MB in 3.01 seconds = 100.48 MB/sec

 

Тест скорости чтения посредством dd:

root@tazik001:~# dd if=/dev/sdb of=/dev/null bs=128K count=20000
20000+0 записей считано
20000+0 записей написано
 скопировано 2621440000 байт (2,6 GB), 24,372 c, 108 MB/c

Тест скорости записи посредством dd:

root@tazik001:~# dd if=/dev/zero of=/dev/sdb bs=128K count=20000
20000+0 записей считано
20000+0 записей написано
 скопировано 2621440000 байт (2,6 GB), 24,2364 c, 108 MB/c

 

Теперь создаём один основной раздел на всю «поляну»:

root@tazik001:~# fdisk /dev/sdb

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-121601, по умолчанию 1):
Используется значение по умолчанию 1
Последний цилиндр или +size или +sizeM или +sizeK (1-121601, по умолчанию 121601):
Используется значение по умолчанию 121601

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x15f317bf

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                 1       121601    976760001    83   Linux

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

 

Форматируем новый раздел:

root@tazik001:~# mkfs.reiserfs /dev/sdb1

 

Монтируем файловую систему раздела:

root@tazik001:~# mount /dev/sdb1 /mnt/hd

 

Проверяем скорость записи данных в файловую систему.
(Для наблюдения за скоростью здесь и в последующих аналогичных случаях на втором терминале вводим watch -n60 killall -SIGUSR1 dd, либо, чтоб не топтать лишний раз клавиши, запишем команду в файл и сделаем его исполняемым.)

root@tazik001:~# dd if=/dev/zero of=/mnt/hd/000.dd bs=128K count=100000
16140+0 записей считано
16140+0 записей написано
 скопировано 2115502080 байт (2,1 GB), 56,9052 c, 37,2 MB/c
32379+0 записей считано
32379+0 записей написано
 скопировано 4243980288 байт (4,2 GB), 117,056 c, 36,3 MB/c
46439+0 записей считано
46439+0 записей написано
 скопировано 6086852608 байт (6,1 GB), 177,719 c, 34,2 MB/c
65859+0 записей считано
65859+0 записей написано
 скопировано 8632270848 байт (8,6 GB), 237,151 c, 36,4 MB/c
75811+0 записей считано
75811+0 записей написано
 скопировано 9936699392 байта (9,9 GB), 297,219 c, 33,4 MB/c
90639+0 записей считано
90639+0 записей написано
 скопировано 11880235008 байт (12 GB), 357,965 c, 33,2 MB/c
100000+0 записей считано
100000+0 записей написано
 скопировано 13107200000 байт (13 GB), 399,318 c, 32,8 MB/c

Оба-на! Скорость записи втрое ниже ожидаемой.
(Между делом замечу, что скорость чтения этого же файла вполне на уровне - около 100 МБ/сек. Баг вылазит только на записи.)
Может ReiserFS «глючная» :) ? Проверим «грязным хаком» :) .
Сначала отмонтируемся:

root@tazik001:~# umount /dev/sdb1

 

Потом сотрем содержимое нулевого сектора:

root@tazik001:~# dd if=/dev/zero of=/dev/sdb count=1

 

А потом создадим новую файловую систему прямо на жестком диске как на дискете (ключ -f - форсировать выполнение ни о чем не предупреждая):

root@tazik001:~# root@tazik001:~# mkfs.reiserfs -f /dev/sdb

 

Монтируем:

root@tazik001:~# mount /dev/sdb /mnt/hd

 

Пишем:

root@tazik001:~# dd if=/dev/zero of=/mnt/hd/000.dd bs=128K count=100000
17877+0 записей считано
17877+0 записей написано
 скопировано 2343174144 байта (2,3 GB), 27,8018 c, 84,3 MB/c
53827+0 записей считано
53827+0 записей написано
 скопировано 7055212544 байта (7,1 GB), 87,8909 c, 80,3 MB/c
89724+0 записей считано
89724+0 записей написано
 скопировано 11760304128 байт (12 GB), 148,018 c, 79,5 MB/c
100000+0 записей считано
100000+0 записей написано
 скопировано 13107200000 байт (13 GB), 165,614 c, 79,1 MB/c

Совсем другое дело! Видим, что проблема не в файловой системе. Видим также, что винчестеру совершенно не нравится традиционная MS-DOS MBR совместимая разметка с началом раздела на 63-м стандартном 512-байтном секторе, с номером, не кратным размеру нового «хардверного» сектора в 4 КБ (8 «традиционных» секторов по 512 Б). Попробуем обойти это. Отмонтируем файловую, очищаем 0-й сектор для дальнейшей работы:

root@tazik001:~# umount /dev/sdb

root@tazik001:~# dd if=/dev/zero of=/dev/sdb count=1

 

Попробуем создать fdisk'ом раздел с началом на 64-м секторе. Для ввода границ раздела в секторах (LBA), а не в стандартном LCHS применим ключ -u. Акцентирую внимание на том, что fdisk по умолчанию предлагает сектор 63!

root@tazik001:~# fdisk -u /dev/sdb

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый сектор (63-1953525167, по умолчанию 63): 64
Последний сектор или +size или +sizeM или +sizeK (64-1953525167, по умолчанию 1953525167):
Используется значение по умолчанию 1953525167

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders, всего 1953525168 секторов
Units = секторы of 1 * 512 = 512 bytes
Disk identifier: 0x5e5c7cb9

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                64  19535251671    976762552    83   Linux

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

 

Форматируем, монтируем:

root@tazik001:~# mkfs.reiserfs /dev/sdb1

root@tazik001:~# mount /dev/sdb1 /mnt/hd

 

Проверяем скорость записи на раздел:

root@tazik001:~# dd if=/dev/zero of=/mnt/hd/000.dd bs=128K count=100000
2889+0 записей считано
2889+0 записей написано
 скопировано 378667008 байт (379 MB), 4,32944 c, 87,5 MB/c
42386+0 записей считано
42386+0 записей написано
 скопировано 5555617792 байта (5,6 GB), 64,369 c, 86,3 MB/c
87304+0 записей считано
87304+0 записей написано
 скопировано 11443109888 байт (11 GB), 124,384 c, 92,0 MB/c
100000+0 записей считано
100000+0 записей написано
 скопировано 13107200000 байт (13 GB), 140,365 c, 93,4 MB/c

В целом недурно и значительно ближе к максимально возможной скорости записи.

При организации 2-х и более первичных разделов придерживаемся того же правила: начало каждого раздела должно быть на секторе с номером, кратным как минимум 8-ми. Для этого рассчитываем на калькуляторе кратным 8-ми (минус 1 сектор) номер последнего сектора предыдущего раздела и вводим его fdisk'ом . Требуемый «правильный» номер начального сектора следующего раздела fdisk предложит по умолчанию сам.
В этом примере номер сектора второго раздела я подобрал кратным 64-м:

root@tazik001:~# fdisk -u /dev/sdb

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый сектор (63-1953525167, по умолчанию 63): 64
Последний сектор или +size или +sizeM или +sizeK (64-1953525167, по умолчанию 1953525167): 976639999

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 2
Первый сектор (976640000-1953525167, по умолчанию 976640000):
Используется значение по умолчанию 976640000
Последний сектор или +size или +sizeM или +sizeK (976640000-1953525167, по умолчанию 1953525167):
Используется значение по умолчанию 1953525167

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders, всего 1953525168 секторов
Units = секторы of 1 * 512 = 512 bytes
Disk identifier: 0x17d66173

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                64    976639999    488319968    83   Linux
/dev/sdb2         976640000   1953525167    488442584    83   Linux

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

Форматируем, монтируем, проверяем скрость записи:

root@tazik001:~# mkfs.reiserfs /dev/sdb2

root@tazik001:~# mount /dev/sdb2 /mnt/hd

root@tazik001:~# dd if=/dev/zero of=/mnt/hd/000.dd bs=128K count=100000
33765+0 записей считано
33765+0 записей написано
 скопировано 4425646080 байт (4,4 GB), 51,3811 c, 86,1 MB/c
72486+0 записей считано
72486+0 записей написано
 скопировано 9500884992 байта (9,5 GB), 111,47 c, 85,2 MB/c
100000+0 записей считано
100000+0 записей написано
 скопировано 13107200000 байт (13 GB), 153,375 c, 85,5 MB/c

Working good!

 

Рассмотрим совсем запущенный случай для логического тома в расширенном разделе.

 

Т. к. во времена господства MS-DOS расширенный раздел был придуман для программной эмуляции еще одного (второго) жесткого диска на свободном пространстве уже имеющегося накопителя, то для организации первого логического тома в расширенном разделе fdisk предложит нам создать его начальный сектор с номером n+63, где n - начальный сектор расширенного раздела. Нам же необходимо для соблюдения условия кратности 8-ми сектор n+64.

Т. е., сначала нам надо организовать расширенный раздел с номером начального сектора, кратным 8-ми. После чего будем создавать логический том в расширенном разделе также с начальным сектором, кратным восьми.

Отмонтируем и удалим fdisk'ом 2-й основной раздел.
После чего на его месте создадим расширенный со вложенным логическим томом.

root@tazik001:~# fdisk -u /dev/sdb

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders, всего 1953525168 секторов
Units = секторы of 1 * 512 = 512 bytes
Disk identifier: 0x00054d40

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                64    976639999    488319968    83   Linux

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
e
Первый сектор (976640000-1953525167, по умолчанию 976640000):
Используется значение по умолчанию 976640000
Последний сектор или +size или +sizeM или +sizeK (976640000-1953525167, по умолчанию 1953525167):
Используется значение по умолчанию 1953525167

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders, всего 1953525168 секторов
Units = секторы of 1 * 512 = 512 bytes
Disk identifier: 0x00054d40

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                64    976639999    488319968    83   Linux
/dev/sdb2         976640000   1953525167    488442584     5   Расширенный

Команда (m для справки): n
Действие команды
   l   логический (5 или более)
   p   основной раздел (1-4)
l
Первый сектор (976640063-1953525167, по умолчанию 976640063): 976640064
Последний сектор или +size или +sizeM или +sizeK (976640064-1953525167, по умолчанию 1953525167):
Используется значение по умолчанию 1953525167

Команда (m для справки): p

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders, всего 1953525168 секторов
Units = секторы of 1 * 512 = 512 bytes
Disk identifier: 0x00054d40

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                64    976639999    488319968    83   Linux
/dev/sdb2         976640000    1953525167   488442584     5   Расширенный
/dev/sdb5         976640064    1953525167   488442552    83   Linux

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

root@tazik001:~# mkfs.reiserfs /dev/sdb5

root@tazik001:~# mount /dev/sdb5 /mnt/hd

root@tazik001:~# dd if=/dev/zero of=/mnt/hd/000.dd bs=128K count=100000
6585+0 записей считано
6585+0 записей написано
 скопировано 863109120 байт (863 MB), 11,2747 c, 76,6 MB/c
37947+0 записей считано
37947+0 записей написано
 скопировано 4973789184 байта (5,0 GB), 72,3125 c, 68,8 MB/c
68410+0 записей считано
68410+0 записей написано
 скопировано 8966635520 байт (9,0 GB), 131,587 c, 68,1 MB/c
99030+0 записей считано
99030+0 записей написано
 скопировано 12980060160 байт (13 GB), 191,798 c, 67,7 MB/c
100000+0 записей считано
100000+0 записей написано
 скопировано 13107200000 байт (13 GB), 193,386 c, 67,8 MB/c

 

Working very good! Что и требовалось доказать.

Отмонтируем раздел для дальнейших экспериментов:

root@tazik001:~# umount /dev/sdb5

В свою очередь WD предлагает нам свой вариант согласования старой разметки с новым низкоуровневым форматом путем установки перемычки на контакты 7-8. В этом случае винчестер сдвигает трансляцию на 1 сектор (512 Б), «подсовывая» под начало раздела свой «родной» 64-й сектор, вместо 63-го. Для пущей понятности наглядно продемонстируем, что в этом случае происходит.

Очистим первые 500 секторов для дальнейшей работы:

root@tazik001:~# dd if=/dev/zero of=/dev/sdb count=500

 

Создадим новый раздел классическим методом и отформатируем:

root@tazik001:~# fdisk /dev/sdb

root@tazik001:~# mkfs.reiserfs /dev/sdb1

 

Посмотрим содержимое сектора 0:

root@tazik001:~# hdparm --read-sector 0 /dev/sdb

/dev/sdb:
reading sector 0: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 8ba4 c746 0000 0100
0001 fe83 ffff 003f 0000 5982 7470 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 aa55

Визуально напоминает :) живую таблицу разделов (сигнатура aa55) с одним разделом Линукс (тип 83).

Почитаем сектор 191 - в нем живет рейзерэфэсный суперблок:

root@tazik001:~# hdparm --read-sector 191 /dev/sdb

/dev/sdb:
reading sector 191: succeeded
0b30 0e8e ce00 0e8d 2013 0000 0012 0000
0000 0000 2000 0000 0400 0000 0f87 3caf
0384 0000 001e 0000 0000 0000 1000 03cc
0002 0001 6552 7349 7245 4632 0073 0000
0003 0000 0002 1d1d 0002 0000 0000 0000
0001 0000 d748 2bfc fd2a bd4f 9d95 4612
4d4c 605d 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0001 0000
0003 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Прошу поверить на слово - это именно он :) .
Выключаем тазик:

root@tazik001:~# halt

 

Cтавим перемычку на контакты 7-8. Включаемся.

root@tazik001:~# fdisk -l

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000945ef

  Устр-во  Загр      Начало        Конец        Блоки    Id   Система
/dev/sdb1                 1          127      1020096     b   W95 FAT32
/dev/sdb2               128         5099     39937590    83   Linux
/dev/sdb3    *         5100        10071     39937590     7   HPFS/NTFS
/dev/sdb4             10072       121601    895864725     7   HPFS/NTFS

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

На диске /dev/sdb отсутствует верная таблица разделов

Раздел как ветром сдуло. Куда ж он делся? «Пошукаем псису»:

root@tazik001:~# hdparm --read-sector 0 /dev/sdb

/dev/sdb:
reading sector 0: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

root@tazik001:~# hdparm --read-sector 191 /dev/sdb

/dev/sdb:
reading sector 191: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Пусто. Поищем суперблок в окрестностях:

root@tazik001:~# hdparm --read-sector 190 /dev/sdb

reading sector 190: succeeded
0b30 0e8e ce00 0e8d 2013 0000 0012 0000
0000 0000 2000 0000 0400 0000 0f87 3caf
0384 0000 001e 0000 0000 0000 1000 03cc
0002 0001 6552 7349 7245 4632 0073 0000
0003 0000 0002 1d1d 0002 0000 0000 0000
0001 0000 d748 2bfc fd2a bd4f 9d95 4612
4d4c 605d 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0001 0000
0003 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Вот он! Оказался на 190-м секторе. Соответственно, таблица разделов сейчас находится на секторе -1 (минус 1), т. е. не в пользовательской зоне и она недоступна штатными средствами.

Если сейчас в таком виде, с установленной перемычкой 7-8, создать классическую разметку и отформатировать новоиспеченный раздел, то таблица разделов окажется на «заводском» 1-м секторе. Но начало раздела - на «удобном» винчестеру «заводском» 64-м, суперблок - на 192-м. Т. е. логика раздела и ФС будет кратна «хардверному» сектору в 4 КБ и ничего тормозить не будет. Разумеется, перемычку после этих операций снимать будет нельзя!

Это есть весьма оригинальное «хардверное» решение проблемы от WD, и для создания единственного основного раздела вполне успешно заменяет «пляски с бубном» в fdisk. К сожалению, трюк с перемычкой работает только для одного основного раздела на весь объем устройства, либо же только для первого основного раздела. Если всё делать «по умолчанию», то для следующих после первого основных разделов, либо логических томов в расширенном разделе, кратность будет опять переломана, и работа в рамках всех разделов, кроме первого, будет идти с тормозами, и никакие перемычки здесь уже не помогут.

В целом мы убедились, что проявленная багофича связана с тяжелым наследием разметки дисков по умолчанию, совместимым с классическим MS-DOS MBR.

При создании же посекторных копий других дисков на исследуемый диск тем же dd, либо отказоустойчивыми ddrescue и dd_rescue, без учёта имеющихся логических структур, в связи со вполне приемлемой эмуляцией 512-байтного сектора, никаких критических сбоев в работе замечено не было. Вкупе с демократичной ценой, винчестер демонстрирует приличные скоростные характеристики при последовательных записи и чтении и низкую рабочую температуру, характерную для всех накопителей WD Green. И после внимательного ознакомления с написанным материалом может однозначно быть рекомендован к эксплуатации в Линукс.

Виталий Розизнаный AKA Rozik, специально для rlab.ru.

Источник: Восстановление данных R.LAB