LINUX.ORG.RU

Восстановить файлы

 , ,


1

1

По глупости перезаписал директорию, выполнив команду rsync, вот только параметры стояли наоборот, т.е. Затёр более новую версию старой. Есть список дропнутых и изменённых файлов.

Нужно восстановить старую версию файлов. После того, как заметил ошибку, перевёл раздел в режим ro, и прошёлся scalpel, позже выключил комп и снимаю через dd образ. Файлы оказались достаточно фрагментированые.

ФС reiserFS, что также не внушает надежды.
Есть у кого советы?

★★
Ответ на: комментарий от Ignatov

rsync (если не указывать специальных опций) копирует во временный файл, потом делает rename, так что шансы восстановить каким-нибудь photorec есть

Какие опции были? Локально файлы копировались или через сеть? Какого типа файлы восстановить надо?

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

rsync --delete -azrP
из сети на локальный. Восстановить надо php, css, js.

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

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

php, css, js

photorec конечно вряд ли умеет, но можно просто грепать незанятое место в снятом образе fs на предмет '<?php', function и прочего. Эти типы обычно не так много весят, так что шансы что оно сильно фрагментировано минимальны. Проблемой может быть то, что придётся вручную просматривать кучу файлов, на предмет нужного, можно немного автоматизировать

А имя и подобные атрибуты, как я понимаю, удаляются при удалении.

Да, метаданные отдельно хранятся

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

Спасибо всем за советы и помощь. Файлы восстановить не удалось. Восстанавливаем код на последнюю копию. Также reiserfsck --rebuild-tree восстановил многие файлы, правда нужных не обнаружено. Также, как много где написано, побиты некоторые целые файлы, поэтому снятый образ очень даже выручает. В частности отказался запускаться MySQL, но накатом /var/lib/mysql из бэкапа ситуация исправлена. (последнее на случай, если кто-то попадёт сюда с этой же проблемой).

PS reiserfsck --rebuild-tree --scan-whole-partition ради интереса можно будет проверить на образе, когда он уже станет не актуальным.

PPS всегда надо делать бэкапы! А ещё проверять, что выполняете!

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

Просто rename, без unlink, судя по strace:

[pid  2881] open(".target.dsWCyA", O_RDWR|O_CREAT|O_EXCL, 0600) = 1
[pid  2881] fchmod(1, 0600)             = 0
[pid  2881] mmap(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f81289ec000
[pid  2881] write(1, "set pause yes\n", 14) = 14
[pid  2881] close(1)                    = 0
[pid  2881] lstat(".target.dsWCyA", {st_mode=S_IFREG|0600, st_size=14, ...}) = 0
[pid  2881] chmod(".target.dsWCyA", 0644) = 0
[pid  2881] rename(".target.dsWCyA", "target") = 0

Если не указана опция

       --inplace
              This option changes how rsync transfers a file when its data needs to be updated: instead of the default method of creating a new copy of the file and moving it into  place
              when it is complete, rsync instead writes the updated data directly to the destination file.

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

Я тоже некоторые вещи rsync-ом делаю, потому что https://git.wiki.kernel.org/index.php/ContentLimitations . Метаданных (как минимум владелец/права) очень не хватает. Хотя гит сбоку используется для истории изменений

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

Интереса ради, а почему ты такие вещи rsync-ом делаешь, а не через какой-нибудь git?

rsync отрабатывает быстрее. Да и как-то git-репозиторий не прижился на этом проекте. Расплодилась куча бэкапов везде и всюду этого проекта. Хотя да, с git-ом не было бы такой проблемы. Плюсом дополнительная копия на стороннем сервере.

Ignatov ★★ ()