Файловые системы (ФС) в Linux:

ext3,ext4, XFS, JFS - журналируемые файловые системы, позволяющие восстановить данные в случае сбоя (перед выполнением операции, журналируемая файловая система записывает операцию в журнал, а после выполнения операции удаляет запись из журнала. После сбоя файловая система по журналу выполняет занесенные действия. Стоит обратить внимание на ext4.

ФС ext4 - увеличена производительность и надежность, а максимальный размер раздела доведен до 1024 петабайт (1 эксбибайт = 2^60 байт). Максимальный размер файла составляет 16 Тбайт. Введены экстенты для выделения ресурсов и более эффективной организации данных, каждый экстент содержит информацию о том, где находится большой список непрерывных блоков памяти (сокращено количество метаданных). Для файлов небольшого размера в экстентах применяется уровневый подход, а для больших файлов используются деревья экстентов. Один индексный дескриптор (inode) может ссылаться на четыре экстента, каждый из который может ссылаться на другие индексные дескрипторы и т.д. Используются контрольные суммы журналов для увеличения надежности. Количество каталогов не ограничивается. Производится дефрагментация "на лету". Временные метки (timestamp, от 1970 года, POSIX-время) устанавливаются с точностью до наносекунды (предел до 25 апреля 2514 года). Является прямо и обратно совместимой с ext3, причем, если ФС ext4 смонтировать как ext3, то новая ФС будет работать без экстентов, что снизит ее производительность.

В Linux нет расширений файлов, а только имена (например, bloknot.txt является именем), максимальная длина 254 символа. Система чувствительна к регистру (различаются имена File.txt, FILE.txt и т.п.). Разделение символов пути осуществляется при помощи прямого слеша.

Файлы устройств, расположенные в каталоге /dev (от devices) позволяют обращаться к определенным устройствам, например:

```File System /dev/sdx # файл жесткого диска или USB-накопителя, где x - буква диска (a,b,c..) /dev/sdxN # файл устройства раздела на жестком диске, N - номер раздела /dev/mouse # файл устройства мыши /dev/modem # файл устройства модема (ссылка на файл ttySn) /dev/ttySn # файл последовательного порта, n - номер порта (ttyS0 соответствует COM1, ttyS1 - COM2 и т.д.) /dev/stderr # файл порта вывода ошибок (ссылка на /proc/self/fd/2) /dev/stdin # файл порта ввода (ссылка на /proc/self/fd/0) /dev/stdout # файл порта вывода (ссылка на /proc/self/fd/1)


Устройства бывают **блочными **\(параллельный порт, жесткий диск\) и **символьными **\(последовательный порт - передача данных от процессора устройству происходит побитно\)
. Доступ к другим устройствам и их разделам можно получить после монтирования, после чего можно обратиться к содержимому как к вложенному каталогу в /mnt \(или /mount\), при указании соответствующей точки монтирования.

**Стандартные каталоги:
**

```File System
/bin — содержит стандартные программы Linux (cat, cp, ls, login и т. д.);
/boot — каталог загрузчика, содержит образы ядра и Initrd (RAM-диска инициализации), может содержать конфигурационные и вспомогательные файлы загрузчика;
/dev — содержит файлы устройств;
/etc — содержит конфигурационные файлы системы;
/home — содержит домашние каталоги пользователей;
/lib — библиотеки и модули;
/lost+found—  восстановленные  после  некорректного  размонтирования  файловой системы файлы и каталоги;
/media — в современных дистрибутивах содержит точки монтирования сменных
носителей (CD-, DVD-, USB-накопителей);
/misc — может содержать все, что угодно, равно как и каталог /opt;
/mnt — обычно содержит точки монтирования;
/proc —  каталог  псевдофайловой  системы  procfs,  предоставляющей  информацию о процессах;
/root — каталог суперпользователя root;
/sbin —  каталог  системных  утилит,  выполнять  которые  имеет  право  пользователь root;
/tmp — каталог для временных файлов;
/usr —  содержит пользовательские  программы, документацию,  исходные  коды
программ и ядра;
/var —  постоянно  изменяющиеся  данные  системы,  например  очереди  системы
печати, почтовые ящики, протоколы, замки и т. д.
/opt - альтернативное программное обеспечение и прочее

Монтирование файловых систем (mount/unmount):

Для работы с любой файловой системой (внешние накопители и прочее) необходимо примонтировать её к корневой ФС. Для замены необходимо будет размонтировать ФС и извлечь носитель, далее установить новый и заново смонтировать ФС (например, для замены диска). При монтировании выполняется синхронизация буферов ввода/вывода и ФС. Размонтировать ФС можно только когда ни один процесс ее не использует. При выключении/перезагрузке размонтирование всех ФС выполняется автоматически. Монтирование необходимо выполнять с root правами (sudo).

mount [опции] <устройство> <точка монтирования>    # монтирование
# точка монтирования - каталог, через который осуществляется доступ к ФС (каталог должен существовать на момент монтирования)
umount <устройство/точка монтирования>    # размонтирование
mount /dev/sdb1 /mnt/drive1    # монтирование ФС sdb1 в папку drive1
[опции]:
    -t <ФС>    # задать тип ФС (явно указать на тип ФС)
    mount -t iso9660 /dev/hdc /mnt/cdrom    # ext2/3/4 (Linux)/iso9660 (CD)/vfat (FAT/FAT32)/ntfs(только чтение)/ntfs-3g(чтение и запись при помощи модуля ntfs-3g)
    -r    # монтирование в режиме "только для чтения"
    -w    # монтирование в режиме "чтение/запись" (для ФС поддерживающих запись по умолчанию
    -a    # монтирование всех ФС, указанных в файле /etc/fstab (кроме тех, для которых указано noauto), при загрузке вызывается команда mount -a
# если раздел ntfs был неправильно размонтирован, то нужно использовать опцию 
-o force
sudo mount -t ntfs-3g /dev/sdb1 /media/usb -o force

Файлы устройств находятся в каталоге /dev, причем их наименования из данного каталога необходимо брать для монтирования в качестве <устройство>, после принятия udev (менеджер устройств Linux) и глобального уникального идентификатора устройств (UUID) все дисковые устройства называются /dev/sdx, где x - буква диска. Первичные разделы дисков нумеруются от единицы (sda1, sda2 и т.п.), а логические разделы, которые содержатся в расширенном разделе, нумеруются с пяти (на жестком диске может быть максимум 4 первичных раздела, либо 3 первичных и один расширенный, в котором максимум 4 логических раздела и т.п.)

find /dev | grep sd    # поиск файлов жестких дисков (либо hd)
/sbin/fdisk   /dev/sdx    # узнать номер раздела при помощи таблицы разделов диска, далее ввести p, для выхода q

В большинстве случаев CD/DVD-приводы и USB-накопители автоматически монтируются к каталогу /media/<ID накопителя>. Для монтирования разделов при загрузке их необходимо прописывать в файл /etc/fstab:

<устройство> <точка монтирования> <тип ФС> [опции] <флаг РК> <флаг проверки>
    # флаг РК - флаг резервного копирования, если 1, то программа dump заархивирует данную ФС при создании резервной копии.
    # флаг проверки - устанавливает, будет ли данная ФС проверяться на наличие ошибок программой fsck (если ФС была размонтирована некорректно или если достигнуто максимальное число операций монтирования для данной ФС)
    # опции - содержит важные параметры ФС, представленные ниже:
        auto    # Файловая система должна монтироваться автоматически при загрузке. Опция используется по умолчанию, поэтому ее указывать не обязательно
        noauto    # Файловая система не монтируется при загрузке системы (при выполнении команды mount -a), но ее можно смонтировать вручную с помощью все той же команды mount
        defaults    # Используется стандартный набор опций, установленных по умолчанию
        exec    # Разрешает запуск выполняемых файлов для данной файловой системы. Эта опция используется по умолчанию
        noexec    # Запрещает запуск выполняемых файлов для данной файловой системы
        ro    # Монтирование в режиме "только чтение"
        rw    # Монтирование в режиме "чтение/запись". Используется по умолчанию для файловых систем, поддерживающих запись
        user    # Данную файловую систему разрешается монтировать/размонтировать обычному пользователю (не root)
        nouser    # Файловую систему может монтировать только пользователь root. Используется по умолчанию
        umask    # Определяет маску прав доступа при создании файлов. Для файловых систем не Linux'а маску нужно установить так: umask=0
        utf8    #Применяется только на дистрибутивах, которые используют кодировку UTF-8 в качестве кодировки локали. В старых дистрибутивах (где используется KOI8-R) для корректного отображения русских имен файлов на Windows-разделах нужно задать параметры iocharset=koi8-u,codepage=866

# например: 
/dev/sdc /mnt/cdrom auto umask=0,user,noauto,ro,exec 0 0

UUID и файл /etc/fstab:

UUID - Universal Unique Identifier, например:

/dev/sda6
UUID=1f049af9-2bdd-43bf-a16c-ff5859a4116a / ext3 defaults 0  1

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

ls -l /dev/disk/by-uuid/

Идентификатор устройства остается постоянным вне зависимости от типа подключения устройства к контроллеру, поэтому длинные имена называют постоянным (persistent name), причем в подобных случаях могут изменяться короткие имена ФС.

Однозначно идентифицировать раздел диска можно:

  • по UUID (by-uuid):
UUID=45AE-84D9  /media/sda1  vfat  defaults,utf8,umask=007, gid=46 0 0
  • по аппаратному идентификатор (by-id):
/dev/disk/by-id/scsi-SATA_WDC_WD1600JB-00_WD-WCANM7959048-part7 swap defaults 0 0
  • по метке (by-label):
LABEL=/    /    ext3    defaults   1 1

# Соответственно просмотр длинных имен:
ls –l /dev/disk/by-uuid
ls –l /dev/disk/by-id
ls –l /dev/disk/by-label
  • по пути (by-path):
# имя генерируется по sysfs

ls -lF /dev/disk/by-label     # узнать метки разделов

# установить метки:
e2label /dev/XXX <метка>        # ext2/ext3/etx4
reiserfstune -l <метка> /dev/XXX    # ReiserFS
jfs_tune -L <метка> /dev/XXX    # JFS
xfs_admin -L <label> /dev/XXX    # XFS
ntfslabel /dev/XXX <метка>     # NTFS

В файле /etc/fstab можно использовать длинные имена в любом формате.

Можно указывать имена устройств в виде:

/dev/disk/by-uuid/*, 
/dev/disk/by-id/*,
/dev/disk/by-label/*,  
# можно  использовать  параметры  UUID=идентификатор  или LABEL=метка.

Монтирование USB-Flash дисков:

ls –l /dev/disk/by-id | grep usb    # поиск длинного имени устройства по его id
mount /dev/sdb1 /mnt/flash    # монтирование данного устройства

Режимы работы файловой системы ext:

  • journal - медленный, в системный журнал записывается всё, и это позволяет максимально восстановить файловую систему после сбоя
  • ordered - последовательный режим, в журнал заносится информация только об изменении метаданных (служебных данных ФС), используется по умолчанию.
  • writeback - быстрый, режим обратной записи (без журналирования).

# Режим ordered используется по умолчанию,
# поэтому ничего указывать не нужно
/dev/sda1 / ext3 defaults 1 0
# На этом разделе важные данные — используем режим journal
/dev/sda2 /var ext3 data=journal 1 0
# Здесь ничего важного нет — режим writeback
/dev/sda3 /opt ext3 data=writeback 0 0
mount -a     # заново смонтировать все ФС, чтобы изменения вступили в силу

Перейти на ext4 можно без потери данных в любой момент.

sudo tune2fs -O extents,uninit_bg,dir_index /dev/имя_устройства
# на момент ввода устройств должно быть размонтировано
sudo fsck -pf /dev/имя_устройства     # проверка ФС
# далее смонтируем ФС
mount -t ext4 /dev/имя_устройства /точка_монтирования
mount -t ext4 /dev/disk/by-uuid/UUID-устройства /точка_монтирования
# исправим строку в /etc/fstab
UUID=UUID-раздела  /точка ext4  defaults,errors=remount-ro,relatime
  0  1
# при изменении корневой ФС редактируем /boot/grub/menu.lst (добавим опцию rootfstype=ext4)
title    Linux
root   (hd0,1)
kernel  /boot/vmlinuz-2.6.28.1 root=UUID=879f797c-944d-4c28-a720-
249730705714 ro quiet splash rootfstype=ext4
initrd    /boot/initrd.img-2.6.28.1
quiet

Если нужно преобразовать в ext4 корневую ФС, то команду необходимо вводить с LiveCD, поддерживающего ext4.

Особые команды mkfs/fsck/chroot и параметр --bind:

# создание файловой системы
mkfs.ext2 /dev/hdal
mkfs.<имя_файловой_системы>    #если поддерживает ядро
mkfs.ext3  
mkfs.vfat  
mkfs.reiserfs
# проверка и восстановление ФС (вначале необходимо размонтировать данную ФС, для 
# проверки корневой ФС нужно загрузитьсяс LiveCD)
fsck <раздел>
fsck /dev/sda5
# при появлении "плохих" блоков 
fsck -c <раздел>    # пометить "плохие" блоки
# сделать резервную копию всех важных данных и перенести данные на новый накопитель
# проверить новый диск программой badblocks
fsck.vfat <раздел>    # проверка ФС формата vfat
# для восстановления таблицы разделов можно использовать программу gpart
# смена корневой ФС (загрузиться с LiveCD)
chroot <раздел, содержащий корневую файловую систему Linux> 
chroot /dev/sda5    # загрузит ядро Linux с LiveCD и сделает подмену корневой ФС
# далее ввести команду записи загрузчика (например, lilo)
# монтирование каталога к каталогу (mount и параметр --bind)
mount --bind <исходный_каталог> <каталог_назначения>

Создание ISO-образа (mkisofs):

Для записи данных на CD/DVD следует создать отдельный каталог, поместить в него все необходимые данные, затем создать по этому каталогу ISO-образ и поместить его на диск.

mkisofs -jcharset кодировка /каталог | cdrecord -опции    # запись данных на диск без создания промежуточного ISO образа
mkisofs -r -jcharset utf8 -o ~/cd.iso ~/cd    # создание ISO образа по каталогу ~cd и размещение его в домашнем каталоге ~

Создание и монтирование файлов с ФС:

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

dd if=/dev/zero of=/file.fs bs=1k count=100000    # создать пустой файл ~100Мбайт
mkfs.ext2 -F /file.fs    # создать в данном файле ФС типа ext2
mount -t ext2 -o loop file.fs /mnt/disk    # смонтировать файл к каталогу /mnt/disk

results matching ""

    No results matching ""