Как стать автором
Обновить

Восстановление поврежденного раздела NTFS, если его уменьшили до минимального размера (0 байт свободно)

Время на прочтение4 мин
Количество просмотров21K
При перераспределении разделов жесткого диска на ноутбуке, я, по невнимательности, совсем не оставил свободного места под раздел с файловой системой NTFS. Система на тот момент стояла Linux Mint 18, хотя, по сути, это не имеет значения. После перераспределения места, я ужаснулся. При попытке примонтировать этот раздел, мне выдавало ошибку:

Не удалось присоединить Том 101 ГБ


Error mounting /dev/sda4 at /media/dashka/B490E48B90E45600: Command-line `mount -t «ntfs» -o «uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000» "/dev/sda4" "/media/dashka/B490E48B90E45600"' exited with non-zero exit status 13: Failed to load runlist for $MFT/$DATA.
highest_vcn = 0x204f, last_vcn — 1 = 0x263f
Failed to load $MFT: Ошибка ввода/вывода
Failed to mount '/dev/sda4': Ошибка ввода/вывода
NTFS is either inconsistent, or there is a hardware fault, or it's a
SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
then reboot into Windows twice. The usage of the /f parameter is very
important! If the device is a SoftRAID/FakeRAID then first activate
it and mount a different device under the /dev/mapper/ directory, (e.g.
/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation
for more details.

Ставить винду было совсем неохота, памяти на ноуте свободной практически не было. Я очень долго мучился, многое перепробовал, но, все-таки, нашел выход. Итак, для начала нам нужен другой ПК с свободным местом, которого хватит на полный бэкап поврежденного раздела, либо нам нужно столько же места на пострадавшем компьютере. Последнее, конечно, намного проще, чем первое.

Если на пострадавшем компьютере достаточно места


В этом случае качаем утилиту testdisk.

Далее желательно сделать точный бэкап поврежденного раздела на внешний носитель, как это правильно сделать, я более подробно опишу во втором способе, когда нам не хватает места. С этой утилитой все понятно, мне даже компилировать ее не пришлось. Я просто запустил исполняемый файл testdisk_static. Далее можно и самому разобраться. Если же не сработало, то следует использовать утилиту photorec. Запускается она так же, и идет в комплекте с утилитой testdisk, в той же папке. Минусы утилиты photorec — неполное восстановление, то есть все файлы будут вперемешку и утеряются дата создания, изменения, название и прочее. Максимум, что можно — это отсортировать, что куда.

mv /путь/к/восстановленным/файлам/*.{jpg,png} ./Photo
mv /путь/к/восстановленным/файлам/*.mov ./Видео\ Нокия
mv /путь/к/восстановленным/файлам/*.mp4 ./Фильмы

И т.п.

Если на пострадавшем компьютере недостаточно места


В целом, все аналогично первому варианту, НО: для начала нужно сделать точную копию битого раздела с пострадавшего компьютера на компьютер, где достаточно памяти для проделывания операций выше. Это можно сделать, подключив компьютеры проводом USB-на-USB, по локальной сети, или через интернет. Я не особый умелец, поэтому для второго варианта я додумался только использовать ssh.

Как сделать этот бэкап


sudo dd if=/dev/sdaX bs=8192 | ssh hostname 'dd of=/home/user/backup.img bs=8192' && echo 'all right' > ~/DD.log || echo 'Неудача' > ~/DD.log; ssh hostname poweroff; sudo shutdown

X — номер поврежденного раздела, смотреть в программах по типу GParted или в описании самой ошибки. ssh hostname — заменяется на вашу конфигурацию ssh(в моем случае это 'ssh -p 31182 -i .ssh/id_rsa nikitosios@192.168.1.10'). Бэкап 100 ГБ у меня занял всю ночь, около 10-11 часов.

Пояснение к коду выше и некоторые полезности
Самое важное, что стоит сказать: чтобы отслеживать процесс бэкапа, нужно:

1) Запустить еще один терминал.

2) Прописать ps -a и найти PID утилиты dd.

3) Прописать while true; do sudo kill -USR1 [PID утилиты dd] ; sleep 10; done и ввести пароль.

4) Смотреть на процесс выполнения в терминале, где работает утилита dd.

&& echo 'all right' > ~/DD.log || echo 'Неудача' > ~/DD.log — команда, чтобы утром глянуть, все ли нормально cкопировалось, или нет. Результат будет записан в файле DD.log в домашней папке.

ssh hostname poweroff; sudo shutdown — выключить компьютеры.

Хорошо, у нас есть точная копия раздела. Что дальше с ней делать-то? А тут мне пришлось сделать довольно хитрый ход. Поскольку testdisk и photorec ищут только устройства, подключенные к ПК, нужно выставить наш образ как устройство. Для этого я создал вот такую символическую ссылку:

 ln -s /dev/sdv /home/user/backup.img

Хитро, не правда ли? Теперь можно смело восстанавливать наш /dev/sdv по примеру, описанному под заголовком «Если на пострадавшем компьютере достаточно места».

Для начала советую попробовать метод пользователя S-trace:
Поставить VirtualBox, в него поставить windows (идеологическую сторону отбросим — вопрос стоИт чисто технический), затем (после установки windows) пробросить физический диск в виртуалку при помощи команды vboxmanage internalcommands createrawvmdk -filename ~/sda.vmdk -rawdisk /dev/sda (возможно придётся немного пободаться с несущей системой за право прямого доступа к /dev/sda).
a) Из под windows попробовать провести chkdsk этому разделу
b) Или же расширить его обратно при помощи стандартных средств работы с диском
c) Если раздел смонтировался, но не доступен для записи — можно провести копирование данных через «общую папку» VirtualBox или по сети между виртуалкой и несщуей системой.

P.S. С тестдиском придется потанцевать, так что для начала лучше восстановить все photorec'ом, и, если результат вас не устроит, то можно танцевать с testdisk'oм.

Ну, вот и все. Надеюсь, кому-то поможет этот пост.
Теги:
Хабы:
Всего голосов 23: ↑21 и ↓2+19
Комментарии36

Публикации