Как определить тип файла файла с помощью linux

Проверка файловой системы на ошибки с помощью fsck на Linux

В моей статье «Проверка файловой системы на ошибки с помощью fsck на Linux» я расскажу как можно проверить файловую систему на вашей ОС в Linux.

Некоторым системам необходим пароль root чтобы запустить fsck или других аналогичных утилит, когда не могут загрузить полностью ОС. В этом случае –стоит выполнить проверку диска загрузившись в single-user mode , либо – загрузившись с другого диска.

Fsck расшифровывается как «файловая система Проверка целостности» (file system consistency check). На большинстве систем, Fsck запускается во время загрузки, если определенные условия.

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

  1. Проверка на наличие ошибок и подсказывает пользователю интерактивное решение, как решить индивидуальные проблемы;
  2. Проверка на наличие ошибок и постарается автоматически исправить все ошибки;
  3. Проверка на наличие ошибок без возможности восстановить их, но тогда выдаст ошибки на стандартный вывод.

Код выхода возвращается FSCK это уникальный номер, представляющего собой сумму следующих значений состояния:

0 — Без ошибок (No errors ).
1 — Исправлены ошибки файловой системы(Filesystem errors corrected).
2 — Система должна быть перезагружена (System should be rebooted).
4 — Ошибки файловой системы оставили без изменений (Filesystem errors left uncorrected).
8 — Эксплуатационная ошибка (Operational error).
16 — Ошибки при использовании или синтаксические ошибки (Usage or syntax error).
32 — Fsck отменен по запросу пользователя (Fsck canceled by user request).
128 — Ошибка общей библиотеки (Shared-library error).

Код выхода возвращается, когда несколько файловых систем которая проверяется побитовое ИЛИ (OR) для каждой файловой системы, которая проверяется.

В действительности, Fsck — это просто фронт-энд для различных  проверочных утилит для файловых систем (fsck.fstype), которые доступны на Linux.

Файловая система для конкретных проверок ищет сначала в /sbin, а затем в /etc/fs и /etc/, и, наконец в директориях, перечисленных в переменной PATH (среда переменного кружения).

Прочитайте мануал для конкретных страниц проверки, например, чтобы узнать больше о конкретных проверок  для ext3 FSCK, выполните:

$ man fsck.ext3

Проверка HDD на бэд-блоки на Linux с помощью smartmontools

Теперь давайте рассмотрим более современный и надежный способ
проверить диск на битые секторы linux. Современные накопители ATA/SATA
,SCSI/SAS,SSD имеют встроенную систему самоконтроля S.M.A.R.T (Self-Monitoring, Analysis and Reporting Technology,
Технология самоконтроля, анализа и отчетности), которая производит
мониторинг параметров накопителя и поможет определить ухудшение
параметров работы накопителя на ранних стадиях. Для работы со S.M.A.R.T в
Linux есть утилита smartmontools.

Давайте сначала ее установим. Если ваш дистрибутив основан на Debian\Ubuntu, то вводите:

Если же у Вас дистрибутив на основе RHEL\CentOS, то вводите:

Теперь, когда мы установили smartmontools мы можем посмотреть страницу помощи, с помощью команды:

или

Давайте перейдем к работе с утилитой. Вводим следующую команду с параметром -H,чтобы утилита показала нам информацию о состоянии накопителя:

Как видим, проверка диска на битые секторы linux завершена и утилита говорит нам, что с накопителем все в порядке!

Ещё одна команда, если SMART поддерживается, то добавляем -s. Если он не поддерживается или уже включён, то этот аргумент можно убрать.

Дополнительно, можно указать следующие параметры -a или —all, чтобы получить еще больше информации о накопителе, или -x и —xall, чтобы просмотреть информацию в том числе и об остальных параметрах накопителя.

Как проверить все открытые файлы пользователем или процессом в Linux

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

Лимит ядра Linux

Узнать текущее значение максимального количества файловых дескрипторов, определяемое ядром Linux можно командой:

