Автор Тема: Как я восстанавливал убитые разделы  (Прочитано 7916 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Чёрт его знает как это произошло. По-глупому в общем-то. Старею? Первый раз со мной такое за долгие годы.

Преамбула.
Нужно было гибридный образ лежащий на usb-hdd /dev/sdc "положить" на usb-flash /dev/sdd.
Ну я его четырёхсотметровый и положил. На /dev/sdc.
Естественно бит-карта разделов накрылась медным тазом.

Собственно структура винчестера 500Gb проста.
20Gb FAT32 под MagOS
233Gb ext3 зеркала
233Gb ext3 всякой-всячины включая более 60Gb линуксовых игр и примочек, собиравшихся годами.
Остальное swap.

Первые неудачи.
Из всего были взяты на вооружение:
testdisk
parted
gpart

Первые две вообще никаких разделов не нашли, включая режим глубокого сканирования.
Ничего, это значит совсем ничего. Никак.
gpart что-то показал после
gpart -vvif /dev/sdc
Но даже грубо по-памяти это совсем не соответствовало содержимому винчестера.
Все три утилиты в общей сложности отняли что-то около 9-10 часов. Полностью впустую.
Да собственно где-то третьим чувством уже знал, что результат будет нулевой.

Старая гвардия не стареет.

Пока все три утилиты бодро чем-то по очереди занимались, вспомнилось, что где-то должен болтаться sysreport, и таки был найден, вспомнилась старая привычка генерировать его после изменения хотя бы одного раздела.

Собственно архив с выводами генерируется программой, которая входит в одноимённый пакет:
# apt-cache search system-report
system-report - Collect hardware infomation for developers
# rpm -ql system-report|grep bin
/usr/bin/system-report

Самым необходимым был:
# tar -jtf ./sysreport-20101130.tar.bz2 |grep fdisk
hardware/sysreport.fdisk

который и содержит самое важное и нужное:
# Tue Nov 30 03:03:32 EET 2010
# 'fdisk -l' output


Disk /dev/sda: 250.1 GB, 250059350016 bytes
<skip>

Disk /dev/sdb: 500.1 GB, 500107837440 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000cd275

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        2611    20972826    c  W95 FAT32 (LBA)
/dev/sdb2            2612       31642   233191507+  83  Linux
/dev/sdb3           31643       60673   233191507+  83  Linux
/dev/sdb4           60674       60801     1028160   82  Linux swap / Solaris
./sysreport.fdisk lines 1-31/31 (END)

Т.е. структуру винчестера:
Start/End - номера цилиндров, начальный и последний в пределах которых располагается (располагался :) )) раздел.
Вся штука в том, что бит-карта раздела располагается в начале каждого цилиндра с которого начинается раздел.

Дальнейшие действия донельзя тривиальны и понятны без комментариев, если поглядывать на вывод выше, т.е. номера цилиндров
(правда перед этим в cfdisk был удалён раздел с записью гибридного образа для воссоздания разделов, чтобы винчестер уж совсем был пуст, для первого раздела с MagOS это значения не имеет - он всё равно разрушен):
# fdisk /dev/sdc

Команда (m для справки): m
Действие команды
   a   переключение флага загрузки
   b   редактирование метки диска bsd
   c   переключение флага dos-совместимости
   d   удаление раздела
   l   список известных типов файловых систем
   m   вывод этого меню
   n   добавление нового раздела
   o   создание новой пустой таблицы разделов DOS
   p   вывод таблицы разделов
   q   выход без сохранения изменений
   s   создание новой чистой метки диска Sun
   t   изменение id системы раздела
   u   изменение единиц измерения экрана/содержимого
   v   проверка таблицы разделов
   w   запись таблицы разделов на диск и выход
   x   дополнительная функциональность (только для экспертов)

Команда (m для справки): u
Changing display/entry units to cylinders (DEPRECATED!)

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

Disk /dev/sdc: 500.1 GB, 500107837440 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5875182e

