Skip to content
andyceo edited this page May 27, 2022 · 4 revisions

Ext4

Данная страница посвящена файловой системе Ext4 (и в некоторой степени ее предшественницам - Ext2 и Ext3). Описаны создание, диагностика, исправление ошибок, тонкая настройка, обновление и включение/выключение некоторых опций и их описание.

Создать файловую систему на блочном устройстве

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

В примерах ниже используется файловая система на устройстве /dev/sdXN, где X - это буква диска, а N - номер раздела. Для диска без разделов нужно указывать только букву диска, например /dev/sda.

sudo mke2fs -t ext4 -L myext4fs -m 0 /dev/sdXN

@todo опции -O, -c, -cc

Диагностика и починка файловой системы ext4

В случае, если вы точно знаете, что у вас какие-то проблемы с конкретной файловой системой ext4, неважно, с ней ли самой, или из-за дисковых ошибок, то можно починить ее следующими действиями. Имейте в виду, что плохие секторы в этом варианте, будут помечены на уровне файловой системы, а не самого диска (SMART reallocation).

Узнаем, замонтирована файловая система или нет, и если да, то куда:

mount

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

.....
.....
/dev/sda1 on /media/your/mounted/path type ext4 (rw,nosuid,nodev,uhelper=udisks2)
.....
.....

поэтому, чтобы продолжить, систему надо сначала отмонтировать:

sudo umount /media/your/mounted/path

После этого, можно начать восстановление файловой системы с помощью утилиты e2fsck:

sudo e2fsck -cty /dev/sda1

Обратите внимание, что нужно указывать именно раздел (/dev/sda1), а не устройство (/dev/sda). Указание устройства вмето раздела приведет к подобной ошибке:

e2fsck 1.42.9 (4-Feb-2014)
ext2fs_open2: Bad magic number in super-block
e2fsck: Superblock invalid, trying backup blocks...
e2fsck: Bad magic number in super-block при попытке открыть /dev/sdc

The superблок could not be read or does not describe a valid ext2/ext3/ext4
ФС.  If the устройство is valid and it really contains an ext2/ext3/ext4
ФС (and not swap or ufs or something else), then the superблок
is corrupt, and you might try running e2fsck with an alternate superблок:
  e2fsck -b 8193 <устройство>
or
  e2fsck -b 32768 <устройство>

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

sudo e2fsck -cty /dev/mapper/your-logical-volume

Эта команда просканирует диск с помощью утилиты badblocks, и затем попытается исправить ошибку. Утилита badblocks просто помечает в существующей файловой системе не заремапленные винчестером bad блоки (либо у винчестера уже закончились резервные сектора, что очень плохо для его дальнейшей жизни, либо система успела наткнутся на bad блок, который винчестер ещё не успел спрятать, что значит что скорее всего такой сектор после ремапа будет нормально читаться и писаться). На не отформатированных разделах не работает. Если раздел переформатировать - то нужно будет заново запускать эту утилиту. Или форматировать сразу с опцией отключающей быстрое форматирование, в этом случае форматирование будет происходить с верификацией и все бэдблоки будут занесены в карту диска, до следующего форматирования. Такая система отметки bad блоков в файловых системах существует со времен появления первых дискет и винчестеров (в те времена винчестеры не умели прятать bad блоки автоматом, да и вообще не умели их прятать).

Также можно запустить более жесткое сканирование на плохие блоки (запись случайных паттернов в блок) с помощью команды:

sudo e2fsck -cc -ty /dev/sda

Опции -cc и -c определяют режим сканирования на плохие сектора.

Также, можно рассмотреть флаги -cfpv команды e2fsck:

sudo e2fsck -cfpv /dev/sda

Параметр c ищет плохие блоки и добавляет их в список, f принуждает сделать проверку ФС, p чинит все что может быть безопасно починено, и v это подробный режим, чтобы вы видели прогресс.

Вышеуказанная команда пройдется по диску, починит его и пометит плохие сектора для ФС, чтобы в будущем она не писала туда данные.

Вывод команды будет примерно следующим:

ubuntu@ubuntu:~$ sudo e2fsck -cfpv /dev/sda1
/dev/sda1: Updating bad block inode.

191888 inodes used (0.32%, out of 60792832)
 60 non-contiguous files (0.0%)
 194 non-contiguous directories (0.1%)
 # of inodes with ind/dind/tind blocks: 0/0/0
 Extent depth histogram: 144736/6
 4952754 blocks used (2.04%, out of 243168768)
 11 bad blocks
 1 large file

110870 regular files
 16787 directories
 55 character device files
 25 block device files
 0 fifos
 2 links
 64140 symbolic links (47056 fast symbolic links)
 2 sockets
------------
 191881 files
ubuntu@ubuntu:~$

Различные сценарии (кейсы)

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

      sudo tune2fs -l /dev/sdXN
    

    то же самое:

      sudo dumpe2fs -h /dev/sdXN  # дополнительно показывает информацию о журнале? @todo проверить
    
  • примонтировать файловую систему:

      sudo mkdir /mnt/myext4fs
      sudo mount /dev/sdXN /mnt/myext4fs
    
  • посмотреть список плохих блоков, о которых знает файловая система:

      sudo dumpe2fs -b /dev/sdXN
    
  • выключить журнал файловой системы:

      sudo tune2fs -O "^has_journal" /dev/sdXN
    

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

  • включение и отключение какой-либо произвольной опции файловой системы:

      sudo tune2fs -O OPTION /dev/sdXN  # включить OPTION
      sudo tune2fs -O "^OPTION" /dev/sdXN  # выключить OPTION
    
  • проверить файловую систему и пометить плохие блоки (щадящий медленный режим, см. man e2fsck для справки по флагам)

      sudo e2fsck -fccky /dev/sdXX
    
  • удалить файл, который находится в слишком длинной папке и имеет неправильные атрибуты, тем не менее, fsck считает что с файловой системой все в порядке:

      sudo debugfs -w -R "rm some/long/directory/file" /dev/vg/lv
    

    Также внутри кавычек можно использовать команду ls (@todo и проверить другие команды)

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

По мере развития файловой системы Ext4, появляются новые возможности, которых не было на момент ее создания. Поэтому давно существующие файловые системы можно обновить, путем включения ранее выключенных опций (ядро должно поддерживать новые опции). Даже обновление файловых систем Ext2 и Ext3 до версии Ext4 можно сделать путем активирования соответствующих опций файловой системы.

Опция Описание
64bit Позволяет файловой системе быть больше 2^32 блоков
uninit_bg Дескриптор группы блоков будет защищен контрольными суммами. Устарел из-за metadata_csum
metadata_csum Включает контрольные суммы для метаданных. Взаимно исключающий с uninit_bg. Предпочтительный
fast_commit Может улучшить производительность. Требует ядро 5.10+ (Ubuntu 22.04+)
inline_data Позволяет хранить мелкие файлы прямо в inode. Можно указать только при создании

Включить ту или иную опцию можно по процедуре:

  • остановить все программы, использующие данную ФС, и отмонтировать ее: sudo umount /dev/sdXN
  • проверить и оптимизировать ФС: sudo e2fsck -Df /dev/sdXN
  • включить опцию: sudo tune2fs -O OPTION /dev/sdXN
  • проверить что опция включена: sudo dumpe2fs -h /dev/sdXN | grep features:

Ссылки

Устройства хранения: диски, блочные устройства, файловые системы

В этом разделе находится информация об устройствах хранения, файловых системах и утилитах для работы с ними.

Clone this wiki locally