
Если карта перестала открываться, первая задача администратора — сохранить читаемые данные и определить уровень отказа. Исправление файловой системы на исходном носителе может уничтожить то, что ещё удаётся восстановить. Ниже приведён порядок работы для Linux-станции: идентификация карты, получение образа, анализ копии и критерии передачи в лабораторию.

1. Что такое Monolith и почему микросхема не равна файлам
Граница задачи: логическое восстановление и работа с NAND
Эта инструкция охватывает карту, которая определяется как блочное устройство и хотя бы частично читается штатным ридером. Если устройство не выдаёт корректную ёмкость или совсем не определяется, ddrescue не получает источник секторов: дальше нужна аппаратная диагностика. Зачистка корпуса, подключение тестовых площадок и реконструкция ECC/FTL не являются продолжением shell-рецепта. Это другая процедура со специальным оборудованием и риском необратимого повреждения.
Файл может стать недоступен по разным причинам: удалён каталог, повреждены FAT/bitmap, переписано начало раздела, потеряны физические страницы NAND. В первых случаях данные часто ещё находятся в читаемых секторах; в последних копия содержит пропуски. Поэтому сначала получаем максимально полный логический образ, затем решаем, какой алгоритм восстановления применять. Форматирование и fsck исходной карты меняют метаданные до сохранения доказательств.
Подготовьте рабочую станцию заранее
Нужны Linux, sudo, исправный ридер, отдельный диск назначения и пакеты gddrescue, testdisk, util-linux, file. На Debian/Ubuntu их устанавливают до подключения нестабильной карты:
sudo apt-get update
sudo apt-get install gddrescue testdisk util-linux file
ddrescue --version
testdisk /version
photorec /version
Не путайте GNU ddrescue с dd_rescue: синтаксис и mapfile отличаются. Предусмотрите минимум два полных образа плюс место для восстановленных файлов. Для 128-ГиБ карты это легко превышает 256 ГиБ. Файловая система назначения должна поддерживать большие файлы; автоматическое монтирование носителей на станции выключают до работы.
В монолитной флеш-карте контроллер, NAND и соединения объединены в одном корпусе. Отдельной доступной микросхемы памяти, которую можно просто выпаять, обычно нет. Это относится к устройству корпуса, а не к файловой системе: карта может содержать FAT32, exFAT или иной формат, как обычный блочный накопитель.
Контроллер переводит логические адреса LBA в физические страницы NAND, исправляет ошибки ECC, распределяет износ и обслуживает таблицы FTL. В зависимости от контроллера применяются чередование каналов, преобразование данных и служебные области. Поэтому дамп NAND требует реконструкции логического пространства. Наличие считанных страниц ещё не доказывает, что файлы восстановлены.
Аппаратную часть иллюстрирует описание PC-3000 Flash производителя ACE Lab. Конкретная распиновка зависит от семейства и ревизии. Универсальной схемы подключения всех microSD не существует; происхождение адаптера и совместимость контроллера проверяют отдельно.
2. Разделите логическую ошибку и отказ чтения
На логическую неисправность указывает корректная ёмкость и устойчивое чтение секторов при повреждённом разделе или каталоге. На аппаратную проблему — нулевая либо неправильная ёмкость, постоянные переподключения, ошибки ввода-вывода, исчезновение устройства или отсутствие его в списке накопителей.
На диагностической станции отключите автоматическое монтирование через настройки используемого рабочего окружения до подключения карты. Подключите исправный кардридер и сохраните первичные сведения:
lsblk -o NAME,PATH,SIZE,MODEL,SERIAL,TRAN,FSTYPE,MOUNTPOINTS
sudo journalctl -k --since '-5 minutes' --no-pager
ls -l /dev/disk/by-id/
Сообщения USB reset не обязательно означают повреждение NAND: сначала исключают кабель, питание, контакт и ридер. Допустим один контролируемый тест с другим исправным ридером. Многократные циклы подключения нестабильной карты не являются методом ремонта. При нагреве, запахе, механическом повреждении или полном отсутствии обнаружения прекратите питание и зафиксируйте симптомы.
Идентифицируйте устройство без догадки по букве
Сначала сохраните lsblk до подключения, затем после. Сравните ёмкость, путь, модель ридера и события ядра. USB-ридер может показывать свой serial, а не серийный номер карты, поэтому одного by-id недостаточно: сверяйте также размер и фактически вставленный носитель. У двух одинаковых ридеров идентификаторы могут оказаться неуникальными.
lsblk -b -o NAME,PATH,SIZE,MODEL,SERIAL,RO,MOUNTPOINTS
sudo udevadm info --query=property --name=/dev/sdb
sudo journalctl -k --since '-3 minutes' --no-pager
/dev/sdb — пример, заменяемый только после идентификации. В выводе размер в байтах позволяет отличить нормальную маркетинговую ёмкость от неправдоподобной. Карта 64 GB не обязана показывать 64 GiB: разные единицы не означают поломку. Устойчивая неверная ёмкость в сотни мегабайт при ожидаемых гигабайтах уже требует остановки и анализа контроллера.
Различайте ошибку файловой системы и I/O error ядра. Первая может позволить полностью снять образ; вторая означает, что часть запросов не читается. Сначала исключите один заведомо исправный ридер и контакт, а не пытайтесь много раз открыть карту проводником.
3. Подготовьте отдельный диск для образа
В примере исходная карта выбрана через стабильный путь by-id, а каталог назначения находится на другом физическом диске. Значение SRC нужно заменить точным путём из предыдущего вывода; пример намеренно не выбирает первое найденное USB-устройство.
SRC=/dev/disk/by-id/usb-REPLACE_WITH_CARD_ID-0:0
OUT=/mnt/recovery/case-001
readlink -f "$SRC"
lsblk -s -o NAME,SIZE,MODEL,MOUNTPOINTS "$SRC"
findmnt -T /mnt/recovery
sudo mkdir -p "$OUT"
sudo chmod 700 "$OUT"
df -h /mnt/recovery
Проверьте три условия: ёмкость и идентичность SRC совпадают с картой, родительский диск назначения отличается от исходного, свободного места достаточно для полного образа и рабочей копии. FAT32 на диске назначения не подходит для одного файла более 4 ГиБ. Не сохраняйте образ на другой раздел той же неисправной карты.
Если раздел карты уже смонтирован, размонтируйте именно его, например sudo umount /dev/sdb1, после сверки с lsblk. Не копируйте имя sdb1 без проверки. У исходного устройства и всех его разделов MOUNTPOINTS должен быть пустым.
Проверьте, что диск назначения действительно смонтирован
Если /mnt/recovery существует, но отдельный диск не примонтирован, образ начнёт заполнять системный раздел. findmnt -T показывает реальный filesystem и source пути. Сверьте его с lsblk; не продолжайте при неожиданном корневом разделе или исходной карте.
findmnt -T /mnt/recovery -o SOURCE,TARGET,FSTYPE,OPTIONS
df -B1 /mnt/recovery
sudo blockdev --getsize64 "$SRC"
lsblk -s -o NAME,TYPE,SIZE,MODEL "$SRC"
getsize64 даёт требуемый логический размер образа. Sparse-файл может занять меньше фактических блоков, но запас рассчитывают по полному размеру: позднее прочитанные области и рабочая копия увеличивают расход. Для дела case-001 сохраняйте отдельно первичный журнал, mapfile каждого завершённого этапа и описание носителя. Эти файлы находятся на диске назначения, не на повреждённой карте.
4. Заблокируйте запись и запустите первый проход ddrescue
В Debian/Ubuntu программа входит в пакет gddrescue. Устанавливайте её до начала чтения, чтобы не тратить время карты на настройку станции. Программный read-only полезен, но не заменяет аппаратный блокиратор записи и не гарантирует защиту после переподключения.
sudo apt-get update
sudo apt-get install gddrescue
sudo blockdev --setro "$SRC"
sudo blockdev --getro "$SRC"
sudo blockdev --getsize64 "$SRC"
Значение getro=1 означает запрет записи на уровне блочного устройства. Первый проход -n пропускает scraping: цель — забрать доступные области без интенсивного разбора повреждённых участков. Назначение аргументов: источник, файл образа, mapfile. Перестановка источника и назначения недопустима.
Руководство GNU ddrescue описывает фазы восстановления и возобновление по mapfile. Этот файл хранит состояние диапазонов; удалять его между проходами нельзя. Остановка Ctrl+C допускает продолжение с теми же путями после повторной проверки устройства.
Почему read-only и mapfile проверяют перед каждым запуском
blockdev --setro ставит программный запрет записи, но после переподключения устройство может получить другой путь и состояние. Перед возобновлением снова выполняют readlink, lsblk и getro. Карта с механическим переключателем lock не всегда имеет аппаратную защиту: соблюдение lock зависит от ридера.
Команда test ! -e ... в примере — ручной контроль нового дела. Она не автоматически останавливает следующую строку в интерактивном shell. Для первого прохода можно объединить именно проверку и запуск безопасным условием:
if [ ! -e "$OUT/card.img" ] && [ ! -e "$OUT/card.map" ]; then
sudo ddrescue -n "$SRC" "$OUT/card.img" "$OUT/card.map"
else
printf '%s\n' 'Existing image or mapfile: inspect before resuming.' >&2
fi
Отсутствующий образ при существующем mapfile — подозрительное состояние: нельзя использовать карту диапазонов другого файла. Mapfile говорит, какие адреса уже успешно считаны; он не содержит сами данные. Возобновление выполняют только с согласованной парой image/mapfile и тем же источником.
5. Оцените результат и решите, нужны ли повторы
В статистике ddrescue важны rescued, bad-sector, non-tried и read errors. Ошибки чтения и объём потерянных данных — разные показатели. Карта с несколькими недоступными секторами может потерять критический каталог; большой rescued не означает, что каждый файл исправен.
sudo ddrescuelog -t "$OUT/card.map"
sudo cp --preserve=all "$OUT/card.map" "$OUT/card.map.first-pass"
Если чтение устойчиво и карту решили продолжать исследовать, ограниченный следующий проход выглядит так:
sudo ddrescue -r1 "$SRC" "$OUT/card.img" "$OUT/card.map"
sudo ddrescuelog -t "$OUT/card.map"
-r1 ограничивает число retry passes; это не обещание одного обращения к каждому сектору за весь процесс. Не применяйте бесконечные повторы. Опцию direct I/O добавляют только после проверки поддержки ридером и выравнивания; она не лечит NAND. При росте температуры, скорости ошибок или отключениях остановитесь: дальнейшее чтение может уменьшать шансы лабораторного восстановления.
Интерпретируйте статистику, а не процент успеха
rescued — объём успешно прочитанных диапазонов; non-tried — ещё не обработанные; bad-sector — области с подтверждёнными неудачными чтениями на соответствующей стадии. read errors — число неуспешных запросов, не число повреждённых файлов. Если ошибка попала в каталог, может потеряться структура большого набора файлов при маленьком общем bad-sector.
Остановитесь, если устройство постоянно исчезает, каждый проход даёт всё меньше читаемых областей или карта нагревается. Дополнительный retry способен ухудшить физическое состояние, поэтому «ещё десять раз» — не стратегия. Direct I/O -d иногда помогает обходить кеш, но требует поддержки и выравнивания; добавлять его при ошибках Invalid argument без диагностики не нужно.
Перед новым проходом сохраните копию mapfile и время начала. После него сравните именно изменение rescued/bad-sector и симптомы. Если данные критичны, неполный логический образ передают лаборатории вместе с первичными сведениями; нельзя объявлять файл полностью исправным по наличию в списке PhotoRec.
6. Зафиксируйте мастер-образ и работайте с копией
Хеш фиксирует полученные байты, но не доказывает совпадение с первоначальными данными карты. Для неполного образа сохраняются и хеш, и mapfile, и заметка о необработанных областях. Вычисление хеша исходного устройства потребовало бы ещё одного полного чтения; нестабильную карту для этого не перечитывают.
cd "$OUT"
sudo sha256sum card.img card.map | sudo tee SHA256SUMS
sudo chmod 400 card.img card.map
sudo cp --reflink=auto --sparse=always card.img work.img
sudo chmod 600 work.img
sudo sha256sum -c SHA256SUMS
Reflink может экономить место на поддерживаемой файловой системе; на другой системе cp создаст обычную копию. Sparse-файл имеет логическую ёмкость карты, хотя занимает меньше физического места. Нули в непрочитанных областях не следует трактовать как реальные данные источника. Изменения work.img не должны затрагивать мастер-образ.
Создайте независимую рабочую копию
Мастер и work.img уже созданы командами выше. Здесь повторно не копируйте образ: сравните сохранённые SHA256SUMS и продолжайте с той же рабочей копией.
Совпадение хешей до анализа фиксирует одинаковое логическое содержимое. reflink при поддержке filesystem экономит место через copy-on-write; это не независимый backup от отказа того же диска. Для архивного хранения копируют на второй носитель и повторно сверяют checksum. Команда chmod препятствует случайной записи обычным процессом, но root может её обойти; закрытый master нужен и организационно.
Не хешируйте исходную неисправную карту ещё одним полным проходом ради сравнения: это дополнительное чтение. Хеш master фиксирует полученный образ, а mapfile сообщает его ограничения. Если есть непрочитанные области, сохраните этот факт рядом с checksum.
7. Подключите образ только для чтения
Сначала изучают таблицу разделов, затем выбирают конкретный раздел. losetup --partscan создаёт устройства разделов, если структура распознаётся. Имя loop0 не фиксировано:
sudo fdisk -l "$OUT/work.img"
LOOP=$(sudo losetup --find --show --read-only --partscan "$OUT/work.img")
printf '%s\n' "$LOOP"
lsblk -f "$LOOP"
sudo mkdir -p /mnt/card-inspect
Для распознанного FAT32/exFAT-раздела, например ${LOOP}p1, выполняют sudo mount -o ro "${LOOP}p1" /mnt/card-inspect. Если разделов нет и файловая система начинается с нулевого сектора, проверяется само loop-устройство. Не подставляйте p1 автоматически.
У журналируемых файловых систем read-only mount может инициировать восстановление журнала. Для ext4 применяют ro,noload, для XFS — ro,norecovery; при неудаче монтирования исследуют копию специальным инструментом, а не переводят мастер в запись. Наличие файлового списка проверяют чтением, затем извлекают файлы на отдельный каталог назначения.
Выберите правильный раздел внутри образа
lsblk -o NAME,SIZE,FSTYPE,RO,MOUNTPOINTS "$LOOP"
Ожидается loopN и, при читаемой таблице разделов, loopNp1. Значение LOOP сохраняют в той же shell-сессии. Иногда карта отформатирована без partition table: filesystem расположен на всём loopN. Не добавляйте p1 по привычке. Если разделов не найдено, переходите к анализу копии TestDisk, не создавайте новую таблицу на master.
Для FAT/exFAT с устойчивой структурой можно монтировать выбранный раздел ro. Для ext-журналируемой системы ro не всегда достаточно для предотвращения journal replay: применяют подходящий режим noload и read-only loop. Поддерживаемый драйвер и формат определяют до mount. При ошибке mount не запускают fsck -y на исходной карте.
8. Восстанавливайте структуру и файлы по отдельным сценариям
TestDisk предназначен, в частности, для исследования разделов и структуры файловых систем; PhotoRec выполняет поиск файлов по сигнатурам. Документация CGSecurity помогает выбрать сценарий. В обоих случаях объект исследования — work.img, а каталог вывода находится вне подключённого образа.
При сигнатурном восстановлении могут потеряться исходные имена, каталоги, временные метки и часть фрагментированных файлов. Для бухгалтерского архива важнее открываемость конкретной базы, чем число извлечённых объектов. Для фотографий проверяют декодирование, размеры и содержимое, для архивов — тест целостности, для документов — реальное открытие в приложении.
После извлечения перейдите к завершающему отключению в разделе 10.
Не запускайте fsck с исправлением на исходной карте. Если ремонт файловой системы нужен для отдельного эксперимента, создайте ещё одну копию образа, сохраните её контрольную сумму и отметьте, какие действия меняли байты.
Сценарий A: структура раздела ещё читается
Запустите sudo testdisk /log "$OUT/work.img" из каталога дела. Выберите образ правильного размера, подтвердите определённый тип таблицы, откройте Analyse и Quick Search. Для найденного кандидата используйте P/List Files: наличие файлов и ожидаемых каталогов важнее зелёной строки partition. Возврат Q позволяет проверить следующий кандидат.
Сначала копируйте нужные файлы на третий каталог назначения, не записывайте Write в исходную карту. Перекрывающиеся найденные разделы могут быть разными старыми разметками; проверяйте содержимое каждого кандидата. Deeper Search используют на образе, когда быстрый поиск не дал подходящего результата. Меню Write изменяет выбранный образ, поэтому оно допустимо только на отдельной рабочей копии и не требуется для простого извлечения файлов. Порядок меню поясняет руководство CGSecurity.
Сценарий B: восстановление по сигнатурам
sudo install -d -m 700 "$OUT/recovered"
sudo photorec /log "$OUT/work.img"
В PhotoRec выберите образ, раздел/весь носитель по результату анализа, File Opt ограничьте нужными форматами, затем задайте каталог recovered на диске назначения. Режим Free полезен для удаления файлов при сохранённой структуре поддерживаемой filesystem; Whole сканирует выбранную область полностью. Не выбирайте Free, если сама структура недостоверна.
Carving восстанавливает содержимое по признакам формата, часто теряя исходное имя и дерево каталогов. Фрагментированный файл может оказаться неполным, похожая сигнатура — ложным кандидатом. Проверьте документы открытием в безопасной среде, архивы — встроенным integrity-test, видео — декодированием и длительностью. Совпадение расширения не подтверждает целостность. Подробнее — PhotoRec Step By Step.
9. Когда нужна аппаратная лаборатория
Признаки передачи: устройство не определяется исправным ридером, возвращает неправильную ёмкость, логический интерфейс нестабилен настолько, что образ не получается, либо данные критичны и самостоятельное чтение неприемлемо. Передайте точную маркировку, ёмкость, модель ридера, журнал симптомов, образ, mapfile и описание всех вмешательств.
Для Monolith лаборатория определяет контактную схему конкретной платы, параметры NAND, способ ECC и преобразование страниц. Дальше реконструируются логические адреса, а затем файловая система. Контроллерное шифрование, тяжёлые ошибки страниц и повреждение внутренних соединений могут сделать восстановление невозможным. Покупка программатора сама по себе не обеспечивает совместимость с любой картой.
Что передать аппаратному инженеру
Подготовьте модель/маркировку карты, историю отказа, сведения о ридерах, корректность ёмкости, первичные I/O errors, образ и mapfile. Укажите, производились ли форматирование, fsck, запись новых файлов или попытка вскрытия. Такая информация влияет на выбор процедуры и возможность восстановления.
Аппаратная работа может включать доступ к тестовым площадкам, подбор pinout, чтение NAND, ECC и реконструкцию FTL. Для конкретного экземпляра важны ревизия и состояние контроллера; одинаковый бренд на корпусе не гарантирует одинаковую внутреннюю схему. Не давайте универсальных номеров площадок из случайной фотографии. В статье сознательно не имитируется инструкция пайки без знания конкретной карты.
10. Чек-лист завершения и профилактика
Согласуйте перечень критичных файлов, проверьте их содержимое и сохраните восстановленные данные минимум в двух независимых местах. Хеши, карта чтения и журнал остаются вместе с мастер-образом до завершения приёмки. Отдельно фиксируют, какие файлы отсутствуют или повреждены: слово «восстановлено» без этого перечня мало говорит о результате.
Карту, показавшую аппаратные ошибки, выводят из эксплуатации. Для съёмки, регистраторов и переносных архивов выбирают носители под реальную нагрузку, контролируют заполнение и регулярно выгружают данные. Флеш-карта — транспорт или рабочий носитель; единственная копия важной информации не должна зависеть от её исправности.
Завершите подключение и оформите результат
После копирования файлов размонтируйте только созданный mountpoint, затем отключите loop, значение которого сохранили ранее:
sudo umount /mnt/card-inspect
sudo losetup --detach "$LOOP"
sudo sha256sum -c "$OUT/SHA256SUMS"
umount выполняют только если именно этот mountpoint создан в вашей процедуре. Файл checksum должен содержать путь, соответствующий текущему расположению образа. В отчёте разделите: считано с носителя, найдено структурой, найдено carving, проверено открытием, повреждено/не проверено. Оригинал не форматируют до принятия результата владельцем данных. Надёжный backup после восстановления проверяют отдельно: наличие единственной копии на другом flash-носителе не решает первоначальную проблему.
Нужно обслуживать рабочие места сотрудников?
Учёт конфигураций, обновления, защита и единый канал обращений уменьшают простои пользователей.