Устр-во Загр     Начало       Конец       Блоки   Id  Система

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4, по умолчанию 1): 1
Первый цилиндр (1-60801, по умолчанию 1): 1
Last цилиндр, +цилиндры or +size{K,M,G} (1-60801, по умолчанию 60801): 2611

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4, по умолчанию 2): 2
Первый цилиндр (2612-60801, по умолчанию 2612): 2612
Last цилиндр, +цилиндры or +size{K,M,G} (2612-60801, по умолчанию 60801): 31642

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4, по умолчанию 3): 3
Первый цилиндр (31643-60801, по умолчанию 31643): 31643
Last цилиндр, +цилиндры or +size{K,M,G} (31643-60801, по умолчанию 60801): 60673

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Выбранный раздел 4
Первый цилиндр (60674-60801, по умолчанию 60674): 60674
Last цилиндр, +цилиндры or +size{K,M,G} (60674-60801, по умолчанию 60801): 60801

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

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

В интерактивном режиме, units переключено командой 'u' в режим units=cylinders - сохранившаяся карта винчестера (вывод выше) в цилиндрах.


Обратите внимание:
Воссоздаём только границы/пределы разделов и более ничего не предпринимаем!


Собственно самый важный раздел из двух восстановленных:
# du -shx /media/Transcend2/*
182G    /media/Transcend2/ALTLinux
642M    /media/Transcend2/cdimage.debian.org
4,0K    /media/Transcend2/Games
772M    /media/Transcend2/live.debian.net
16K     /media/Transcend2/lost+found

Thanks to

За маленький, но поистине бесценный пакет:
# rpm -qi system-report|grep -i pack
Packager    : Alexey Gladkov <legion@...>

Пара советов

* Спокойствие, только спокойствие! Холодный трезвый анализ и отсутствие поспешных решений.
* Держать под руками программы и результат их работы после работы с разделами хранить от греха подальше - подальше положишь, поближе возьмёшь:
# system-report
# fdisk -l > file
* Предотвратить любые возможности внесения изменений для винчестера с разрушенными данными - поспешность и необдуманность может привести к необратимым последствиям.

Необязательная болтовня

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

Вот всё, что хотелось сказать по-поводу маленькой, скромной, но очень полезной программы под shell.

Некоторое может быть излишнее дополнение.

Всё-таки данные о винчестере(рах) лучше хранить в секторах:
# fdisk -lu /dev/sdX

u - units, дефолтно в секторах.

Но академически более правильно с жёстко и однозначно заданным units:
# fdisk -l -u=sectors /dev/sdX

Выбор юнитов (Cylinders/Sectors) возможен и в интерактивном режиме (клавиша 'u' в интерактивном режиме или 'm' - справка).
С учётом:
Цитировать
fdisk does not use DOS-compatible mode and cylinders as display units by default.  The old deprecated DOS behavior can be enabled with the '-c=dos -u=cylinders' command-line options.

Но тогда здесь system-report напрашивается (?) на баг-трекер:
# cat /usr/bin/system-report |grep 'fdisk -l'
        printf "# 'fdisk -l' output\n\n" >> "$r"
поскольку вывод будет в цилиндрах.

Т.е. выбор инструмента должен быть осознанным.
Выше описывалось на основе данных которые имелись.
« Последнее редактирование: 16.05.2013 04:06:29 от Speccyfighter »
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 128
  • Sunny 273 RUS crew
Первые две вообще никаких разделов не нашли, включая режим глубокого сканирования.
Ничего, это значит совсем ничего. Никак.
На самом деле, начало каждого раздела имеет идентификатор, не помню только, какой. Можно искать его, потом отсеять лишние. Тут ещё мог бы упросить ситуацию extended-раздел - от него остальные по цепочке описываются. Вообще, когда-то это всё легко делалось посредством Norton Disk Doctor... Он и структуры данных искал, и поправить их можно было там же хоть руками...

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Вообще-то да, но режим сканирования и глубокого сканирования идут последовательно, выборочно их никак, и занимают по времени где-то 2x2часа. Если к 10-ти часам добавить ещё неопределённое, неизвестно, когда бы кончилось терпение. А уже был готов к этому.
Да и опираться не на что: на винчестере четыре примари раздела без экстендед.
К тому же gpart выплюнул штук шесть-семь примари разделов Win95, коды сходу не вспомню, и 0b и 0с, чего уж не может быть ну никак.
С учётом того, что винчестер форматировался один раз и последний.
Ну может быть на sdc1 менялась файловая и идентификатор, но никак не подвижка разделов.
На fdisk ушло по времени копейки. Всего-то с ним делов на пять минут. Максимум.
Да собственно и контроль целостности делать не очень нужно хотя и может занять: ближайший rsync если что скажет.

