Чи існує команда відновити / відновити видалені файли rm
?
$ rm -rf /path/to/myfile
Як я можу відновитись myfile
? Якщо є такий інструмент, як його використовувати?
Чи існує команда відновити / відновити видалені файли rm
?
$ rm -rf /path/to/myfile
Як я можу відновитись myfile
? Якщо є такий інструмент, як його використовувати?
Відповіді:
Посилання, яке хтось подав у коментарях, - це, мабуть, найкраща можливість.
Linux debugfs Hack: Видалити файли
Це написання, хоча дивлячись трохи залякує, насправді досить прямо вперед. Загалом кроки такі:
Використовуйте налагодження для перегляду журналу файлових систем
$ debugfs -w /dev/mapper/wks01-root
У настанові налагодження
debugfs: lsdel
Вибірка зразка
Inode Owner Mode Size Blocks Time deleted
23601299 0 120777 3 1/ 1 Tue Mar 13 16:17:30 2012
7536655 0 120777 3 1/ 1 Tue May 1 06:21:22 2012
2 deleted inodes found.
Виконайте команду в налагодженнях
debugfs: logdump -i <7536655>
Визначте файли inode
...
...
....
output truncated
Fast_link_dest: bin
Blocks: (0+1): 7235938
FS block 7536642 logged at sequence 38402086, journal block 26711
(inode block for inode 7536655):
Inode: 7536655 Type: symlink Mode: 0777 Flags: 0x0 Generation: 3532221116
User: 0 Group: 0 Size: 3
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
atime: 0x4f9fc730 -- Tue May 1 06:21:20 2012
mtime: 0x4f9fc72f -- Tue May 1 06:21:19 2012
dtime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
Fast_link_dest: bin
Blocks: (0+1): 7235938
No magic number at block 28053: end of journal.
З вищевказаною інформацією про введення виконайте наступні команди
# dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
# file recovered.file.001
file: ASCII text, with very long lines
Файли було відновлено до recovered.file.001
.
Якщо вищезгадане не для вас, я використовував такі інструменти, як photorec
відновлення файлів у минулому, але він орієнтований лише на файли зображень. Я широко писав про цей метод у своєму блозі в цій статті під назвою:
Як відновити пошкоджені файли jpeg та mov з SDD-картки цифрової камери на Fedora / CentOS / RHEL .
debugfs -w /dev/sdb2
але lsdel
sais:0 deleted inodes found.
extundelete
простішого для ext3 / 4 і, ймовірно, призведе до тих же результатів.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
Де ти це взяв /dev/mapper/wks01-root
?
Маючи трохи шансів, іноді я можу відновити видалені файли за допомогою цього сценарію чи наступного рішення у відповідь:
#!/bin/bash
if [[ ! $1 ]]; then
echo -e "Usage:\n\n\t$0 'file name'"
exit 1
fi
f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')
if [[ $f ]]; then
echo "fd $f found..."
cp -v "$f" "$1"
else
echo >&2 "No fd found..."
exit 2
fi
Є ще один корисний трюк: якщо ви знаєте шаблон у видалених файлах, наберіть alt+ sys+, resuoщоб перезавантажити + перезавантажити лише для читання, а потім за допомогою живого cd, використовуйте grep
для пошуку на жорсткому диску:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
потім відредагуйте, /tmp/recover
щоб зберегти лише ті, що були у вашому файлі раніше.
Гей, якщо з філософією Unix всі файли, пора скористатися цим, ні?
grep
базоване рішення дуже розумне і працює для мене, навіть якщо файлова система все ще встановлена. Дякую!
grep -av "[^[:print:]]"
grep
Рішення працював для мене з модифікацією: я зробив sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
і отримав зміщення байта (як 123123123:line\n456456456:another\n...
), а потім зробив n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
і n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
з різними n
значеннями.
Те, що для мене працювало, було надано аркою (стосується лише текстових файлів):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
де /dev/sdXN
розділ, що містить загублений файл (перевірте, mount
чи не впевнений).
Займає трохи часу, але працював, коли я випадково видалив якийсь вихідний код, якого я ще не вніс!
rm data/*.json python myFile.py
замістьrm data/*.json && python myFile.py
/dev/sdXN
- це для файлової системи, правда? Я знайшов свою зdf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Хоча це питання вирішено і вже кілька років, я хочу згадати утиліту testdisk .
Як відновити файли за допомогою тестового диска, пояснено в цьому підручнику . Для відновлення запуску файлів testdisk /dev/sdX
виберіть тип таблиці розділів. Після цього виберіть [ Advanced ] Filesystem Utils
, а потім виберіть свій розділ та виберіть [Undelete]
. Тепер ви можете переглядати та вибирати видалені файли та копіювати їх до іншого місця у вашій файловій системі.
У мене була така ж проблема минулого тижня, і я спробував багато програм, таких як налагодження, фотореклама, ext3grep та extundelete. ext3grep була найкращою програмою для відновлення файлів. Синтаксис дуже простий:
ext3grep image.img --restore-all
або:
ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’
Це відео - міні-підручник, який може вам допомогти.
Альтернативою може бути використання del
замість rm
видалення:
http://fex.belwue.de/fstools/del.html
del
має функцію відновлення і працює з будь-якою файловою системою.
Звичайно, це не рішення, якщо ви вже видалили свої файли з "не бери в'язнів" rm: -}
del
команди.
підключити диск через зовнішній інтерфейс
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Перейдіть за цим посиланням для отримання додаткової інформації: видаліть щойно видалений файл на ext4 з extundelete .
Інструменти відновлення - командний рядок:
Інструменти відновлення - Gui:
Інформація:
В особистому досвіді я повертаю свої дані за допомогою ufs-explorer та photorec
(1) = Не відкритий код, не безкоштовний
(2) = Не з відкритим кодом, безкоштовно
(3) = Відкритий і безкоштовний
(4) = Мати підтримку ntfs
(5) = Мати функцію структури каталогів
Я не погоджуюся з тим, що це неможливо, просто дуже важко, і я ніколи не робив цього з Linux:
Коли файли видаляються, вони фактично не видаляються. Що трапляється, що простір, який вони були на жорсткому диску, є своєрідним скиданням, так що якщо комп'ютер намагається записати туди дані, ніхто не скаржиться. Як правило, дані на вашому жорсткому диску, які ви думали, що ви видалили, можуть бути там майже через рік. Або принаймні, це мій досвід роботи на машині Windows. Чи працює він так само, як і в командному рядку в Linux, я не впевнений, але вам, швидше за все, потрібен окремий Live CD, щоб відкрити такий розділ, і також немає гарантії, що файли все ще є. Я робив це на Windows xp кілька разів, використовуючи відновлення Zero Assumption. Я впевнений, що існує подібний інструмент, якщо ви виглядаєте досить важко.
Коли ви видаляєте файл, кількість посилань у таблиці inode для цього файлу зменшується на одиницю. У Unix, коли кількість посилань падає до 0, блоки даних для цього файлу позначаються як вільні, і зазвичай посилання на ці блоки даних втрачаються. Я щойно з коментаря @ fedorqui виявив, що може бути якийсь спосіб отримати доступ до цих блоків, але це стосується лише файлової системи ext3.
Одним із способів збереження файлів буде написання функції, яка дозволить вам перемістити файли в кошик для сміття (скажімо так $HOME/.trash
) і відновити потрібні файли звідти. Ця функція може бути псевдонімна rm
. Ви можете запланувати завдання cron для видалення файлів, які були в кошику протягом певної кількості днів.
Це може врятувати неприємності для когось із вас.
Якщо ви коли-небудь використовували gedit для редагування цього файлу, за замовчуванням буде створена його копія.
Наприклад, припустимо, ми випадково видалили "myfile.txt".
У папці, в якій містився файл, який ви тільки що видалили, використовуйте ці команди, і ви відновите копію звідти.
ls | grep 'myfile.txt~'
Зі трохи удачі ви знайдете її, а потім:
cp 'myfile.txt~' 'myfile.txt'
я відновив файл лише зараз, використовуючи цей метод. Удачі!