# cat /proc/sys/fs/file-max

Этот лимит может быть изменён без перезагрузки системы (начинает действовать сразу и действует до перезагрузки):

# echo "1221724" > /proc/sys/fs/file-max

Чтобы требуемое значение использовалось постоянно, то есть действовало и после перезагрузки, его необходимо определить в конфиг.файле :

sysclt.conf
...
fs.file-max=1221724
...

Методика подсчёта открытых файлов

Для получения информации о количестве всех открытых файлов всеми процессами в Linux некоторые «знатоки» предлагают использовать команду типа

# lsof | wc -l

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

Поэтому проще для получения общего числа открытых файлов использовать данные ядра Linux

# cat /proc/sys/fs/file-nr

Первое число — общее количество занятых/используемых на данный момент времени файловых дескрипторов.

Второе число — количество выделенных процессам, но не используемых в данный момент дескрипторов.

Третье число — максимальное количество открытых дескрипторов

Примеры получения данных

Получить список TOP-20 процессов с самым большим количеством открытых файловых дескрипторов:

# for x in `ps -eF| awk '{ print $2 }'`; \
 do echo `ls /proc/$x/fd 2> /dev/null | \
 wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`; \
 done | sort -n -r | head -n 20

Подсчитать количество открытых файлов в разрезе процессов (в первой колонке будет выведен PID процесса, во второй количество открытых файлов этим процессом):

# ps aux | sed 1d | awk \
 '{print "fd_count=$(lsof -p " $2 " | wc -l) && echo " $2 " $fd_count"}' | \
 xargs -I {} bash -c {}

Посмотреть открытые файловые дескрипторы во всех процессах для отдельно взятого пользователя, например «apache»

# lsof -u apache

Подсчитать количество открытых файлов в каждом процессе для отдельно взятого пользователя:

# lsof -u apache | awk '{print $2}' | sort | uniq -c | sort -n

Тоже самое, только в реальном режиме времени:

# watch 'lsof -u vdsm | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'

Посмотреть открыте файловые дескриптры для отдельно взятого процесса (по PID процесса):

# lsof -p 9189

Подсчитать количество файловых дескриптров для отдельно взятого процесса:

# lsof -p 9189 | wc -l

Дополнительные источники информации:

Блог Дениса Тулякова — Количество открытых файлов, сокетов

Проверено на следующих конфигурациях:

Версия ОС
Debian GNU/Linux 8.10 (jessie)

Автор первичной редакции:Алексей Максимов
Время публикации: 09.06.2018 11:18

1. Команда монтирования

Команда mount используется для монтирования файловых систем .

Но ввод команды без параметров приводит к выводу списка всех смонтированных файловых систем, а также устройств, на которых они расположены. Таким образом, мы можем использовать это как средство обнаружения этих устройств.

  крепление 

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

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

Жесткие диски обозначаются по имени, обычно называемому «sd», за которым следует буква, начинающаяся с «a» для первого диска, «b» для второго диска и т. Д. Разделы идентифицируются путем добавления 1 для первого раздела и 2 для второго раздела и так далее.

Таким образом, первый жесткий диск будет sda, а первый раздел на этом диске будет называться sda1. Жесткие диски соединяются через специальные файлы устройств (называемые блочными файлами) в / dev и затем монтируются где-то в дереве файловой системы.

Эта команда использовала для фильтрации информации о любом диске, который начинается с «sd».

  крепление |  grep / dev / sd 

Вывод содержит один жесткий диск в машине, который использовался для исследования этой статьи.

Ответ от говорит нам, что диск / dev / sda смонтирован в / (корень дерева файловой системы) и имеет файловую систему ext4. «Rw» указывает, что он был смонтирован в режиме чтения-записи

Relatime — это схема, используемая процедурами обновления меток времени файла. Время доступа не записывается на диск, если только время изменения (mtime) или время изменения (ctime) файла не является более поздним, чем время последнего доступа, или время доступа (atime) не превышает пороговое значение, определенное системой. , Это значительно сокращает количество обновлений диска, которые необходимо выполнять для часто используемых файлов.

