Как еще можно восстановить свежеудаленный .tar.gz архив из Ext4?
Случайно удалил довольно таки нужный мне архивчик с готовыми настроенными виртуалками с FreeSwitch, asterisk, плюс всякие самописные вебморды для них.
Так то не очень жалко - могу и снова настроить сервера, но самописные вебморды жалко((, и все же - на будущее вопрос восстановления в Linux для меня важен.
Итак, была выполнена команда на НЕшифрованном обычном разделе Ext4: rm -rf ./arch.tar.gz
Размер архива примерно 6 гигов. После удаления ничего не писалось в папку. Единственное, что могло записать сверху данные - это кеш браузера, через который я сейчас сижу.
Пробовал: testdisk при заходе в папку: No file found, filesystem may be damaged.
photorec: вообще не находит .tar.gz файлы, хотя вот они там лежат. Даже если явно указать с ключом -t расширение файла.
extundelete: выдает ошибку про memory alloc error, гугление которой приводит к куче страниц с описанием багов, некоторые умельцы даже сорцы пытались править, при чем последние сообщения о баге есть как и от 2014 года, так и от 2021, и все одинаковые. Исправлять видимо не будут.
R-Studio с под винды: Находит, но восстановленный файл не является архивом. Судя по всему исходный архив был фрагментирован, и при удалении в Ext4 стерлась инфа о фрагментах.
Бекапы я делаю конечно, но блин, чего ж так все плохо. В винде ни разу такого не было, что при удалении файла и попытке его сразу же восстановить, не затирая сверху, файл не восстанавливался. А тут на тебе, подарочек.
Кто что подскажет?
Или забить хрен?
Забыл добавить: На диске только один раздел - корневой. Папку /home я отдельно не монтировал.
Uneasy Hearts Weigh the Most, Гит вообще не имеет отношения к вопросу, абсолютно никакого. Вопрос про восстанавливаемость файла в Ext4, будь то образ диска, видеофайл, папка с проектом Sony Vegas, или любое другое неважно что.
Для важных бекапов, в том числе инкриментальных существует Bacula. Git - даже не близко, а точнее он вообще в другую сторону.
Бекапы на все подряд обычными не параноидальными личностями не делаются для всего что есть на жестком диске. Бывают всякие случаи.
Но меня очень расстроил тот факт, что насколько я понял - фиг что восстановишь. Хоть на NTFS теперь преходи - даж не знаю.
К сожалению, на сколько я помню, ext3/ext4 очень не подходящая файловая система для восстановления удаленных файлов, т.е. очень мало шансов.
В твоем случае восстановить данные по фрагментам можно наверное только по содержимому, образно говоря, добавляем очередной экстент к файлу если gzip не выдает ошибок, а если выдает - значит неверный, берем следующий свободный (можно предварительно пройтись по содержимому и убрать все у кого распределение байтов не равномерное, как у архива) долго, тупо но сможет собрать если это в принципе возможно. К сожалению если хотя бы один сектор потеряется - с данными можно будет распрощаться.
Спасибо за утилиту и за совет. Завтра попробую. Но думается мне, что ты прав насчет секторов - я их уже ютубчом затер. Ну не так уж и страшно, не святые данные потеряны.
на будущее вопрос восстановления в Linux для меня важен.
пользуйся xfs или btrfs (точнее cow файловыми системами), хотя штатной утилиты восстановления там нет, но сам принцип Copy-On-Write позволяет отложить максимально далеко момент, когда сектор с удаленными данными будет затерт, с другой стороны если файл модифицируется - он автоматом сильно фрагментируется, что так же в свою очередь усложняет восстановление.
Главное в cow файловых системах другое - возможность 'бесплатно' создавать снапшоты, моментально, без понижения производительности и занимаемого места (раньше их можно было создавать с помощью lvm и каждый понижал работу системы кратно), т.е. можно добавить в свои скрипты (например git commit или периодический ежечасный/минутный с удалением старых) создание моментального локального бакапа как раз против таких вот случайных удалений.
Так же проблема с ssd, из-за trim, на любой файловой системе, области, помечаемые операционной системой как удаленные будут очищены и на диске, причем так что восстановление будет невозможно, даже если ты не сам пишешь на диск, внутренний контроллер может провезти внутренню. реорганизацию блоков (в случае удаления важных данных на ssd лучше выключать устройство физически и нести в качественный сервис, готовя очень круглую сумму).
про trim я чуток переборщил ;)
оно выполняется не на каждый удаленный файл а периодически, на сколько я помню это делают по крону еженедельно или ежесуточно командой fstrim
еще момент, виртуализация, точнее контейнеризация, если файловая система размещается не прямую на устройстве а к примеру в файле, то trim для удаленных файлов внутри этого файла не выполняется (на сколько я помню мало кто поддерживает передачу trim каскадно)