- Проверка и восстановление файловых систем в Linux- команда fsck
- Как работает fsck?
- Некоторые особенности использования fsck в Linux
- Синтаксис и основные опции fsck
- Примеры использования fsck
- Заключение
- Восстановление файловой системы Linux после сбоя
- Бэкап Linux и восстановление его на другом железе
- 1. Создание бэкапа
- Восстановление бэкапа на другом железе
Проверка и восстановление файловых систем в Linux- команда fsck
Иногда по разным причинам (в результате сбоя, некорректного завершения работы) файловые системы накапливают ошибки. Сами ошибки представляют собой «рассогласованные» структуры данных. Естественно, при возникновении такой ситуации необходимо как можно скорее привести повреждённую файловую систему в порядок. С этой задачей отлично справляется утилита fsck. Она действительно очень эффективна и системные администраторы очень часто в первую очередь используют именно ее для восстановления или починки файловых систем.
Как работает fsck?
Утилита fsck (File System Consistency Check) изначально глубоко проверяла все структуры данных подряд, т. е. целиком всю файловую систему. Для поиска ошибок она задействовала методы эвристического анализа для ускорения и оптимизации процесса поиска ошибок. Однако, даже в этом случае для больших по объёму файловых систем эта процедура могла занимать много часов.
Позднее была реализована схема оценки состояния файловой системы, в основе которой лежит признак «чистого бита файловой системы». Если происходил сбой и файловая система (ФС) некорректно демонтировалась, то в суперблоке ФС устанавливался этот бит. По-умолчанию в Linux-системах на одном из этапов загрузки системы происходит проверка файловых систем, которые зарегистрированы в файлах /etc/fstab, /etc/vfstab, а также в /etc/filesystems. Таким образом, анализируя «чистый бит» ФС во время загрузки системы утилита определяет, стоит ли проводить проверку.
Журналируемые ФС в настоящее время позволяют утилите работать только с теми структурами данных, которым действительно необходима починка или восстановление. При необходимости fsck может восстановить всю ФС целиком благодаря всё тем же журналам ФС.
Некоторые особенности использования fsck в Linux
Для Linux-систем довольно часто (в особенности с использованием ФС ext) проверка ФС может быть организована таким образом, что она будет проводиться при прошествии некоторого числа демонтирований, даже если ФС полностью исправны. Это особенно актуально для настольных компьютеров, которые могут выключаться/включаться каждые сутки, перезагружаться в связи с особенностью их работы и применения, а также из-за свободного к ним доступа для подключения внешних устройств. В таких случаях проверка ФС (хоть и является полезной и благоприятной процедурой), оказывается слишком частой, а потому бессмысленной.
По-умолчанию в Linux проверка ФС проводится по прошествии 20 демонтирований. Для того, чтобы изменить количество демонтирований, после которых нужна проверка ФС нужно воспользоваться командой tune2fs:
Синтаксис и основные опции 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, следует воспользоваться командой:
Здесь опция -y необходима, т. к. при её отсутствии придётся слишком часто давать подтверждение. Следующая команда позволит произвести принудительную проверку ФС, даже в том случае, если она исправна:
Одной из самых полезных является опция, позволяющая помечать повреждённые сектора и эта же опция используется чаще всего. Обычно такие ситуации (с повреждёнными секторами) возникают после сбоев, вызванных нештатным отключением электропитания:
Работу файловыми системами нужно проводить, когда они отмонтированны от разделов. Однако, если возникает ситуация, когда нужно всё же произвести проверку на примонтированных ФС, то перед тем как использовать команду fsck с соответствующей опцией, нужно сначала перемонтировать нужную ФС в режиме «только для чтения»:
Для указания, какую ФС использовать для раздела:
Если fsck не справляется с исправлением/починкой ФС (что случается очень редко), то это может быть из-за повреждённого суперблока ФС. Его также можно восстановить, поскольку для суперблоков создаются их резервные копии. Но сначала нужно узнать, по каким адресам эти копии записывались, а затем попытаться восстановить суперблок из одной их резервных копий:
Команда fdisk -l упомянута в данном примере для наглядности того, что сначала нужно представлять, с каким устройством работать, т. к. она выводит список (в данном выводе опущен) доступных разделов. Команда mkfs предназначена для создания ФС, но с опцией -n её можно использовать для получения информации о ФС, в том числе и о расположении суперблоков. Следует следить за тем, чтобы ключом -t для mkfs задавалась соответствующая фактическому состоянию файловая система, в данном случае ext4.
Заключение
В данной статье мы рассмотрели работу и использование утилиты fsck. Как видно из статьи использование утилиты не предоставляет большой сложности. А возможности по проверки и восстановлению файловых систем в Linux у нее довольно большие, поэтому знание этой утилиты системному администратору просто необходимы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Восстановление файловой системы Linux после сбоя
Дата добавления: 06 сентября 2010
Сбой файловой системы в linux случается достаточно редко, но лично у меня пару раз такое происходило из-за экстренного выключения ноутбука, вместо традиционного завершения сеанса операционной системы. И, при следующем включении, дистрибутив просто не загружался и выводил ошибку в терминале о неисправности используемого сектора жесткого диска. Если вам приходилось видеть данную ошибку, то, скорее всего, проблема в коренном (чаще всего он и есть поврежденный) секторе файловой системы.
Для выполнения восстановления нам необходим любой современный LiveCD дистрибутив.
Загружаемся в LiveCD и заходим в терминал от имени суперпользователя.
Для восстановление файловой системы в linux используется консольная утилита под названием fsck. Её вызов очень прост даже для новичков в мире linux.
Последовательность действий:
1. Загружаемся с LiveCD дистрибутива linux, содержащего в себе драйвер для работы с вашей файловой системой (например ext4) и собственно утилиту fsck.
2. Заходим в терминал LiveCD под именем суперпользователя. Например, в той-же Ubuntu нужно просто набрать в основной консоли sudo su. В Debian есть отдельный пункт меню для вызова root консоли. В Gentoo вам вообще ничего не придется делать — после загрузки вы уже под именем root.
3. Если вы не помните путь до поврежденной файловой системы (/dev/sdx), то смотрите на вывод команды fdisk -l и ориентируясь на размер или другие параметры, запоминаете путь до файловой системы (например /dev/sda1).
4. Теперь осталось запустить утилиту восстановления файловой системы командой fsck -fy /dev/sdx , где sdx — имя раздела (например sda1). Опция -f (force) используется для принудительной выполнении проверки. Опция -y (yes) позволяет программе автоматически отвечать «да» на все вопросы в ходе работы.
Также стоит запомнить опцию -t которая задаёт тип файловой системы.
Вот так-бы выглядел запуск проверки диска у меня на ноутбуке:
Автор: vasilisc, дата: 18 сентября 2014 , время: 13:40:29 (MSK).
В Ubuntu через определенное количество монтирований жестких дисков (читай «перезагрузок компьютера») принудительно включается fsck для проверки жестких дисков. Многие знают, что с помощью tune2fs можно управлять интервалами проверок fsck.
Но иногда нужно проверить диск «здесь и сейчас». Если запустить fsck с указанием ваших дисков, то скорее всего они примонтированы и fsck предупредит, что это чревато для вас. Как быть? Отмонтировать, чтобы проверить? А как быть с корнем?
Источник
Бэкап Linux и восстановление его на другом железе
Я работаю в организации с маленьким штатом, деятельность тесно связана с IT и у нас возникают задачи по системному администрированию. Мне это интересно и частенько я беру на себя решение некоторых.
На прошлой неделе мы настраивали FreePBX под debian 7.8, нанимали фрилансера. В процессе настройки оказалось, что сервер (да, я так называю обычный PC) не хочет грузится с HDD при подключенных USB 3G модемах, которые мы используем для звонков на мобильные, колупание BIOSа не помогло. Непорядок. Решил, что нужно перенести его на другую железяку. Так появилось сразу две связанные задачи:
- сделать бэкап сервера;
- восстановить бэкап на другом железе.
Гугление не дало внятных ответов, как это сделать, пришлось собирать информацию кусками и пробовать. Всякие acronis’ы отбросил сразу, ибо не интересно.
Опыт общения с linux-системами у меня небольшой: настройка VPN сервера на open-vpn, ftp-сервера и еще пара мелочей. Сам себя я характеризую как человека умеющего читать маны и править конфиги 🙂
Ниже я описываю свой частный случай и почему я поступил именно так. Надеюсь, новичкам будет полезно, а бородатые админы улыбнутся вспомнив молодость.
Начинаем копать теорию:
Второй способ требует наличия внешнего жесткого диска объемом не меньше раздела, который архивируем. Да и что с ним потом делать, непонятно, хранить на полочке? Остановился на tar, чуть сложнее в реализации, нужно будет создать MBR, но время создания/восстановления архива существенно меньше, хранить бэкап проще, полтора гига можно закинуть в облако и скачать, когда будет нужно. Записывать его можно на ту же live-флэшку, с которой буду грузиться.
Итак, план действия:
1. Создание бэкапа
Грузимся с live-флэшки, у меня это debian-live-7.8.0-amd64-standard.
Переключаемся на root:
Монтируем раздел, который будем архивировать, у меня это sda1, чтобы случайно не наломать дров, монтируем только для чтения. Посмотреть все свои разделы можно при помощи команд ls /dev | grep sd или df -l
Наша флэшка уже примонтирована, но в режиме только чтения, нужно перемонтировать для чтения-записи, чтобы писать туда бэкап.
Все готово для создания архива
Здесь у нас параметры: c — создать архив, v — выводить информацию о процессе, z — использовать сжатие gzip, p — сохраняем данные о владельцах и правах доступа, f — пишем архив в файл, путь к файлу, —exclude — исключаем из архива каталог (я исключил каталоги с записями разговоров и каталог с бэкапами FreePBX), /mnt/ — каталог, который архивируем.
Ждем… у меня вся подготовка и создание архива заняли 10 минут. Будь флэшка быстрее, уложился бы в 7-8 минут.
Складываем архив в надежное место за пределами офиса.
Восстановление бэкапа на другом железе
2. Размечаем диск, создаем файловую систему
Грузимся с live-флэшки, у меня все та же debian-live-7.8.0.
Переключаемся на root:
Размечаем диск. Мне понравилась утилита с псевдографическим интерфейсом cfdisk. Там все просто и понятно.
Удаляем все имеющиеся разделы. Я создал два новых раздела, один на 490 Gb под / (sda1) и 10 Gb под swap (sda2) в конце диска, т.к. он практически не будет задействован. Проверим типы разделов. Который под систему должен иметь тип 83 Linux, второй — 82 Linux swap / Solaris. Помечаем системный раздел загрузочным (bootable), сохраняем изменения и выходим.
Cоздаем файловую систему на первом разделе.
3. Распаковываем архив.
Монтируем отформатированный раздел
Распаковываем архив прямо с флэшки
Параметр —same-owner — сохраняет владельцев у распаковываемых файлов, x — извлекаем из архива, v — выводить информацию о процессе, p — сохраняем права доступа, f — указываем файл, который распаковываем, C — распаковываем в категорию.
4. Создаем MBR на новом диске.
Чтобы корректно создать загрузочную запись, монтируем рабочие каталоги к нашему будущему root-каталогу, у меня это /mnt. Каталоги /dev и /proc сейчас используются live-системой, используем параметр bind, чтобы они были доступны сразу в двух местах:
Переключаемся на новую систему используя chroot:
Делаем swap-раздел для новой системы:
Подключаем его же:
Чтобы grub работал, нужно указать ему правильные UUID разделов в fstab, сейчас там прописаны разделы предыдущей системы:
Открываем второй терминал (Alt+F2) под root:
И видим текущие UUID разделов.
Вручную переписываем их в fstab переключаясь между Alt+F1 и Alt+F2. Да, муторно, но попытки копировать занимали у меня больше времени, чем переписывание. Сохраняем fstab.
Устанавливаем grub2. У меня один физический диск, поэтому ставим его на sda:
На чистый диск должно встать без ошибок. Обновляем информацию из fstab:
Возвращаемся в Live-систему:
Размонтируем все каталоги:
Если вылазят процессы, которые используют эти каталоги, убиваем их используя fuser.
Все, поехали. Грузимся с жесткого диска:
Здесь статья должна была закончиться, но у меня возникли проблемы с подключением к интернету. Сервер видит сеть, видит компьютеры в ней, но в интернет не ходит… а это как бы важно для телефонии.
5. Тестирование и устранение неполадок.
Показывет интерфейсы eth1 и lo, гугление сказало, что gateway можно прописать только подключению eth0, остальные рассчитаны только на работу внутри сети.
Похоже, отсутствие eth0 вызвано способом переноса системы. Находим файл, который отвечает за нумерацию интерфейсов, смотрим туда:
Действительно, там два активных интерфейса, определенных MAC’ами. Комментируем первый, второму прописываем eth0.
Перезапуск /etс/init.d/networking не помог, поэтому перезагружаемся:
Подключаем донглы, проверяем, все работает.
Спасибо за внимание.
Источник