«Errors = remount-ro» указывает, что при наличии достаточно серьезных ошибок файловая система будет перемонтирована в режиме только для чтения.

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

  крепление |  Меньше 

Прокрутите вывод, пока не увидите файловые системы, которые связаны с / dev специальными файлами.

3. Команда df

Команда сообщает о емкости диска, а также об используемом и свободном пространстве .

Введите в командной строке и нажмите Enter.

  Д.Ф. 

Выходная таблица показывает:

  • Файловая система : имя этой файловой системы.
  • 1K-блоков : количество блоков 1K, доступных в этой файловой системе.
  • Использовано : Количество блоков размером 1 КБ, которые были использованы в этой файловой системе.
  • Доступно : количество блоков размером 1 КБ, которые не используются в этой файловой системе.
  • Использовать% : объем пространства, используемого в этой файловой системе, в процентах.
  • Файл : имя файловой системы, если оно указано в командной строке.
  • Установлено : точка монтирования файловой системы.

Чтобы удалить ненужные записи из вывода, используйте параметр (исключить). Эта команда предотвратит перечисление записей устройства цикла.

  df -x squashfs 

Компактный вывод намного проще разобрать на важную информацию.

Требуется некоторая установка

Большинство из этих команд включены в ваш дистрибутив Linux по умолчанию. Ubuntu, Fedora и Manjaro использовались в качестве репрезентативной выборки дистрибутивов из основных ветвей семейств Debian, Red Hat и Arch.

Все три дистрибутива необходимы для установки , которая предоставляет команду . также нужно было установить на всех трех.

Чтобы установить и , используйте эти команды.

Ubuntu:

  sudo apt-get установить procinf 
  sudo apt-get установить lsscsi 

Fedora:

  sudo dnf установить procinfo 
  sudo dnf установить lsscsi 

Manjaro

  Судо Пакман -Сю Проинфо 
  судо пакман -сю лссши 

Удивительно, но Manjaro — известный как простой дистрибутив — был дистрибутивом, в котором большинство команд, которые мы собираемся посмотреть, были предустановлены.

Ubuntu и Fedora требовалась установка , а Fedora также требовалась установка и .

Ubuntu:

  sudo apt-get установить hwinfo 

Fedora:

  sudo dnf установить hwinfo 
  sudo dnf установить lshw 
  sudo dnf установить hdparm 

Проверка диска на битые секторы Linux

Для поиска битых секторов можно использовать утилиту badblocks. Если вам надо проверить корневой или домашний раздел диска, то лучше загрузится в LiveCD, чтобы файловая система не была смонтирована. Все остальные разделы можно сканировать в вашей установленной системе. Вам может понадобиться посмотреть какие разделы есть на диске. Для этого можно воспользоваться командой fdisk:

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

В этом примере я хочу проверить раздел /dev/sda2 с файловой системой XFS. Как я уже говорил, для этого используется команда badblocks. Синтаксис у неё довольно простой:

$ sudo badblocks опции /dev/имя_раздела_диска

Давайте рассмотрим опции программы, которые вам могут понадобится:

  • -e — позволяет указать количество битых блоков, после достижения которого дальше продолжать тест не надо;
  • -f — по умолчанию утилита пропускает тест с помощью чтения/записи если файловая система смонтирована чтобы её не повредить, эта опция позволяет всё таки выполнять эти тесты даже для смонтированных систем;
  • -i — позволяет передать список ранее найденных битых секторов, чтобы не проверять их снова;
  • -n — использовать безопасный тест чтения и записи, во время этого теста данные не стираются;
  • -o — записать обнаруженные битые блоки в указанный файл;
  • -p — количество проверок, по умолчанию только одна;
  • -s — показывать прогресс сканирования раздела;
  • -v — максимально подробный режим;
  • -w — позволяет выполнить тест с помощью записи, на каждый блок записывается определённая последовательность байт, что стирает данные, которые хранились там раньше.

