• Как восстановить файловую систему в fsck. Проверка ФС и восстановление удалённых файлов в Linux

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

    Но если питание выключается неожиданно, часть данных теряется, и могут быть потерянны важные данные, что приведет к повреждению самой файловой системы. В этой статье мы рассмотрим как восстановить файловую систему fsck, для нескольких популярных файловых систем, а также поговорим о том, как происходит восстановление ext4.

    Как вы знаете файловая система содержит всю информацию обо всех хранимых на компьютере файлах. Это сами данные файлов и метаданные, которые управляют расположением и атрибутами файлов в файловой системе. Как я уже говорил, данные не сразу записываются на жесткий диск, а некоторое время находятся в оперативной памяти и при неожиданном выключении, за определенного стечения обстоятельств файловая система может быть повреждена.

    Современные файловые системы делятся на два типа - журналируемые и нежурналируемые. Журналиуемые файловые системы записывают в лог все действия, которые собираются выполнить, а после выполнения стирают эти записи. Это позволяет очень быстро понять была ли файловая система повреждена. Но не сильно помогает при восстановлении. Чтобы восстановить файловую систему linux необходимо проверить каждый блок файловой системы и найти поврежденные сектора.

    Для этих целей используется утилита fsck. По сути, это оболочка для других утилит, ориентированных на работу только с той или иной файловой системой, например, для fat одна утилита, а для ext4 совсем другая.

    В большинстве систем для корневого раздела проверка fsck запускается автоматически, но это не касается других разделов, а также не сработает если вы отключили проверку.

    Основы работы с fsck

    В этой статье мы рассмотрим ручную работу с fsck. Возможно, вам понадобиться LiveCD носитель, чтобы запустить из него утилиту, если корневой раздел поврежден. Если же нет, то система сможет загрузиться в режим восстановления и вы будете использовать утилиту оттуда. Также вы можете запустить fsck в уже загруженной системе. Только для работы нужны права суперпользователя, поэтому выполняйте ее через sudo.

    А теперь давайте рассмотрим сам синтаксис утилиты:

    $ fsck [опции] [опции_файловой_системы] [раздел_диска]

    Основные опции указывают способ поведения утилиты, оболочки fsck. Раздел диска - это файл устройства раздела в каталоге /dev, например, /dev/sda1 или /dev/sda2. Опции файловой системы специфичны для каждой отдельной утилиты проверки.

    А теперь давайте рассмотрим самые полезные опции fsck:

    • -l - не выполнять другой экземпляр fsck для этого жесткого диска, пока текущий не завершит работу. Для SSD параметр игнорируется;
    • -t - задать типы файловых систем, которые нужно проверить. Необязательно указывать устройство, можно проверить несколько разделов одной командой, просто указав нужный тип файловой системы. Это может быть сама файловая система, например, ext4 или ее опции в формате opts=ro. Утилита просматривает все файловые системы, подключенные в fstab. Если задать еще и раздел то к нему будет применена проверка именно указанного типа, без автоопределения;
    • -A - проверить все файловые системы из /etc/fstab. Вот тут применяются параметры проверки файловых систем, указанные в /etc/fstab, в том числе и приоритетность. В первую очередь проверяется корень. Обычно используется при старте системы;
    • -C - показать прогресс проверки файловой системы;
    • -M - не проверять, если файловая система смонтирована;
    • -N - ничего не выполнять, показать, что проверка завершена успешно;
    • -R - не проверять корневую файловую систему;
    • -T - не показывать информацию об утилите;
    • -V - максимально подробный вывод.

    Это были глобальные опции утилиты. А теперь рассмотрим опции для работы с файловой системой, их меньше, но они будут более интересны:

    • -a - во время проверки исправить все обнаруженные ошибки, без каких-либо вопросов. Опция устаревшая и ее использовать не рекомендуется;
    • -n - выполнить только проверку файловой системы, ничего не исправлять;
    • -r - спрашивать перед исправлением каждой ошибки, используется по умолчанию для файловых систем ext;
    • -y - отвечает на все вопросы об исправлении ошибок утвердительно, можно сказать, что это эквивалент a.
    • -c - найти и занести в черный список все битые блоки на жестком диске. Доступно только для ext3 и ext4;
    • -f - принудительная проверка файловой системы, даже если по журналу она чистая;
    • -b - задать адрес суперблока, если основной был поврежден;
    • -p - еще один современный аналог опции -a, выполняет проверку и исправление автоматически. По сути, для этой цели можно использовать одну из трех опций: p, a, y.

    Теперь мы все разобрали и вы готовы выполнять восстановление файловой системы linux. Перейдем к делу.

    Как восстановить файловую систему в fsck

    Допустим, вы уже загрузились в LiveCD систему или режим восстановления. Ну, одним словом, готовы к восстановлению ext4 или любой другой поврежденной ФС. Утилита уже установлена по умолчанию во всех дистрибутивах, так что устанавливать ничего не нужно.

    Восстановление файловой системы

    Если ваша файловая система находится на разделе с адресом /dev/sda1 выполните:

    sudo fsck -y /dev/sda1

    Опцию y указывать необязательно, но если этого не сделать утилита просто завалит вас вопросами, на которые нужно отвечать да.

    Восстановление поврежденного суперблока

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

    Но не спешите прощаться с вашими данными, все еще можно восстановить. С помощью такой команды смотрим куда были записаны резервные суперблоки:

    sudo mkfs -t ext4 -n /dev/sda1

    На самом деле эта команда создает новую файловую систему. Вместо ext4 подставьте ту файловую систему, в которую был отформатирован раздел, размер блока тоже должен совпадать иначе ничего не сработает. С опцией -n никаких изменений на диск не вноситься, а только выводится информация, в том числе о суперблоках.

    Теперь у нас есть шесть резервных адресов суперблоков и мы можем попытаться восстановить файловую систему с помощью каждого из них, например:

    sudo fsck -b 98304 /dev/sda1

    После этого, скорее всего, вам удастся восстановить вашу файловую систему. Но рассмотрим еще пару примеров.

    Проверка чистой файловой системы

    Проверим файловую систему, даже если она чистая:

    sudo fsck -fy /dev/sda1

    Битые сектора

    Или еще мы можем найти битые сектора и больше в них ничего не писать:

    sudo fsck -c /dev/sda1

    Установка файловой системы

    Вы можете указать какую файловую систему нужно проверять на разделе, например:

    sudo fsck -t ext4 /dev/sdb1

    Проверка всех файловых систем

    С помощью флага -A вы можете проверить все файловые системы, подключенные к компьютеру:

    Но такая команда сработает только в режиме восстановления, если корневой раздел и другие разделы уже примонтированы она выдаст ошибку. Но вы можете исключить корневой раздел из проверки добавив R:

    sudo fsck -AR -y

    Или исключить все примонтированные файловые системы:

    Также вы можете проверить не все файловые системы, а только ext4, для этого используйте такую комбинацию опций:

    sudo fsck -A -t ext4 -y

    Или можно также фильтровать по опциям монтирования в /etc/fstab, например, проверим файловые системы, которые монтируются только для чтения:

    sudo fsck -A -t opts=ro

    Проверка примонтированных файловых систем

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

    sudo mount -o remount,ro /dev/sdb1

    А теперь проверка файловой системы fsck в принудительном режиме:

    sudo fsck -fy /dev/sdb1

    Просмотр информации

    Если вы не хотите ничего исправлять, а только посмотреть информацию, используйте опцию -n.

    Иногда по разным причинам (в результате сбоя, некорректного завершения работы) файловые системы накапливают ошибки. Сами ошибки представляют собой «рассогласованные» структуры данных. Естественно, при возникновении такой ситуации необходимо как можно скорее привести повреждённую в порядок. С этой задачей отлично справляется утилита fsck . Она действительно очень эффективна и системные администраторы очень часто в первую очередь используют именно ее для восстановления или починки файловых систем.

    Как работает fsck?

    Утилита fsck (F ile S ystem Consistency Check ) изначально глубоко проверяла все структуры данных подряд, т. е. целиком всю файловую систему. Для поиска ошибок она задействовала методы эвристического анализа для ускорения и оптимизации процесса поиска ошибок. Однако, даже в этом случае для больших по объёму файловых систем эта процедура могла занимать много часов.

    Позднее была реализована схема оценки состояния файловой системы, в основе которой лежит признак «чистого бита файловой системы». Если происходил сбой и файловая система (ФС) некорректно демонтировалась, то в суперблоке ФС устанавливался этот бит. По-умолчанию в Linux-системах на одном из этапов загрузки системы происходит проверка файловых систем, которые зарегистрированы в файлах /etc/fstab, /etc/vfstab, а также в /etc/filesystems. Таким образом, анализируя «чистый бит» ФС во время загрузки системы утилита определяет, стоит ли проводить проверку.

    Журналируемые ФС в настоящее время позволяют утилите работать только с теми структурами данных, которым действительно необходима починка или восстановление. При необходимости fsck может восстановить всю ФС целиком благодаря всё тем же журналам ФС.

    Некоторые особенности использования fsck в Linux

    Для Linux-систем довольно часто (в особенности с использованием ФС ext) проверка ФС может быть организована таким образом, что она будет проводиться при прошествии некоторого числа демонтирований, даже если ФС полностью исправны. Это особенно актуально для настольных компьютеров, которые могут выключаться/включаться каждые сутки, перезагружаться в связи с особенностью их работы и применения, а также из-за свободного к ним доступа для подключения внешних устройств. В таких случаях проверка ФС (хоть и является полезной и благоприятной процедурой), оказывается слишком частой, а потому бессмысленной.

    По-умолчанию в Linux проверка ФС проводится по прошествии 20 демонтирований. Для того, чтобы изменить количество демонтирований, после которых нужна проверка ФС нужно воспользоваться командой tune2fs :

    $ sudo tune2fs -с 50 /dev/sda1 tune2fs 1.44.1 (24-Mar-2018) Setting maximal mount count to 50

    Синтаксис и основные опции fsck

    У команды fsck следующий синтаксис:

    Fsck [параметр] -- [параметры ФС] [<файловая система> . . .]

    Основные параметры:

    Опция Описание
    -A Проверяет все ФС
    -С [] Показывает статус выполнения. Здесь fd – дескриптор файла при отображении через графический интерфейс
    -l Блокирует устройство для исключительного доступа
    -M Запрещает проверять примонтированные ФС
    -N Показывает имитацию выполнения, без запуска реальной проверки
    -P Проверять вместе с корневой ФС
    -R Пропускает проверку корневой ФС. Может использоваться только совместно с опцией -A
    -r [] Выводит статистику для каждого проверенного устройства
    -T Не показывать заголовок при запуске
    -t <тип> Задаёт ФС для проверки. Можно задавать несколько ФС, перечисляя через запятую
    -V Выводит подробное описание выполняемых действий

    Кроме основных опций для fsck существуют и специфические, зависящие от выполняемой задачи и/или ФС. Об этом более подробно можно прочитать в соответствующих страницах , используя команду man fsck . В содержании основного руководства для утилиты (в разделе «SEE ALSO») есть ссылки на другие страницы, например fstab(5), mkfs(8), fsck.ext2(8), fsck.ext3(8) и т. д. Информацию по этим ссылкам можно просматривать выполняя команду man с соответствующими параметрами, например man fsck.ext3.

    В следующей таблице приводятся дополнительные (специальные), а также наиболее часто используемые опции, позволяющие использовать команду с максимальной гибкостью и эффективностью:

    Опция Описание
    -a Устаревшая опция. Указывает исправлять все найденные ошибки без одобрения пользователя.
    -r Применяется для файловых систем ext. Указывает fsck спрашивать пользователя перед исправлением каждой ошибки
    -n Выполняет только проверку ФС, без исправления ошибок. Используется также для получения информации о ФС
    -c Применяется для файловых систем ext3/4. Помечает все повреждённые блоки для исключения последующей записи в них
    -f Принудительно проверяет ФС, даже если ФС исправна
    -y Автоматически подтверждает запросы к пользователю
    -b Задаёт адрес суперблока
    -p Автоматически исправлять найденные ошибки. Заменяет устаревшую опцию -a

    Примеры использования fsck

    Для самой типичной ситуации, характерной для случаев, когда нужно восстановить (а точнее «починить») ФС, например на устройстве /dev/sdb2, следует воспользоваться командой:

    $ sudo fsck -y /dev/sdb2

    Здесь опция -y необходима, т. к. при её отсутствии придётся слишком часто давать подтверждение. Следующая команда позволит произвести принудительную проверку ФС, даже в том случае, если она исправна:

    $ sudo fsck -fy /dev/sdb2

    Одной из самых полезных является опция, позволяющая помечать повреждённые сектора и эта же опция используется чаще всего. Обычно такие ситуации (с повреждёнными секторами) возникают после сбоев, вызванных нештатным отключением электропитания:

    $ sudo fsck -c /dev/sdb2

    Работу файловыми системами нужно проводить, когда они отмонтированны от разделов. Однако, если возникает ситуация, когда нужно всё же произвести проверку на примонтированных ФС, то перед тем как использовать команду fsck с соответствующей опцией, нужно сначала перемонтировать нужную ФС в режиме «только для чтения»:

    $ sudo mount remount,ro /dev/sdb2 $ sudo fsck -fy /dev/sdb2

    Для указания, какую ФС использовать для раздела:

    $ sudo fsck -t ext4 -y /dev/sdb2

    Если fsck не справляется с исправлением/починкой ФС (что случается очень редко), то это может быть из-за повреждённого суперблока ФС. Его также можно восстановить, поскольку для суперблоков создаются их резервные копии. Но сначала нужно узнать, по каким адресам эти копии записывались, а затем попытаться восстановить суперблок из одной их резервных копий:

    $ sudo fdisk -l $ sudo mkfs -t ext4 -n /dev/xvdb1 $ sudo fsck -b 163840 /dev/xvdb1

    Команда -l упомянута в данном примере для наглядности того, что сначала нужно представлять, с каким устройством работать, т. к. она выводит список (в данном выводе опущен) доступных разделов. Команда mkfs предназначена для создания ФС, но с опцией -n её можно использовать для получения информации о ФС, в том числе и о расположении суперблоков. Следует следить за тем, чтобы ключом -t для mkfs задавалась соответствующая фактическому состоянию файловая система, в данном случае ext4.

    Заключение

    В данной статье мы рассмотрели работу и использование утилиты fsck. Как видно из статьи использование утилиты не предоставляет большой сложности. А возможности по проверки и восстановлению файловых систем в Linux у нее довольно большие, поэтому знание этой утилиты системному администратору просто необходимы.

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

    Пришлось и мне столкнуться с данной проблемой. Мой один товарищ, у которого установлена Убунту на старенький ноутбук ASUS, и который просто не хочет хоть иногда включать мозги, обратился ко мне с такой проблемой. На его ноуте установлена новая Убунту 12.10 и очень часто система просто не хочет грузиться, выбрасывая в черный экран, либо застывая на фиолетовом фоне. А вот в последнее время начало выскакивать такое вот сообщение, что-то типа «Операционная система не смогла загрузиться. Выберите для дальнейших действий нужную клавишу…» И дальше идет описание, что нужно нажать. Я уже точно не помню, какие клавиши предлагает нажать система, но смысл такой, что для автоматического исправления ошибок нажмите такую-то клавишу, для ручной отладки другую, и чтобы игнорировать это сообщение предлагается нажать третью кнопку. Автоматическое исправление ошибок ни к чему не приводило и загрузка операционной системы так и не доходила до логического завершения. Вот и решил я попробовать знаменитую команду fsck .

    Для начала нужно загрузиться либо с загрузочной флешки с Ubuntu (Lubuntu, Xubuntu, Kubuntu и т.д.), либо с диска Ubuntu Live CD. Теперь нам нужно узнать, какой именно раздел с Убунту нам нужно просканировать для исправления файловой системы. Запускаем Терминал (Ctrl-Alt-T) и выполняем команду:

    sudo fdisk -l

    Данная команда покажет нам все диски, флешки, которые примонтированы к системе. Я приведу пример с моим личным компьютером, а не с ноутбуком приятеля. Вот, что вышло у меня:

    ubuntu@ubuntu:~$ sudo fdisk -l

    Disk /dev/sda: 640.1 GB , 640135028736 bytes
    255 heads, 63 sectors/track, 77825 cylinders, total 1250263728 sectors



    Disk identifier: 0x0009d6f7


    /dev/sda1 * 2048 61442047 30720000 83 Linux
    /dev/sda2 61442048 73730031 6143992 82 Linux swap / Solaris
    /dev/sda3 73730048 1250263039 588266496 83 Linux

    Disk /dev/sdb: 500.1 GB , 500107862016 bytes
    255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0xb9ff6f01

    Device Boot Start End Blocks Id System
    /dev/sdb1 * 16065 100197404 50090670 83 Linux
    /dev/sdb2 105322201 976771071 435724435+ 5 Extended
    /dev/sdb3 100197405 105322139 2562367+ 82 Linux swap / Solaris
    /dev/sdb5 105322203 832110591 363394194+ 7 HPFS/NTFS/exFAT
    /dev/sdb6 832112640 860755218 14321289+ 83 Linux
    /dev/sdb7 860758016 862613503 927744 82 Linux swap / Solaris
    /dev/sdb8 862615552 976771071 57077760 83 Linux

    Partition table entries are not in disk order

    Disk /dev/sdc: 8115 MB , 8115978240 bytes
    250 heads, 62 sectors/track, 1022 cylinders, total 15851520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0xc3072e18

    Device Boot Start End Blocks Id System
    /dev/sdc1 * 32 15847625 7923797 b W95 FAT32

    Как видно из вывода команды sudo fdisk -l , у меня имеются 2 жестких диска (sda)640 Гб и (sdb)500 Гб, а также флешка (sdc)8Гб, с которой я собственно и загружался. Я знаю, что моя основаня система с Убунту 12.04 находится на диске sda, а раздел с операционной системой соответственно называется sda1.

    Теперь когда мы знаем раздел, который нужно сканировать, можно собственно приступить к его проверке. В Терминале:

    sudo fsck -y -f -c /dev/sda1

    если увидете ошибку, то скорее всего нужно отмонтировать данный раздел:

    sudo umount /dev/sda1

    Ключи и параметры команды fsck:

    y - всегда отвечать yes на все вопросы (имеется альтернатива: ключ p - начинает проверку в полностью автоматическом режиме);

    f - принудительная проверка файловой системы (даже если файловая система помечена как полностью работоспособная)

    c - ищет битые блоки (bad blocks), а после отмечает их соответствующим образом

    /dev/sda1 - устройство или раздел, которые нужно проверить. Хотя команда может иметь и другой вид. Например:

    sudo fsck -p /dev/sda1

    В данном случае добавлен только ключ -p. Вы просто почитайте о всех ключах команды fsck и добавляйте именно нужные вам ключи. Чтобы узнать о всех возможностях программы введите в Терминале:

    man fsck

    Вот, что выдал Терминал после проверки:

    ubuntu@ubuntu:~$ sudo fsck -y -f -c /dev/sda1
    fsck from util-linux 2.20.1
    e2fsck 1.42.5 (29-Jul-2012)
    Checking for bad blocks (read-only test): 0.00% done, 0:00 elapsed. (0/0/0 errdone
    /dev/sda1: Updating bad block inode.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information

    Linux — одна из самых надёжных операционных систем, которую вы когда-либо видели, однако это вовсе не означает, что оборудование на котором работает Linux такое же надёжное. Жёсткие диски могут работать с ошибками и как следствие — вы получите ошибки на ваших файловых системах. Неважно насколько надёжна ваша операционная система, если вы случайно удалили нужные файлы или каталоги. Однако нее отчаивайтесь, если с вами произошло нечто подобное. Linux располагает всем необходимым, чтобы помочь вам восстановить потерянные файлы в результате удаления или сбоев в работе дисков и файловых систем. О каких инструментах идёт речь? Первым делом мы рассмотрим с вами утилиты e2fsck , scalpel и lsof . В сегодняшней заметке мы с вами посмотрим, как при помощи такого набора инструментов можно исправлять ошибки ФС и восстанавливать удалённые файлы.

    Проверка ФС ext2/ext3/ext4 при помощи e2fsck

    Утилита e2fsck является потомком известной UNIX-утилиты fsck , предназначенной для проверки файловых систем. При помощи e2fsck вы можете проверять на наличие ошибок и выполнять восстановительные работы в файловых системах ext2/ext3/ext4 .

    Одним из наиболее важных моментов в работе с e2fsck является то, что при помощи неё работы можно проводить только на отмонтированной файловой системе, в противном случае вы можете получить себе ещё больше головной боли, о чём и предупреждает сама утилита при попытке запуска её для работы на смонтированной ФС. Если проверяемая ФС не является корневой, то вы можете завершить работу всех пользователей, переключиться в однопользовательский режим (init 1 ), отмонтировать ФС и работать с ней.

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

    Если же вы по каким-то причинам выбираете первый вариант, то после того, как перейдёте в однопользовательский режим:

    # init 1

    отмонтируйте нужную для работы файловую систему:

    # umount /dev/sdb1

    и после успешного размонтирования запускайте e2fsck :

    # e2fsck -y /dev/sdb1

    Опция "-y" сообщает утилите e2fsck о том, что мы заранее согласны со всеми её вопросами и уходим пить кофе, в надежде что она самостоятельно всё сделает. В зависимости от размера файловой системы проверка и восстановление могут занять некоторое время. После окончания проверки вы всегда можете запустить тест ещё раз, чтобы убедиться в том, что не в ФС не возникло новых ошибок, что может быть вызвано аппаратными проблемами накопителя.

    После того, как все проверки и восстановительные работы будут закончены, вы можете смонтировать проверенную файловую систему и обратно вернуться в много пользовательский режим. Или же вы просто можете перезагрузить систему.

    Восстановление удалённых файлов при помощи /proc и lsof

    Теперь давайте рассмотрим процесс восстановления удалённых файлов. Вообще, причиной тому что вы можете восстановить удалённый файл является тот факт, что «файл» — это лишь ссылка на индексный дескриптор файла (inode) . Именно в inode хранится информация о физическом размещении файла. Когда вы удаляете файл, фактически вы просто удаляете ссылку на inode , в то время как сам дескриптор ещё какое-то время будет существовать: до тех пор, пока процесс, ранее открывший этот файл не освободит соответствующий дескриптор для записи. Таким образом, есть какое-то время, пусть и короткое, в течение которого можно восстановить содержимое удалённого файла. Ключом в этом процессе является файловая система , содержащая среди всего прочего информацию обо всех выполняющихся в системе процессах и открытых ими файлах. Каждый процесс, работающий в системе имеет соответствующий его PID каталог в /proc . Зная PID процесса, всё ещё держащего открытым удалённый файл, мы всегда можем восстановить его содержимое из каталога /proc// открывшего его процесса. Давайте на простом примере посмотрим, как это делается.

    Сперва давайте создадим какой-нибудь файл:

    $ echo "Очень важные данные" > ~/myfile.txt

    Теперь у нас есть файл myfile.txt с важными данными, расположенный в домашнем каталоге. Давайте попробуем удалить его и затем восстановить следующим образом. Сначала мы откроем файл для просмотра командой less , после чего приостановим её работу, оставив таким образом нужный нам файл открытым. Итак, пошагово.

    Откройте файл командой less для просмотра

    $ less ~/myfile.txt

    После того, как файл будет открыт и вы увидите его содержимое, нажмите Ctrl+z , чтобы приостановить выполнение less .

    Удалите файл:

    $ rm ~/myfile.txt

    Убедитесь в том, что файла больше нет

    $ ls -l ~/myfile.txt

    Поскольку работа ранее запущенной нами less ещё не завершена, то файл остаётся для неё открытым и фактически не удалён. Давайте восстановим его.

    Для начала необходимо узнать PID процесса, открывшего файл и номер файлового дескриптора. Сделать это можно при помощи программы lsof :

    $ lsof | grep myfile.txt less 2675 ashep 4r REG 8,1 37 294478 /home/ashep/myfile.txt (deleted)

    Во втором поле вывода lsof содержится PID — 2675, а в четвёртом номер дескриптора — 4. Теперь можно приступать к восстановлению:

    $ cp /proc/2675/fd/4 ~/recovered.txt

    Проверьте, то ли содержимое находится в файле, которое нам нужно:

    $ cat ~/recovered.txt Очень важные данные

    Как видим, всё прошло успешно и нам удалось восстановить удалённый файл.

    Восстановление удалённых файлов при помощи Scalpel

    После того как процесс, открывший файл, завершится, восстановление файла становится задачей потруднее, поскольку индексный дескриптор освобождается и всякая связь между данными в блоках на диске и файловой системой потеряна. До тех пор, пока данные физически не будут перезаписаны на диске, существует возможность их восстановления при помощи утилиты Scalpel . Этот инструмент последовательно, блока за блоком, обходит содержимое диска и анализирует его содержимое, пытаясь найти признаки существования там файлов. Для поиска Scalpel использует шаблоны из последовательности байт, присущих определённым типам файлов. Например, PNG-файлы содержат в заголовке последовательность байт \x50\x4e\x47 .

    Scalpel вы найдёте в репозиториях большинства современных дистрибутивов. После установки утилиты первым делом нужно определиться с тем, какие файлы программа будет искать при работе. Определения шаблонов для поиска находятся в файле /etc/scalpel/scalpel.conf . По умолчанию содержимое файла целиком закомментировано и прежде чем начать работу вам необходимо раскомментировать нужные шаблоны и/или добавить свои. Формат описания шаблона довольно прост:

    Extension case_sensitive size header

    • extension определяет расширение файла, которое Scalpel будет дописывать при восстановлении;
    • case_sensitive указывает утилите, имеет ли значение регистр символов в шаблоне поиска;
    • при помощи size определяется максимальный размер восстанавливаемых файлов;
    • в header и необязательном footer описываются последовательности заголовка файла и нижней его части соответственно.

    Например, определение шаблона для JPG-файлов может выглядеть так:

    Jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9

    После того, как внесёте необходимые изменения в конфигурационный файл Scalpel и подготовите пустую (обязательно!) директорию для сохранения найденных файлов, можно запускать процесс поиска и восстановления:

    # scalpel -o ~/recovered /dev/sdb1

    где при помощи опции "-o" определяется путь к каталогу для сохранения найденных файлов. Процесс работы утилиты как правило очень долгий, поскольку она сканирует всё устройство целиком, поэтому воспользуйтесь моментом и сходите прогуляться на улицу, свежий воздух ещё никому не мешал;)

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

    Заключение

    Мало кто хотел бы попасть в ситуацию, когда важные данные окажутся случайно удалёнными или повреждёнными. И хотя Linux предлагает средства для восстановления утраченных данных, приятного в этом процессе мало. Поэтому будьте всегда предельно внимательны к своим данным и работе с ними. Ну и, конечно же, не забывайте про своевременное — старый и проверенный метод, спасший не одну тысячу нервных клеток от верной гибели.

    Программа fsck используется для проверки файловых систем и для коррекции ошибок файловой системы, если таковые найдутся. Основное требование для проверки файловой системы: файловая система должна быть размонтирована. Запуск f век для уже смонтированной файловой системы может привести к ее разрушению - тогда уже даже и fsck не поможет. Программа fsck может использоваться для проверки файловых систем, которые поддерживаются ядром Linux.
    Формат вызова программы следующий:
    sudo fsck [параметры] [файловая_система]

    Параметры, как и файловую систему, можно не указывать. Если вы не укажете файловую систему, программа начнет проверять все файловые системы, перечисленные в файле /etc/fstab. Это крайне нежелательно, поскольку эти файловые системы могут быть смонтированными, что, возможно, приведет к разрушению файловой системы.

    Последовательность проверки файловой системы должна быть следующая:
    1. Размонтировать файловую систему.
    2. Запустить f sck для ее проверки.

    Например, для проверки файловой системы раздела /dev/hda5 сначала размонтируем его, а потом запустим f sck:
    sudo -i
    # umount /dev/hda5
    # fsck /dev/hda5

    Но иногда мы не можем размонтировать файловую систему, например, когда нам нужно проверить корневую файловую систему. В этом случае нужно выполнить следующие действия:
    1. Перезагрузиться в однопользовательском режиме.
    2. Перемонтировать корневую файловую систему в режиме «только чтение».
    3. Произвести проверку файловой системы.

    Для перезагрузки в однопользовательском режиме перезагрузите систему (команда reboot), а при загрузке передайте ядру параметр single.
    В однопользовательском режиме, как и следовало ожидать, может работать только один пользователь - root.
    Все сервисы выключены, так что проверке файловой системы ничто не должно помешать. Для перемонтирования файловой системы введите команду:
    # mount -о remount го -t ext3 /
    Параметр -о команды mount позволяет указать различные опции. В данном случае мы указываем опции remount и го, что означает перемонтировать в режиме «только чтение». Параметр -t указывает тип файловой системы - ext3, а последний параметр - это корневая файловая система (/).