LINUX.ORG.RU

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

 , ,


0

2

Привет, ЛОР!

Дано: SSD 750GB Ext4+LUKS, defaults, discard. Свопа нет. Размер файла 8 Кб, исходник CPP. Из них интересует буквально первый килобайт. Что такое копия, бекап, снапшот, 7 раз отмерь - 1 раз отрежь - никогда не слышал.

Записывал несколько файлов по много гигов. Места нехватило, как ругался cp, что место закончилось не видел, потому что работал в другой консоли. Хорошо.

И далее открываю ВАЖНЫЙ рабочий файл в mcedit, редактирую, сохраняю и… Пишет, что не могу сохранить файл, выберите другое место. Ни о чем плохом не думая, закрываю без сохранения, а размер файла 0 байт! 4е za фигня Z{*$&@??? Отрубаю питание бука, держа кнопку секунды 3. С момента «сохранения» до момента отключения питания секунд 5. Занавес…

Гружу livecd, dd if=/dev/mapper/sda | grep -ai «нужная строка» и ничего нужного не нашел. И так, и сяк грепал - годного результата 0. Нашлась версия файла 100летней давности - не годится. Надежда, что остаток файла сохранился, устремилась к 0, потому что смонтировано с discard. Но мало ли? Файл тыщу раз сохранялся-пересохранялся, разве нигде никто не оставил хоть кусочек?

Было дело конфиг с паролями случайно удалили - grep’ом восстановил нужный фрагмент за 5 сек. Это на другом компе, про discard неизвестно.

Пишу сюда, вдруг мысли еще есть какие…?


Могу посоветовал R-Studio Linux|PhotoRecLUKS… Будем «держать кулаки».

Гружу livecd, dd if=/dev/mapper/sda | grep -ai «нужная строка» и ничего нужного не нашел

искать нужно по тому шаблону, что был до редактирования. Здесь не понял: в моём представлении его надо было смонтировать «только для чтения». Он же шифрованный? Как там искать произвольные данные (вне файла)

рабочий файл в mcedit

если я не выдумал это, то должен был быть файл «исходное имя.расширение.какой-то префикс»

Отрубаю питание бука, держа кнопку секунды 3. С момента «сохранения» до момента отключения питания секунд 5.

так делать нельзя, тем более с LUKS (знающие поправьте)

master_0K
()
Ответ на: комментарий от master_0K

так делать нельзя, тем более с LUKS (знающие поправьте)

знающие поправляют: по вашим постам можно сразу заключить, что топистартер знает о линуксе больше твоего. ноу оффенс

baja
()
Ответ на: комментарий от baja

Да, вряд ли, потому что нашлось много старых версий файла, сохраненных также mcedit.

ну а всякие testdisk, skalpel, foremost, r-undelete и иже с ними не пробовал?

Нет, слишком сложно, я сторонник dd, grep, cat :)

искать нужно по тому шаблону, что был до редактирования. Здесь не понял: в моём представлении его надо было смонтировать «только для чтения». Он же шифрованный? Как там искать произвольные данные (вне файла)

И так, и сяк искал. Расшифрование: cryptsetup open -> работаем как с обычным блочным девайсом по пути /dev/mapper/…

NotWin
() автор топика
Ответ на: комментарий от baja

Я подумал, может SSD где что сохраняет типа кеша? Samsung EVO. Но скорее всего при включении диска там всё стиралось бы. А у меня еще и шифрование… Так просто по шаблону найти 99.999% не получится.

discard по идее сразу отправляет трим после удаления? Но удаления не было как такового. По сути сохранение файла в заполненный раздел (в т.ч. резерв для root). Поэтому старые остатки файла где-то же должны храниться. Или я что-то недопонимаю.

NotWin
() автор топика

и о чем плохом не думая, закрываю без сохранения, а размер файла 0 байт! 4е za фигня Z{*$&@??? Отрубаю питание бука, держа кнопку секунды 3.

«вижу - мигает красный, наперерез летит фура, давлю газ…занавес»

kindof
()
Ответ на: комментарий от NotWin

omg я только после этого треда понял, что после трим восстановить практически невозможно. В таком случае зачем discard опция вообще нужна, когда таймер systemd пинает на всех дистрибутивах сервис fstrim?

В советах для fstab очень часто вижу discard и сейчас у меня для btrfs стоит discard=async

Убрал от греха подальше. Спасибо за тему

monkdt
()
Последнее исправление: monkdt (всего исправлений: 4)
Ответ на: комментарий от uwuwuu

-o discard Нет твоего файла

Так точно… Неделя потерянного времени, расчеты. Буду по памяти восстанавливать… :)))

Странно почему ext4 при переполнении так себя повела, это баг или фича вообще? Может кому написать, типа Торвальдсу, может пофиксят что. Как я понял ФС отправила команду на удаление при сохранении файла в заполненный под 0 раздел. Вонючий SSD с discard, одни эмоции.

Скорее я уже не помню, что этот монструозный высер умеет. Я загуглил, да умеет, но для меня он бесполезен был раза два, которые я его запускал

Для меня слишком сложны все эти высокоуровневые утилиты :) В некоторых случаях мне проще зарядить очередной велосипед. Но конечно более сложные работы проще готовыми утилитами выполнять.

NotWin
() автор топика

https://midnight-commander.org/ticket/4166

я так понимаю проблема из-за дефолтного небезопасного способа сохранения, когда он сначала делает транкейт до нуля и потом уже пишет (пытается) в файл.

ТС, смени у себя дефолтный способ сейва и помни про это.

ЗЫ а при транкейте до нуля ехт4 поди делает дискард на блок с данными

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

Убрал от греха подальше. Спасибо за тему

Там суть в том, что записать можно только в пустую ячейку. Когда файл удаляется, система должна сообщить SSD, чтоб тот очистил данные физически (когда контроллер посчитает нужным). Если ОС это не сделает (т.е. без discard), то при записи в ячейку со старыми данными ячейку сначала надо очистить, только потом можно записывать. Отсюда скорость записи без TRIM может быть меньше.

А при опции discard ОС посылает сразу команду TRIM при удалении файла. По сути это нормальный режим работы, discard нужен. Но вот в моём специфичном случае я получил палкой по голове. Сам дурак :)

Тримить раз в неделю хорошая вещь, но теперь буду делать это вручную, нафиг:)

Меня больше стало волновать, почему ОС так себя повела при переполнении диска. Может баг какой, с этип вполне вероятно кто-то может столкнуться и поиметь проблемы как у меня.

Вместо бурной пятницы и мокрых выходных пришлось заниматься мозговым штурмом. Ладно, печень целее будет, да и часть файла по памяти восстановливаю, процесс прёт :) Кекса на дня 2 нормально так.

В общем, надо подружиться с rsync, lvm snapshot, да и хочу на XFS перейти.

ТС, смени у себя дефолтный способ сейва и помни про это.

Годнота, годнота!

NotWin
() автор топика
Последнее исправление: NotWin (всего исправлений: 2)