Таким образом, для обычной проверки используйте такую команду:

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

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

Если на разделе используется файловая система семейства Ext, например Ext4, то для поиска битых блоков и автоматической регистрации их в файловой системе можно использовать команду e2fsck. Например:

Параметр -с позволяет искать битые блоки и добавлять их в список, -f — проверяет файловую систему, -p — восстанавливает повреждённые данные, а -v выводит всё максимально подробно.

Получите список разделов с командой fdisk

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

Флаг-l используется с fdisk, чтобы перечислить таблицу разделов указанного устройства и затем выйти. Когда Вы не упоминаете, что любое имя устройства, fdisk использует устройства, упомянутые в/proc/partitions файле.

-l опция показывает таблицы разделов для указанных устройств, и затем выйдите. Если никакие устройства не даны, упомянутые в/proc/partitions (если это существует), используются. Введите следующую команду как sudo:

$ sudo fdisk -l

Когда Вы прокручиваете вниз далее, вывод отображает таблицу разделов следующим образом:

Это — что различный столбец укажите:

Имя устройства устройства/логического раздела

Начальная загрузка — * входит в систему, этот столбец указал, что соответствующий раздел содержит информацию о загрузчике, которая используется для начальной загрузки системы

Запустите — стартовый сектор, выделенный этому разделу.

Конец — конечный сектор, выделенный этому разделу.

Секторы — количество секторов, выделенных для этого, делит.

Размер — размер раздела.

Идентификатор — идентификатор, используемый системой для этого, делит

Введите — тип файла или система, используемая этим разделом.

9. Команда lshw

Команда список устройств, подключенных к вашему компьютеру. Это еще одна команда с большим количеством вывода. На тестовом компьютере было сгенерировано более 260 строк информации. Мы пропустим это еще раз.

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

  Судо ЛШВ |  Меньше 

Вот запись для CD-ROM с интерфейсом SCSI. Как видите, информация для каждого устройства очень подробная. читает большую часть своей информации из различных файлов в / proc.

Если вы хотите более короткий и менее подробный вывод, вы можете использовать опцию .

4. Команда fdisk

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

Мы будем использовать опцию (list) для вывода списка таблиц разделов. Поскольку вывод может быть очень длинным, мы передадим вывод из через . Поскольку может изменять таблицы разделов диска, мы должны использовать .

  sudo fdisk -l 

Прокручивая вы сможете идентифицировать аппаратные устройства. Вот запись для жесткого диска sda. Это физический жесткий диск объемом 10 ГБ.

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

  sudo fdisk -l / dev / sda 

Мы получаем вывод значительно уменьшенной длины.

Опции команды

-a, —all – включить фиктивные, дублированные, недоступные файловые системы. -B, —block-size=РАЗМЕР – указывает размер блоков, в которых выводится объем. Например, -BM выводит устанавливает размер блока в 1,048,576 байт (1 Мб). —total — вывести общий итог -h, —human-readable вывести размеры в читаемом формате (например, 1K 234M 2G). -H, —si – аналогично -h, но для подсчета килобайт, мегабайт и т.д. используются степени 1000, а не 1024. -i, —inodes – вывести информацию об индексных дескрипторах (инодах), а не использовании блоков. -k – задать размер блока 1 Кб (аналогично —block-size=1K). -l, —local – выводить данные только для локальных файловых систем —no-sync – не выполнять синхронизацию перед получением информации об использовании пространства, опция по умолчанию. -P, —portability – использовать формат вывода POSIX. —sync – выполнить синхронизацию перед получением информации об использовании пространства. -t, —type=ТИП – выводить только файловые системы указанного типа. -T, —print-type – показывать тип файловой системы. -x, —exclude-type=ТИП – исключить из вывода файловые системы указанного типа. —o=, —output= – выводить поля из списка. Если список не задан, выводятся все доступные поля. Значения указываются через запятую, возможные варианты следующие: source – источник точки монтирования, обычно устройство; fstype – тип файловой системы; itotal – общее количество инодов; iused – количество используемых инодов; ipcent – процент используемых инодов; size – общее количество блоков; used – количество используемых блоков» avail – количество свободных блоков; pcent – процент использованных блоков; itotal – общее количество инодов; iused – количество используемых инодов; ipcent – процент используемых инодов; file – имя файла (если было указано); target – точка монтирования. —help – отобразить справочную информацию и выйти. —version – отобразить информацию о версии и выйти.

