Монтирование и демонтирование файловой системы
Категория: Файловая система | Автор: admin | 30-09-2009, 04:36 | Просмотров: 4495

Файловое дерево формируется из отдельных частей, называемых файловыми системами, каждая из которых содержит один каталог и список его подкаталогов и файлов. Термин "файловая система", по сути, имеет два значения. С одной стороны, это составная часть файлового дерева, а с другой — все файловое дерево и алгоритмы, с помощью которых UNIX управляет им. Как правило, значение термина становится ясным из контекста.

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

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

 

 

# mount /dev/sd1c /users
 

 

монтирует файловую систему, размещенную на устройстве /dev/sd1c, под именем /users. После монтирования можно с помощью команды Is /users посмотреть, что содержит эта файловая система.

Список файловых систем, которые были смонтированы пользователями, хранится в файле /etc/fstab, /etc/vfstab или /etc/checklist, в зависимости от операционной системы. Благодаря этому становятся возможными автоматическая проверка (fsck) и монтирование (mount) файловой системы на этапе начальной загрузки, а также выполнение коротких команд наподобие mount /usr. Точное местоположение монтируемой файловой системы ищется в файле fstab (см. параграф 8.3).

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

Во FreeBSD допускается применение команды umount -f, которая принудительно демонтирует занятую файловую систему. Это не лучший выход из положения, потому что программа, работающая с данной файловой системой, может зависнуть или начать вести себя ненормально. Использовать команду umount -f можно только на свой страх и риск.

В Solaris 8 также имеется команда umount -f, хотя в более ранних версиях системы аналогичного результата можно было добиться в два этапа. Сначала выполнялась команда lockfs -h точка_монтирования, которая ставила на файловую систему "жесткую блокировку". Затем вызывалась обычная команда umount.

Если ядро "жалуется" на то, что демонтируемая файловая система занята, можно запустить команду fuser, которая позволит узнать, кто работает с файловой системой. Команда raser точка_монтирования выводит идентификаторы всех процессов, обращающихся к файлам или каталогам указанной файловой системы. К этим идентификаторам добавляются специальные символьные коды обозначающие выполняемые действия. Например:

 

 

% fuser –c /usr

/usr: 157tm 315ctom 474tom 5049tom 84tm 496ctom 490tm 16938c 16902ctm 358ctom 484tm

 

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

с текущий каталог процесса расположен в файловой системе;

о открыт файл;

t выполняется поограмма;

m подключен файл (обычно совместно используемая библиотека);

r корневой каталог процесса находится в файловой системе (задается с помощью команды chroot).

 

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

% ps -fp "157 315 5049"

 

UID

PID

PP1D

С

STIME

TTY

TIME

CMD

root

5049

490

0

Oct 14

?

0:00

/usr/bin/Xll/xdm

root

157

1

0

Jun 27

?

5:26

/usr/sbin/named

lp

315

1

0

Jun 27

?

0:00

/usr/lib/lpsched

Список идентификаторов взят в кавычки, чтобы интерпретатор shell передал его команде ps как один аргумент.

Команда fuser может также выдавать статистику использования отдельных файлов, а не всей файловой системы. Синтаксис ее вызова в этом случае должен быть таким:

 

fuser -f имя_файла

 

Указав опцию -k, можно заставить команду fuser послать всем найденным процессам сигнал KILL. Это очень опасное действие, и для его выполнения следует иметь привилегии пользователя root (им можно стать с помощью команды sudo).

В RedHat команда fuser, разработанная Вернером Альмсбергером (Werner Almesberger), использует вместо опции -c опцию -m. Если нужно получить статистику по отдельным файлам, просто опустите опцию -m. Имеется также полезная опция -v, которая заставляет команду fuser выдавать результаты своей работы в стиле команды ps:

 

% fuser -mv /usr

 

USER

PID

ACCESS

COMMAND

/usr

root

1

. . . .m

init

 

root

125

. . . .m

apmd

 

root

274

. . . .m

portmap

 

root

321

. . . .m

syslogd

Bo FreeBSD нет команды fuser, но есть команда fstat с аналогичными возможностями.

Альтернативой команде fuser является бесплатная программа lsof ("list of open files" — список открытых файлов), которая формирует список дескрипторов открытых файлов по процессам и именам файлов. Программу lsof написал Вик Эйбелл (Vic Abell) из университета Пердью, штат Индиана. Получить ее можно на FTP-узле

 

ftp://vic.cc.purdue.edu/pub/tools/unix/lsof

 

Она работает во всех рассматриваемых нами системах.



 (голосов: 1)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page