Проблема повреждённых жёстких дисков знакома многим: диск начинает работать со сбоями, система зависает, файлы неожиданно исчезают. В таких ситуациях обычные методы восстановления могут только усугубить проблему, вызывая перезапись данных.
Лучшее решение — создать образ диска и работать с ним, а не с оригиналом.
В этой статье разберём, как:
скопировать весь диск в файл-образ;
смонтировать повреждённый раздел и извлечь файлы;
восстановить удалённые файлы или повреждённую файловую систему NTFS.
Сначала рассмотрим основные шаги, а затем сложности, которые могут возникнуть в процессе, и пути их решения.
Шаг 1. Создаём образ диска с утилитой ddrescue
Если диск «умирает», в первую очередь стоит создать его образ. Попытки работы с диском напрямую могут только ухудшить ситуацию.
Обычно для создания копии диска рекомендуют утилиту dd. Однако она работает по принципу «всё или ничего»: если диск содержит повреждённые секторы, dd может зависнуть.
Утилита ddrescue эффективнее. Она:
пропускает битые блоки и продолжает копирование;
создаёт карту повреждений (mapfile), позволяя продолжить процесс при сбоях;
позволяет объединять копии дисков, например из двух разных попыток.
Мы будем использовать именно ddrescue.
Создание образа
Сначала определим имя диска (/dev/sdX):
~ $ lsblkТеперь создадим образ:
~ $ sudo ddrescue -d /dev/sdX image.img mapfileПараметры команды:
/dev/sdX— оригинальный диск;image.img— файл, куда будет сохраняться образ;mapfile— файл — контрольная карта битых секторов (позволяет перезапустить процесс создания образа, не начиная заново).
Как узнать, сколько данных удалось восстановить?
Во время работы ddrescue показывает:
количество прочитанных и пропущенных секторов;
скорость копирования;
сколько раз пытались перечитать повреждённые блоки.
Шаг 2. Анализ содержимого образа
Теперь у нас есть образ image.img, но что внутри?
Определяем разметку и таблицу разделов:
~ $ sudo parted image.img unit B printВывод может выглядеть так:
Model: (file)
Disk image.img: 500107862016B
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1048576B 2097151B 1048576B fat32
2 2097152B 105906175B 103809024B ext4
3 105906176B 500107861375B 499001955200B ntfsИз вывода видно следующее:
Partition Table: gpt (разметка GPT).
Третий раздел sda3 (NTFS), он нам и нужен.
Раздел начинается с 105906176B.
Как определить, какой раздел нужен
Альтернативные методы анализа образа:
~ $ fdisk -l image.img~ $ sfdisk -d image.imgШаг 3. Подключаем и монтируем образ
Теперь нам нужно получить доступ к нужному разделу. Для этого создадим в Linux эмулятор диска, который откроет доступ ко всем разделам.
Использование losetup
Создаём
loop-устройство для работы с образом. Это виртуальное устройство,
которое позволяет работать с образом диска так, как будто это обычный
физический диск. Для его создания используется команда losetup:
~ $ sudo losetup -Pf --show image.imgВывод:
/dev/loop0Теперь разделы отображаются как /dev/loop0p1, /dev/loop0p2, /dev/loop0p3.
Утилита losetup входит в состав пакета util-linux. Ключ -P, который появился в версии 2.21, позволяет автоматически сканировать и добавлять разделы при подключении loop-устройства.
Для проверки версии использовать команду:
~ $ losetup --version
losetup from util-linux 2.37.2Если у вас старый losetup, без -P, можно использовать kpartx:
~ $ sudo kpartx -a image.img
~ $ ls /dev/mapper/Монтирование нужного раздела: sda3, NTFS
Теперь создадим точку монтирования:
~ $ sudo mkdir -p /mnt/recoveryМонтируем раздел /dev/loop0p3:
~ $ sudo mount -o ro,uid=$(id -u),gid=$(id -g) /dev/loop0p3 /mnt/recoveryФлаги uid и gid позволяют работать с файлами не только root-пользователю, но и обычному пользователю.
Если файловая система была повреждена, монтирование может не пройти. Тогда стоит использовать другие методы, о которых рассказано дальше в статье.
Шаг 4. Извлечение файлов
Теперь файлы доступны в /mnt/recovery. Можно их копировать:
~ $ cp -r /mnt/recovery/имя_папки ~/backup/Если требуется копирование с сохранением структуры и прав:
~ $ rsync -av /mnt/recovery/ ~/backup/Для архивации:
~ $ tar czvf backup.tar.gz -C /mnt/recovery Шаг 5. Завершение работы
После копирования данных нужно отключить loop-устройство:
~ $ sudo umount /mnt/recovery
~ $ sudo losetup -d /dev/loop0Что делать с ошибкой device is busy
Используйте fuser для поиска процессов, которые удерживают монтирование:
~ $ sudo fuser -vm /mnt/recoveryЗатем завершите их с помощью команды:
kill -9 PIDНа этом с основными шагами мы закончили. Переходим к сложностям, с которыми вы можете столкнуться в процессе, и вариантам их решения.
Что делать, если NTFS-раздел не монтируется
Если NTFS-раздел повреждён, стандартный драйвер может отказать в монтировании. Используем вместо него ntfs-3g.
Принудительное монтирование NTFS
Если стандартная команда mount -t ntfs не сработала, попробуйте отключить стандартный драйвер и явно указать ntfs-3g:
~ $ sudo mount -t ntfs-3g /dev/loop0p3 /mnt/recoveryВосстановление файловой системы с ntfsfix
Если
получаете ошибку «NTFS is inconsistent», «$MFTMirr does not match $MFT»
или «The disk contains an unclean file system», переходите к
исправлению. Исправить повреждённый NTFS-раздел можно с помощью ntfsfix.
Попробуйте выполнить команду:
~ $ sudo ntfsfix /dev/loop0p3Что делает ntfsfix?
Очищает «грязный флаг» (dirty bit), который может помешать монтированию.
Исправляет основные ошибки файловой системы.
Устанавливает флаг проверки
chkdsk, чтобы Windows могла корректно восстановить раздел при следующей загрузке.
ntfsfix не заменяет полноценный chkdsk в Windows, но в 80 % случаев позволяет примонтировать раздел.
Если ничего не помогло — использовать chkdsk в Windows
Если даже ntfsfix не решает проблему, лучше загрузиться в Windows и выполнить chkdsk:
~ $ chkdsk /f /r D:Здесь D: — это буква повреждённого раздела, у вас она может быть другой.
Восстановление удалённых файлов c TestDisk и PhotoRec
При возникновении ситуации, когда файлы были удалены, следует перемонтировать диск в режиме только для чтения (RO). Это позволит избежать перезаписи данных. Если это системный диск, рекомендуется загрузиться с флешки и тоже примонтировать его в RO.
В данном случае диск не будет затёрт новыми данными, и восстановить удалённые данные можно с помощью TestDisk или PhotoRec. Обе утилиты бесплатны и работают с различными файловыми системами.
Восстановление файловой структуры с TestDisk
Утилиту TestDisk стоит использовать:
если раздел стал «нечитаемым», но структура файлов осталась;
если диск или флешка требуют форматирования после сбоя, но файлы ещё существуют.
Разберём пошаговые действия для восстановления файлов.
1. Установите TestDisk, если его нет:
~ $ sudo apt install testdisk # Для Debian/Ubuntu.
~ $ sudo yum install testdisk # Для CentOS.2. Запустите TestDisk:
~ $ sudo testdisk image.imgКак теперь восстановить файлы?
Выберите диск (image.img) → Proceed.
Выберите Intel (MBR) или EFI/GPT.
Выберите Analyze, нажмите p, чтобы увидеть файлы.
Если файлы видны, выберите Write, чтобы восстановить повреждённую файловую таблицу.
Если не видны — используйте утилиту PhotoRec.
Перезагрузите систему и попробуйте снова смонтировать раздел.
Восстановление отдельных файлов с PhotoRec
Утилиту PhotoRec стоит использовать:
если файлы удалены и не видны в TestDisk;
если файловая система повреждена, а файлы нужны по сигнатурам (типам файлов).
Шаги мало чем отличаются от описанных выше.
Установите PhotoRec — она идёт в комплекте с TestDisk.
Запустите утилиту:
~ $ sudo photorec image.imgКак восстановить файлы?
Выберите диск.
Укажите, с какого раздела искать файлы.
Выберите, какие типы файлов восстанавливать (JPG, DOC, PDF).
Укажите папку для сохранения данных.
Запустите поиск.
Восстановленные файлы появятся в указанной директории.
Использование ntfs-3g при работе с NTFS
Если NTFS-раздел повреждён (например, из-за сбоя диска или неправильного отключения), стандартный драйвер NTFS в ядре Linux (ntfs) может не монтировать его вообще или смонтировать в режиме «только для чтения» с ошибками.
Однако ntfs-3g более гибкий и умеет:
принудительно монтировать «грязные» NTFS-разделы;
работать с повреждёнными MFT (Master File Table);
исправлять ошибки файловой системы с помощью ntfsfix.
Вот как установить этот драйвер и получить полноценную поддержку NTFS:
~ $ sudo apt install ntfs-3g # Debian/Ubuntu
~ $ sudo yum install ntfs-3g # CentOS
~ $ sudo pacman -S ntfs-3g # ArchАльтернативные методы эмуляции: qemu-nbd
Если losetup не работает, можно эмулировать физический диск с помощью qemu-nbd. Это утилита, которая использует сетевые блочные устройства (NBD) для работы с образами дисков:
~ $ sudo modprobe nbd
~ $ sudo qemu-nbd --connect=/dev/nbd0 image.img
~ $ lsblk
~ $ sudo mount -o ro /dev/nbd0p3 /mnt/recoveryОтключение:
~ $ sudo qemu-nbd --disconnect /dev/nbd0Заключение
Основные выводы:
Не работайте напрямую с повреждённым диском.
Создавайте образ прежде, чем пытаться восстанавливать данные.
Используйте losetup, TestDisk, PhotoRec для восстановления.
Источник:
https://habr.com/ru/companies/flant/articles/890728/
Комментариев нет:
Отправить комментарий