Вопрос или проблема
Я случайно удалил директорию, в которой находятся сотни подпапок и тысячи файлов. Я хотел бы восстановить эти удаленные файлы.
Что я пробовал:
-
Я подтвердил, что один процесс все еще открывает эти файлы, поэтому эти файлы не были полностью удалены с диска.
-
Я попытался использовать
lsof | grep '(deleted)'
, чтобы найти эти файлы, и смог восстановить один файл за раз, однако нужно восстановить тысячи файлов, и мне не удалось найти способ сделать массовое восстановление.
Мне интересно, есть ли способ восстановить все сразу и сохранить имена файлов и структуру папок такими же, как и раньше?
Вырезка из вывода lsof:
qe 1042 CENSORED 2680r REG 8,1 13011367 0 312557 /home/CENSORED/file_a.epub (deleted)
qe 1042 CENSORED 2698r REG 8,1 12560738 0 312077 /home/CENSORED/b/file_b.zip (deleted)
qe 1042 CENSORED 2744r REG 8,1 12805603 0 312623 /home/CENSORED/c/sub_directory/file_c.pdf (deleted)
Большое спасибо!
Ответ или решение
Восстановление удаленных файлов в Linux с помощью команды isof
Ваша ситуация, связанная с случайным удалением большой директории, действительно непростая, особенно когда дело касается восстановления множества файлов. Обратимся к решению этой проблемы с использованием lsof
и других инструментов, чтобы облегчить задачу массового восстановления.
Шаг 1: Понимание текущей ситуации
Вы уже сделали анализ и выяснили, что у вас есть открытые файлы, что является хорошей новостью. Файлы, которые все еще открыты, могут быть восстановлены, даже если они помечены как удаленные. Это означает, что до тех пор, пока процесс, который использует эти файлы, продолжает работать, вы имеете возможность извлечь данные.
Шаг 2: Извлечение списка удаленных файлов
Учитывая, что вы уже использовали команду lsof
и получили список удаленных файлов, вам нужно будет автоматизировать процесс их восстановления. Вы можете сделать это с помощью терминала, перенаправив вывод команды lsof
в файл и затем обработать его.
Пример команды
lsof | grep '(deleted)' > deleted_files.txt
Теперь в файле deleted_files.txt
будет содержаться информация об открытых удаленных файлах. Файл будет содержать строки, подобные следующим:
qe 1042 CENSORED 2680r REG 8,1 13011367 0 312557 /home/CENSORED/file_a.epub (deleted)
qe 1042 CENSORED 2698r REG 8,1 12560738 0 312077 /home/CENSORED/b/file_b.zip (deleted)
qe 1042 CENSORED 2744r REG 8,1 12805603 0 312623 /home/CENSORED/c/sub_directory/file_c.pdf (deleted)
Шаг 3: Скрипт для автоматического восстановления
Составив список, вы можете написать небольшой скрипт на Bash, чтобы пройтись по этому файлу и восстановить все удаленные файлы. Ниже приведён пример такого скрипта.
#!/bin/bash
# Читаем файл с удалёнными файлами
while IFS= read -r line; do
# Извлекаем имя файла
filename=$(echo $line | awk '{print $9}')
# Определяем директорию для восстановления
recovery_dir=$(dirname "$filename")
# Создаём директорию, если она не существует
mkdir -p "$recovery_dir"
# Восстанавливаем файл
cp "$filename" "$recovery_dir"
done < deleted_files.txt
Скрипт пройдет по каждому открытому удаленному файлу, создаст необходимые директории и скопирует файлы в соответствующие места. Убедитесь, что у вас есть необходимые права для выполнения этих операций.
Шаг 4: Завершение работы
После завершения восстановления файлов и проверки целостности данных, важно не забыть сделать резервные копии критически важных файлов, чтобы избежать подобных ситуаций в будущем. Для автоматизации резервного копирования можно использовать rsync
или специальные инструменты для создания снимков файловой системы.
Заключение
Восстановление удаленных файлов в Linux может оказаться сложной задачей, особенно когда речь идет о большом количестве данных. Тем не менее, использование команд lsof
и написание автоматизированного скрипта могут значительно упростить этот процесс. Помните, что важно проводить регулярные резервные копии, чтобы избежать долговременных потерь данных в будущем.