Чи траплялося вам коли-небудь випадково видалити файл і одразу ж про це пошкодувати? Коли вам терміново потрібно його повернути, особливо якщо він зовсім новий і ще не встиг потрапити в резервну копію? На щастя, є рішення!
Команда rm: символ розпачу?
Користування командою rm
надзвичайно просте, але іноді одна невелика помилка, наприклад, з використанням підстановочних знаків, може призвести до видалення набагато більшого обсягу даних, ніж планувалося, залишаючи вас з почуттям жалю.
Стандартна файлова система Linux, ext4, використовує inode для зберігання інформації про кожен файл, а також таблицю inode для їх відстеження. Inode містить різноманітні метадані, такі як ім’я файлу, його власник, права доступу та інше.
Також inode містить посилання на жорсткі з’єднання, що вказують на сам файл. Кожен файл має принаймні одне таке з’єднання. Створення нового жорсткого з’єднання збільшує їх кількість на одиницю, а видалення – зменшує.
При видаленні файлу, останнє жорстке з’єднання видаляється, і inode позначається як невикористаний, готовий до перезапису. Після цього файл стає невидимим у списках каталогів і недоступним для користувача.
Однак, самі дані файлу все ще залишаються на жорсткому диску. Якби вдалося відновити inode з правильною інформацією, файл можна було б повернути. Звичайно, це можливо лише тоді, коли дані на диску не були перезаписані.
Крім того, можна створити новий inode, скопіювати дані зі старого та відновити втрачену інформацію.
Такі дії є непростими, а помилкове видалення файлу зазвичай трапляється в найнезручніший момент, коли файл потрібен терміново. У такі моменти немає часу на редагування секторів диску та інші складні маніпуляції. До того ж, якщо файл новий, він найімовірніше ще не потрапив до резервної копії.
На щастя, існує інструмент testdisk
, який є простим у використанні і не вимагає глибоких знань файлової системи. Розглянемо, як ним користуватися!
Інсталяція Testdisk
Для встановлення testdisk
в Ubuntu, скористайтеся наступною командою:
sudo apt-get install testdisk
В Fedora виконайте:
sudo dnf install testdisk
Для Manjaro використовуйте pacman:
sudo pacman -Sy testdisk
Використання Testdisk
testdisk
має простий, хоч і текстовий інтерфейс. Використовуйте клавіші зі стрілками для навігації та Enter для підтвердження вибору. Для зручності створіть окрему папку для відновлених файлів.
Створимо папку з назвою «restored» для відновлених файлів:
mkdir restored
Перейдемо до новоствореної папки та запустимо testdisk
звідти:
cd restored/
Для роботи testdisk
потрібні права адміністратора, тому запускаємо його з sudo
:
sudo testdisk
Перше питання testdisk
стосується ведення журналу. Ви можете створити новий, використовувати існуючий або не використовувати журнал взагалі. Вибір не вплине на роботу testdisk
.
Натисніть Enter, щоб прийняти стандартний вибір і створити новий файл журналу, який буде розміщений у папці, з якої запущено testdisk
. Далі testdisk
запитає, на якому диску знаходиться файлова система, з якою ви хочете працювати.
У списку показано доступні жорсткі диски та файли squashfs «/dev/loop», які є образами файлових систем встановлених програм і є доступними лише для читання. Ви не можете відновити з них видалені файли.
У цьому прикладі є лише один фізичний жорсткий диск, тому вибираємо «/dev/sda» стрілкою вниз, далі стрілкою вправо вибираємо “Proceed” і натискаємо Enter.
Далі testdisk
повинен знати тип розділу. Він показує меню параметрів і тип розділу, визначений автоматично внизу.
Якщо немає особливих причин, виберіть тип розділу, визначений автоматично, та натисніть Enter.
У меню функцій виберіть “Advanced” і натисніть Enter.
З’явиться меню вибору розділу.
Потрібні нам файли знаходяться в розділі файлової системи Linux. У прикладі є лише один розділ Linux, але їх може бути більше.
Виберіть потрібний розділ, за допомогою стрілок ліворуч і праворуч виберіть “List” і натисніть Enter. З’явиться меню перегляду файлів.
Для навігації по списках файлів та папок використовуйте стрілки вгору і вниз, або клавіші PgUp та PgDn. Для переходу в папку використовуйте стрілку вправо або Enter, для повернення назад – стрілку вліво або Esc.
У нашому випадку, файли належали користувачу Dave. Файли всіх користувачів розташовані в папці “home”. Виділяємо папку “home” та натискаємо стрілку вправо або Enter для переходу в цю папку.
Далі відобразяться облікові записи користувачів. Виділяємо Dave та натискаємо стрілку вправо або Enter, щоб перейти до цієї папки.
Тепер відображаються файли користувача Dave. Записи, виділені червоним кольором, були видалені. Переміщуємось по файлах і папках, поки не знайдемо потрібний файл.
Для відновлення файлу виділіть його та натисніть клавішу ‘c’ (маленька літера).
Відобразиться повідомлення про вибір місця для відновлення. Оскільки ми створили папку “restored” і запустили з неї testdisk
, першим записом у списку є поточна папка (.). Натискаємо ‘C’ (велика літера), щоб відновити файл у цю папку.
Після цього ви повернетесь до меню вибору файлів. Якщо потрібно відновити ще файли, повторіть процес: виділіть видалений файл, натисніть ‘c’ (маленька), а потім ‘C’ (велика) для відновлення.
Робота з відновленими файлами
Після відновлення файлу, структура папок зберігається. Це допомагає зрозуміти, де знаходився вихідний файл та куди його скопіювати назад.
Якщо відновлюється декілька файлів з різних місць з однаковими іменами, вони все одно будуть зберігатися окремо.
Використайте наступну команду, щоб переглянути вміст папки “restored”:
ls
Якщо ви попросили testdisk
створити файл журналу, він також буде знаходитись у папці “restored”. Оскільки відновлені файли були розташовані за адресою “/home/dave”, вони були скопійовані у папку “restored” зі збереженням відповідної структури.
Перейдемо до скопійованої папки “dave” за допомогою команди cd
. Переконайтесь, що не включаєте слеш (/) на початку шляху, щоб перейти до локальної копії, а не до системної папки “/home”.
Введіть наступне:
cd home/dave
Відновлені файли знаходяться в цій папці, тому вводимо:
ls
Давайте ще раз переглянемо відновлені файли, використовуючи ключ “-l” (довгий список):
ls -l
Оскільки testdisk
було запущено з sudo
, власником відновлених файлів є root. Можна змінити власника на Dave за допомогою команди chown
:
sudo chown dave.dave *
Переконаємось, що власність файлів змінена правильно, ще раз виконавши команду ls -l
:
ls -l
Testdisk: Порятунок у коді
Відчуття полегшення після відновлення важливого файлу, який щойно вважався безповоротно втраченим, є неоціненним.
Саме тому testdisk
є таким корисним інструментом. Після того, як ви освоїте його меню та навчитесь відновлювати файли, ви легко увійдете в ритм: виділити, ‘c’, ‘C’, повторити.