Нортон? Забылось уже, но неприятных воспоминаний как-то не осталось о них.
Так что вполне может быть что да.
Да и книжку когда-то про утилиты нортона долго ловил. Пока не поймал.
И до сих пор храню как реликвию.
:)
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 128
  • Sunny 273 RUS crew
Нортон? Забылось уже, но неприятных воспоминаний как-то не осталось о них.
Кстати, есть ещё вот такая штука: http://www.dfsee.com/
Но пользовался я ей последний раз, когда она была ещё OS/2 only.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Нортон? Забылось уже, но неприятных воспоминаний как-то не осталось о них.
Кстати, есть ещё вот такая штука: http://www.dfsee.com/
Но пользовался я ей последний раз, когда она была ещё OS/2 only.
:)
Носом чую новый эксперимент:
воспроизвести/смоделировать эту же ситуацию приближённую к боевой обстановке, но на usb-flash.
Т.е. стресс-тест, когда карта разделов необратимо полностью разрушена.
Тогда уже можно как-то подвести черту.
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
"Нечаянное" удаление скрытого раздела NTFS

Собственно записываем на флешку для безопасного эксперимента
# dd if=/path/altlinux-p7-tde-sysv-20131104-i586.iso of=/dev/sdd bs=2048
263680+0 записей получено
263680+0 записей отправлено
 скопировано 540016640 байт (540 MB), 125,397 c, 4,3 MB/c

Размер образа в байтах
# du -b /path/altlinux-p7-tde-sysv-20131104-i586.iso
540016640       /path/altlinux-p7-tde-sysv-20131104-i586.iso

Контрольная сумма записанного на флеш (до первой загрузки соответствует оригинальному iso)
# head -c 540016640 /dev/sdd | md5sum
b14063683c0e67c296bf3058000255eb  -

Сразу сохраняем структуру носителя с данными
# fdisk -u=sectors -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *          64     1054719      527328   17  Скрытый HPFS/NTFS
Если бы в количестве килобайтных блоков сверху был бы и 512-тибайтный, после количества блоков стоял бы '+'
Т.е. 527328 килобайтных блоков и плюс блок в 512 байт.
Нет плюса - нет и блока сверху.

"Нечаянно" удаляем раздел
# fdisk /dev/sdd
Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Команда (m для справки): d
Выбранный раздел 1
Partition 1 is deleted

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

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

Теперь раздел удалён
# fdisk -u=sectors -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
#

Восстанавливаем раздел на основании файла со структурой
'-c=dos' - потому, что первый раздел NTFS начинается с 64-го сектора, т.е. - DOS-compatible mode
Иначе первым сектором будет 2048-й, но никак не меньше
# fdisk -c=dos /dev/sdd

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (with command 'c').Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Команда (m для справки): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый sector (62-7839743, по умолчанию 62): 64
Last sector, +sectors or +size{K,M,G} (64-7839743, по умолчанию 7839743): 1054719
Partition 1 of type Linux and of size 515 MiB is set

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

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
124 heads, 62 sectors/track, 1019 cylinders
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1              64     1054719      527328   83  Linux
Раздел 1 не заканчивается на границе цилиндра.

Команда (m для справки): u
Changing display/entry units to cylinders (DEPRECATED!)

Команда (m для справки): u
Changing display/entry units to sectors

Команда (m для справки): m
Действие команды
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): L

 0  Пустой          24  NEC DOS         81  Minix / старый  bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux своп / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 скрытый ди c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux расширен  c7  Syrinx
 5  Расширенный     41  PPC PReP Boot   86  NTFS набор томо da  Данные не ФС
 6  FAT16           42  SFS             87  NTFS набор томо db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2-я част 8e  Linux LVM       df  BootIt
 9  AIX загрузочный 4f  QNX4.x 3-я част 93  Amoeba          e1  DOS access
 a  OS/2 Boot-менед 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS фс
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 расшир. (LB 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC з
11  Скрытый FAT12   56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq диагност 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Скрытый FAT16 < 61  SpeedStor       ab  Darwin загрузоч f2  DOS вторичный
16  Скрытый FAT16   63  GNU HURD или Sy af  HFS / HFS+      fb  VMware VMFS
17  Скрытый HPFS/NT 64  Novell Netware  b7  BSDI фс         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI своп       fd  Автоопределение
1b  Скрытый W95 FAT 70  DiskSecure Mult bb  Boot Wizard скр fe  LANstep
1c  Скрытый W95 FAT 75  PC/IX           be  Solaris загр.   ff  BBT
1e  Скрытый W95 FAT 80  Old Minix
Шестнадцатеричный код (введите L для получения списка кодов): 17
Системный тип раздела 1 изменен на 17 (Скрытый HPFS/NTFS)

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

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
124 heads, 62 sectors/track, 1019 cylinders
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1              64     1054719      527328   17  Скрытый HPFS/NTFS
Раздел 1 не заканчивается на границе цилиндра.

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

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

Если хотя бы раз вмешались в таблицу разделов, даже если всё правильно, контрольная сумма уже не совпадёт
# head -c 540016640 /dev/sdd | md5sum
f5806493d7edff3c6e5fd8a8f839e079  -

Раздел восстановлен.
# fdisk -u=sectors -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1              64     1054719      527328   17  Скрытый HPFS/NTFS

А флаг boot восстанавливать кто будет, а?!
# fdisk -c=dos /dev/sdd

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (with command 'c').Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Команда (m для справки): a
Номер раздела (1-4): 1

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

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
24 heads, 38 sectors/track, 1019 cylinders
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *          64     1054719      527328   17  Скрытый HPFS/NTFS
Раздел 1 имеет различные физические/логические начала (не-Linux?):
     физ=(0, 1, 3) логич=(0, 1, 27)
Раздел 1 имеет различные физические/логические окончания:
     физ=(137, 23, 38) логич=(1156, 11, 30)

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

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

Ну не совпадёт же
# head -c 540016640 /dev/sdd | md5sum
2a8012a9a6fce37dd556fa778c5dab85  -

Теперь расставили всё по местам
# fdisk -u=sectors -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *          64     1054719      527328   17  Скрытый HPFS/NTFS
#

64 сектора (0-63; первый сектор первого раздела 64-й) кратны 2-ум.
Количество блоков fdisk указывает в килобайтах, а границы разделов в секторах которые по 512 байт
Поэтому подсчитываем контрольную сумму только для раздела пропустив 32 килобайтных блока, т.е. 64 сектора
# dd if=/dev/sdd bs=1024 count=527328 skip=32 conv="notrunc,noerror" | md5sum
527328+0 записей получено
527328+0 записей отправлено
 скопировано 539983872 байта (540 MB), 28,5453 c, 18,9 MB/c
9496740bd44435b86e5465db1d963213  -

То же самое делаем с iso'шником
# dd if=/path/altlinux-p7-tde-sysv-20131104-i586.iso bs=1024 count=527328 skip=32 conv="notrunc,noerror" | md5sum
527328+0 записей получено
527328+0 записей отправлено
 скопировано 539983872 байта (540 MB), 18,7562 c, 28,8 MB/c
9496740bd44435b86e5465db1d963213  -

Контрольные суммы для раздела совпали.
Всё достаточно быстро. И всё благодаря четвёртому выводу сверху. Бэкап, он и есть бэкап...
« Последнее редактирование: 11.02.2014 19:34:11 от Speccyfighter »
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Уничтожение бит-карты разделов


Когда-то сохранили файл со структурой накопителя положив его подальше на полку в особо важное
# fdisk -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x51ee72bb

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1   *          64     1054719      527328   17  Скрытый HPFS/NTFS

И впоследствии по ошибке уничтожили бит-карту разделов
# dd if=/dev/zero of=/dev/sdd bs=1K count=32
32+0 записей получено
32+0 записей отправлено
 скопировано 32768 байт (33 kB), 0,0134004 c, 2,4 MB/c

Оставив накопитель девственно чистым
# fdisk -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

#

Восстанавливаем раздел
-c=dos - таблица в DOS-compatible mode; раздел начинается с 64-го сектора
# fdisk -c=dos /dev/sdd
Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x0bf84170.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (with command 'c').
Команда (m для справки):
Восстанавливаем границы раздела которые берутся из резервного файла
Команда (m для справки): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый sector (62-7839743, по умолчанию 62): 64
Last sector, +sectors or +size{K,M,G} (64-7839743, по умолчанию 7839743): 1054719
Partition 1 of type Linux and of size 515 MiB is set

Просматриваем что получилось
Команда (m для справки): p

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
124 heads, 62 sectors/track, 1019 cylinders
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0bf84170

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1              64     1054719      527328   83  Linux
Раздел 1 не заканчивается на границе цилиндра.

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

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

Монтируем восстановленный раздел
# mount /dev/sdd1 /mnt/disk/
mount: /dev/sdd1 is write-protected, mounting read-only
для просмотра содержимого
# ls -1FR /mnt/disk/
/mnt/disk/:
index.html
live
Metadata/
syslinux/

/mnt/disk/Metadata:
pkg-groups.tar

/mnt/disk/syslinux:
16x16.fnt
af.tr
alt0/
ar.hlp
ar.tr
back.jpg
bg.tr
...
дальше
много
...

/mnt/disk/syslinux/alt0:
full.cz
vmlinuz

Здесь сразу становится очевидным, что идентификатор файловой системы и тип файловой системы связаны между собой постольку поскольку
# mount|grep disk
/dev/sdd1 on /mnt/disk type iso9660 (ro,relatime)

Дело в том, что fdisk в выводах показывает идентификатор FS установленный для раздела,
# fdisk -l /dev/sdd

Disk /dev/sdd: 4013 MB, 4013948928 bytes, 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0bf84170

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdd1              64     1054719      527328   83  Linux
а вот
# parted -l
...
Модель: StoreJet Transcend (scsi)
Диск /dev/sdc: 500GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     32,3kB  21,5GB  21,5GB  primary  ext4              загрузочный
 2     21,5GB  260GB   239GB   primary  ext3
 3     260GB   499GB   239GB   primary  ext3
 4     499GB   500GB   1055MB  primary  linux-swap(v1)
...
показывает именно тип самой файловой системы.

Почти всегда команда mount правильно распознаёт тип монтируемой ею файловой системы
# mount /dev/sdd1 /mnt/disk/ -t auto
mount: /dev/sdd1 is write-protected, mounting read-only
# mount|grep disk
/dev/sdd1 on /mnt/disk type iso9660 (ro,relatime)
Но бывают редкие ситуации когда требуется указать тип файловой системы напрямую.
Если выводы команды 'parted -l' сохранялись в архив тоже, можно избавить себя от угадывания в таких редких, но вероятных ситуациях.

Здесь хотелось бы вывести мысль:
Если к таким вероятным неприятностям приготовиться заранее, последствия от них будут куда менее катастрофичными.
« Последнее редактирование: 11.02.2014 22:56:16 от Speccyfighter »
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн sirares

  • Давно тут
  • **
  • Сообщений: 175
Искал я как записывать установочную флешку(нашел), да вот наткнулся и сразу вспомнилась аналогичная ситуация пятнадцатилетней давности - во время работы моргнул свет - и после перезагрузки выяснилось - потерялся раздел на hdd, благо был один - fat16 на винте 213 mb. Под рукой были 2 cd со slackware 2. Я  буквально незадолго до этого смотрел fdisk на этот винт, а тут глядь -  раздела нет, я и решил его создать и тип системы записал... и о чудо - все данные восстановились, я - сохранил на другой винт данные и проделал операцию еще раз - удачно. А вот на третий раз спустя несколько месяцев( не помню причины, только разделов два) - неудачно - не знал точный размер разделов и восстановить так не получилось, вот такая судьба- злодейка.
 А эта информация - очень полезна - возьму на вооружение, жаль тогда не было.
27XOR26XOR25

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
« Последнее редактирование: 22.04.2016 00:29:01 от Speccyfighter »
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf