Файловые системы (ФС) в 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