Иногда плохие вещи случаются с хорошими системами.
К счастью, вы являетесь пользователем Linux и у вас есть fsck (проверка файловой системы), чтобы помочь с потенциально поврежденной файловой системой. Эта утилита используется для проверки и (необязательно) восстановления файловой системы.
Есть несколько сценариев, где вы можете использовать fsck. Как правило, вы захотите выполнить эту команду, если ваша система не загружается, устройство (внешние накопители или носители данных) не работает должным образом, или если вы видели доказательства повреждения файла.
Fsck на самом деле является «внешним интерфейсом» для ряда специфичных для файловой системы средств проверки, таких как fsck.vfat, fsck.ext2 и т. д. Их указывать необязательно, но вы можете найти более сложные опции в man страницы этих более точных команд.
Введение в команду fsck
Команда fsck следует шаблону, подобному большинству команд Linux.
fsck [options] [filesystem]
Если вы не укажете файловую систему, система проанализирует ваш файл fstab (/etc/fstab) на наличие устройств для сканирования.
Вам нужно будет выполнить команду как пользователь root или использовать ее с sudo.
Вы можете использовать команду fdisk или df для вывода списка жесткого диска в Linux . Таким образом, вы можете указать, какое устройство проверять с помощью команды fsck.
Disk /dev/nvme0n1: 238.49 GiB, 256060514304 bytes, 500118192 sectors Disk model: THNSN5256GPUK NVMe TOSHIBA 256GB Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 014A45DC-22A2-4FC0-BEEA-25A6F2406380 Device Start End Sectors Size Type /dev/nvme0n1p1 2048 1050623 1048576 512M EFI System /dev/nvme0n1p2 1050624 98563270 97512647 46.5G Linux filesystem /dev/nvme0n1p3 98564096 500117503 401553408 191.5G Linux filesystem
Размонтируйте устройство перед запуском fsck
Не запускайте fsck на смонтированном устройстве, вам нужно сначала отключить цель, чтобы избежать повреждения ваших файлов.
Если вы попытаетесь запустить fsck на смонтированном устройстве, вы должны увидеть такую ошибку:
destroyer@andreyex:~$ sudo fsck /dev/sda3 fsck from util-linux 2.34 e2fsck 1.45.5 (07-Jan-2020) /dev/sda3 is mounted. e2fsck: Cannot continue, aborting.
Запуск fsck на нормальном здоровом диске выглядит следующим образом:
destroyer@andreyex:~$ sudo fsck /dev/sda2 fsck from util-linux 2.34 fsck.fat 4.1 (2017-01-24) /dev/sda2: 5 files, 1967/1972 clusters
Хотя fsck принимает имя устройства, например /dev/sda, вы можете ввести UUID, чтобы избежать путаницы с подключением и отключением устройств. UUID — это фиксированное значение, назначенное вашему устройству и не будет зависеть от этих системных изменений.
Понимание кодов выхода для команды fsck
Это список кодов, которые могут быть возвращены из fsck после проверки диска. Ваш код выхода будет суммой этих кодов, если вы проанализируете один диск. Если вы используете fsck на нескольких устройствах, он вернет побитовое ИЛИ двух сумм.
- 0 — нет ошибок
- 1 — исправлены ошибки файловой системы
- 2 — система должна быть перезагружена
- 4 — Ошибки файловой системы оставлены без исправлений
- 8 — Операционная ошибка
- 16 — ошибка использования или синтаксиса
- 32 — Fsck отменен по запросу пользователя
- 128 — Ошибка общей библиотеки
Вы можете проверить код завершения последней команды запуска, используя команду echo $?.
Практическое использование команды fsck
Теперь, когда вы немного знакомы с командой fsck, давайте посмотрим на практические примеры использования этой команды.
Ремонт USB-диска и других съемных устройств
Для наших целей предположим, что вы уже определили проблемное устройство /dev/sdb.
Во-первых, вам нужно убедиться, что диск отключен:
sudo umount /dev/sdb
Теперь запустите команду fsck:
sudo fsck /dev/sdb
Проверьте вывод на наличие ошибок. Если ничего не отображается, проверьте код выхода с помощью echo $?.
Есть также некоторые опции флагов, которые мы можем добавить, чтобы позволить автоматическое исправление. Эти команды не стандартизированы, и вы должны проверить тип файловой системы и сравнить документацию с этой конкретной страницы руководства.
Несмотря на это, вы можете использовать -pfsck для автоматического восстановления.
sudo fsck -p /dev/sdb
Аналогичным образом -y будут применены исправления к любой обнаруженной поврежденности файловой системы.
Восстановить корневую файловую систему
Вы не можете размонтировать корневой раздел, пока система активна. Если вы подозреваете, что ваша основная файловая система повреждена, вы должны использовать здесь другой подход.
Есть несколько вариантов, которые вы можете использовать. Вы можете запустить fsck во время загрузки, в режиме восстановления или использовать live cd на тему восстановления.
Многие дистрибутивы Linux автоматически запускают fsck после определенного числа неудачных попыток загрузки. Если вы предпочитаете взять дело в свои руки, вы можете запланировать, что система сделает это самостоятельно.
В большинстве современных версий Linux есть инструмент под названием tune2fs.
sudo tune2fs -c 1 /dev/sda
Предполагая, что ваше корневое устройство dev/sda, это команда, которую вы должны ввести.
Теперь, что на самом деле происходит, так это то, что вы меняете системные настройки так, что fsck запускается при каждом nколичестве загрузок (1 в примере). Вы также можете установить это на стандартный интервал времени. Варианты days, weeks, или months.
Допустим, вы хотите, чтобы fsck запускался каждый раз при загрузке, если в течение недели не было проверки. Вы можете использовать -i для указания интервала, и команда будет выглядеть следующим образом.
sudo tune2fs -i 1w /dev/sda
Если вы используете systemd, вы можете принудительно запустить fsck при следующей загрузке, введя следующее:
fsck.mode=force fsck.repair=yes
Вывод
Вы всегда можете обратиться к man-страницам для получения дополнительной информации. Просто используйте man fsckв терминале.
Мы надеемся, что вы узнали что-то новое о команде fsck. Если у вас есть какие-либо комментарии или вопросы, пожалуйста, оставьте их ниже.