Размеры выводятся в единицах, указанных в опции –block-size или заданных в переменных среды DF_BLOCK_SIZE, BLOCK_SIZE и BLOCKSIZE. Если эти переменные не заданы, используются блоки по 1024 байта (или по 512, если задана переменная среды POSIXLY_CORRECT).

Размер –block-size указывается целым числом с опциональной единицей измерения (например, 10M = 10*1024*1024). Единицы измерения в степенях 1024 – K, M, G, T, P, E, Z, Y, в степенях 1000 – KB, MB и т.д.

Общая модель файловой системы

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

Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла. В файловой системе UNIX, например, уникальным именем является номер индексного дескриптора файла (i-node).

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

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

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

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

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

Список подключенных устройств Linux

В операционной системе Linux используется особенная философия управления. Все объекты, в том числе и устройства считаются файлами. При подключении какого-либо устройства к системе для него создается файл в каталоге /dev/.

Обычно, после того, как вы подключили любую USB флешку или другой накопитель к системе с установленным окружением рабочего стола, устройство автоматически монтируется в папку /media/имя_пользователя/метка_устройства/, а затем вы можете получить доступ к файлам из устройства в этой папке. Тем не менее, бывают ситуации, когда вам нужно вручную монтировать USB и тогда такой вариант не поможет.

Файлы всех устройств находятся в каталоге /dev/. Здесь вы можете найти файлы sda, hda, которые представляют из себя жесткий диск, а также файлы sda1 или hda1, которые позволяют получить доступ к разделам диска. Мы уже подробно рассматривали это все в статье работа с устройствами Linux. Вы можете посмотреть список всех устройств в каталоге /dev/ с помощью команды:

Теперь осталось понять какие из этих файлов устройств принадлежат USB устройствам и каким устройствам именно.

Скользящие или фиксированные релизы

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

  • Скользящие релизы (rolling);
  • Фиксированные релизы (fixed).

Эти способы работают немного по-разному и вам нужно понимать это прежде чем мы перейдем к версии Linux. Скользящие релизы не имеют точек выпуска нового релиза, новые возможности, исправления и улучшения постоянно добавляются в официальный репозиторий и их получают пользователи. Такой подход используется в ArchLinux, Gentoo и OpenSUSE Thumbleweed. Поэтому у таких дистрибутивов нет версий, они всегда имеют самую новую версию после того, как было выполнено обновление пакетов. Но у них есть минус — это более низкая стабильность по сравнению с фиксированными релизами, которые можно хорошо протестировать.

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

2. Команда lsblk

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

  lsblk 

Выход показывает:

  • Имя : название блочного устройства
  • Maj: Min : основной номер показывает тип устройства. Минимальное количество — это номер текущего устройства из списка устройств этого типа. 7: 4, например, означает шлейф устройства № 4.
  • РМ : независимо от того, съемное устройство или нет. 0 означает нет, 1 означает да.
  • Размер — это емкость устройства.
  • РМ : независимо от того, доступно устройство только для чтения или нет. 0 означает нет, 1 означает да.
  • Тип : тип устройства, например, loop, dir (каталог), диск, rom (CD-ROM) и т. Д.
  • Точка монтирования : где смонтирована файловая система устройства.

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

Эта команда заставит игнорировать устройства loop (7) и cd room (11).

  lsblk -e 7,11 

Результаты теперь содержат только жесткий диск sda.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: