LINUX.ORG.RU

Как восстановить файловую систему с карты памяти?

 


0

2

Телефон (андроид) долго выключался и я вытащил аккумулятор. Обычно вытаскивание аккумулятора во время работы ничего плохого не делало, но не в этот раз.

Накрылась вся файловая система на карте памяти (microSD):

# fdisk -l /dev/sdb 

Disk /dev/sdb: 7945 MB, 7945060352 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15517696 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: 0x00000100

This doesn't look like a partition table
Probably you selected the wrong device.

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   ?     4211712     5262335      525312    0  Empty
/dev/sdb2        33554576  1124074127   545259776   11  Hidden FAT12
/dev/sdb3   ?     8388608   277348831   134480112    0  Empty
/dev/sdb4   ?     8388736     8519807       65536   10  OPUS

# dosfsck -n /dev/sdb 
fsck.fat 3.0.26 (2014-03-07)
Logical sector size (524 bytes) is not a multiple of the physical sector size.

# mount -t vfat /dev/sdb /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/sdb,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

# dmesg | tail
FAT: invalid media value (0xf2)
VFS: Can't find a valid FAT filesystem on dev sdb.



Судя по всему что-то накрылось серьёзно.

Есть ли возможность как-то восстановить именно файловую систему, а не отдельные файлы (про photorec в курсе)?

Может быть где-то что-нибудь вручную поправить, чтобы уговорить fsck взяться за дело? Сейчас ещё попробую проверялку из DOS.

Телефон предлагает отформатировать карту.

★★★★★

Последнее исправление: Xenius (всего исправлений: 1)

Поищи на диске запасной boot sector по сигнатуре. Если не найдёшь — поищи руками FAT (вероятно, запасную FAT) и корневую директорию (по именам файлов в ней), потом руками воссоздай BPB и boot sector.

По крайней мере, я бы сделал так. Может быть, есть тулза, которая это автоматизирует.

Но это всё при условии, что повредились отдельные секторы (достаточно маловероятный сценарий, КМК). Если у карточки прошивка съехала набекрень или внутренний маппинг блоков — тут уже ничего не сделаешь.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 5)

Перед всякими экспериментами неплохой идеей представляется сделать образ всей карты по dd. Если карта умрет при экспериментах, останется шанс вытащить хоть что-то.

bormant ★★★★★
()

Getdataback for fat, но она под windows и платная, зато даст 100% результат. Как найти неплвтную версию ты в курсе.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Getdataback for fat, но она под windows и платная, зато даст 100% результат

100% результат только fsck может дать и то не всегда. Мне бы нужна утилита, которая в какой-то степени автоматизирует операции, но не просто ткнул кнопку и всё кое-как восстановилось, а чтобы показывало «вот тут у вас вроде как запасная таблица FAT, она повреждена так-то и так-то, тут сигнатура, она должна быть такой, а у вас такая» и тд

Xenius ★★★★★
() автор топика
Ответ на: комментарий от bormant

Перед всякими экспериментами неплохой идеей представляется сделать образ всей карты по dd.

Это уже сделал, кроме того у меня где-то должен быть образ этой карты трёхмесячной давности, когда она ещё работала.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Поищи на диске запасной boot sector по сигнатуре.

Так?

# hexdump -C /dev/sdb | grep '55 aa  |'
000001f0  00 00 10 20 00 00 80 00  80 00 00 00 02 00 55 aa  |... ..........U.|
000003f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
000005f0  00 00 20 20 02 00 00 80  80 00 04 00 00 00 55 aa  |..  ..........U.|
00000df0  00 00 00 00 02 04 00 00  00 00 00 00 00 00 55 aa  |..............U.|
дальше идут большие оффсеты...


Одно из этих фигней похоже на копию бут-сектора, но там мусор, как и в первом блоке:

http://pastebin.com/qp3VCuaD

Выглядит как будто случайные биты затёрлись, я так понимаю, mkww.nqt и mkvs.nqt это то,во что превратилось mkfs.fat или подобное.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

Ты бы что ли почитал в начале про указанную мной программу, а уже затем писал что-либо в ответ.

Эта программа способна проанализировать данные на носителе и даже после неполного форматирования или частичной перезаписи файловой системы прочитать структуру директорий и файлов, ну и собственно скопировать их. Восстановить именно файловую систему прямо на носителе у тебя врядли получится. Ты можешь запустить её в wine, а на вход подать образ карты памяти.

Удачи.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

проанализировать данные на носителе и даже после неполного форматирования или частичной перезаписи файловой системы прочитать структуру директорий и файлов

Ну это замечательно, но у меня же не было форматирования, у меня какая-то хрень серьёзнее... Впрочем можно и попробовать, но мне кажется, нужно работать с фирмварью sd-карты, чтобы восстановить биты

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

У тебя серьёзное повреждение структуры файловой системы вызванное описанными выше тобой действиями. Форматирование или перезапись - это тоже повреждение файловой системы. Программа как раз и предназначена для считывания файлов с поврежденной файловой системы.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от kostik87

У тебя серьёзное повреждение структуры файловой системы вызванное описанными выше тобой действиями.

А ты смотрел hexdump. Как в принципе могли повредиться строчки в boot-record-е? По идее первый сектор никогда кроме форматирования вообще не должен перезаписываться.

Впрочем, попытка не пытка, конечно.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.