Файловая система: идеология и структура
man lofiadm (как работать с образом диска)
Для работы с образом диска, записанным в файл, может оказаться полезной программа lofiadm, которая позволяет настроить обращение к файлу как к блочному устройству.
Эта программа управляет драйвером lofi, который позволяет связать файл с блочным псевдоустройством. После этого содержимое файла будет доступно посредством обращения к файлу этого блочного устройства. У системы будет полное впечатление, что это и есть устройство и его можно монтировать с помощью mount, проверять на корректность записей на нем с помощью fsck и т.п.
Программу lofiadm следует использовать для добавления таких псевдоустройств, удаления связи файла и псевдоустройства и вывода информации о таких устройствах в системе.
Например, можно смонтировать образ компакт-диска стандарта ISO, лежащего в файле ex.iso:
lofiadm -a /home/ivan/ex.iso /dev/lofi/1
Затем можно смонтировать новое устройство в системе:
mount -F hsfs -o ro /dev/lofi/1 /mnt
и проверить, видно ли оно:
df -k /mnt Filesystem kbytes used avail capacity Mounted on /dev/lofi/1 512418 512418 0 100% /mnt
Для демонтирования псевдоустройства и его удаления из системы следует дать следующие команды:
umount /mnt lofiadm -d /dev/lofi/1
Обратите внимание на возможность создания файловой системы на псевдоустройстве и появлении устройства прямого доступа (rlofi, аналогично rdsk) после выполнения lofiadm -a:
lofiadm -a /export/home/test /dev/lofi/1 newfs /dev/rlofi/1 newfs: construct a new file system /dev/rlofi/1: (y/n)? y /dev/rlofi/1: 71638 sectors in 119 cylinders of 1 tracks, 602 sectors 35.0MB in 8 cyl groups (16 c/g, 4.70MB/g, 2240 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 9664, 19296, 28928, ...
К файлу, который смонтирован в качестве псевдоустройства с помощью lofiadm, нельзя обращаться напрямую, как к файлу. Это аналогично тому, что нельзя напрямую обращаться к диску для записи файла, а следует делать это через драйвер файловой системы. Надлежит устанавливать такие права доступа к файлам, монтируемым как устройства, чтобы предотвратить несанкционированный доступ к ним как к обычным файлам.
После перезагрузки связь файла и псевдоустройства теряется; если требуется сделать ее постоянной, надо написать скрипт, который будет запускаться при загрузке и добавлять соответствующее псевдоустройство в систему, а затем его монтировать.
Возможность управлять псевдоустройствами зависит от прав доступа к файлу /dev/lofictl. По умолчанию правом монтирования и демонирования псевдоустройств обладает только root.
Дерево каталогов
Файлы в UNIX разложены по каталогам. Каталоги образуют древовидную структуру: есть корневой каталог, который обозначается знаком " / " (слэш), и его подкаталоги. В каждом из последних есть свои подкаталоги и т.д. Ограничений на число файлов в каталоге нет. Разные каталоги ("ветви" дерева каталогов ) могут размещаться на разных дисках, это незаметно для пользователя. Чтобы обратиться к файлу, не нужно знать о том, на каком физическом устройстве или разделе диска он записан. Это значит, что лихорадочный поиск по дискам С:, D: E:, K:, R:, Y: не знаком человеку, работающему с UNIX. Он лихорадочно ищет потерянные файлы в густой кроне UNIX-каталогов, начиная от корня.
Между прочим, забавно, что уже много лет все упорно называют деревом структуру каталогов, у которой корень находится наверху, а его ближайшие отростки-подкаталоги называются каталогами верхнего уровня: Кто из нас видел деревья, растущие кронами вниз?
Монтирование и демонтирование файловых систем
При старте системы после загрузки ядра и запуска процесса init инициируется проверка тех файловых систем, которые следует проверить и смонтировать автоматически. Их список содержится в файле /etc/vfstab3Внимание! В других системах UNIX этот файл имеет другое название - /etc/fstab. . Типичный файл /etc/vfstab выглядит так:
#device device mount FS fsck mount Mount #to mount to fsck point type pass at boot Options # Fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/dsk/c0d0s1 - - swap - no - /dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 / ufs 1 no - /dev/dsk/c0d0p0:boot - /boot pcfs - no - /dev/dsk/c0d0s7/ dev/rdsk/c0d0s7 /export/home ufs 2 yes - swap - /tmp tmpfs - yes -
Те файловые системы, которые в столбце mount at boot отмечены как yes, будут проверены и смонтированы при старте системы. Файловую систему можно смонтировать в любой момент, надо лишь указать ей в качестве точки монтирования пустой каталог, который уже создан и доступен в системе. Операцию монтирования и демонтирования файловой системы может осуществить только root.
Монтирование файловой системы выполняется командой mount:
mount device mount_point
Например
mount /dev/dsk/c0d1s0 /test
Для монтирования файловой системы, которая описана в /etc/vfstab, можно не указывать имя файла устройства, а сразу указать точку монтирования. Такую "сокращенную" команду mount можно применять только для монтирования файловых систем, перечисленных в /etc/vfstab.
При монтировании файловой системы следует явно указывать ее тип, если он отличается от UFS.
Демонтирование файловой системы делает ее недоступной для чтения и записи, файлы, которые расположены на демонтируемом разделе, конечно же, остаются на месте. Просто после демонтирования они не видны: точка монтирования снова превращается в пустой каталог, как это было до монтирования в нее диска или раздела.
Нельзя демонтировать занятую файловую систему. Занятой считается такая файловая система, файл которой открыт в настоящее время кем-то из пользователей, или каталог которой является текущим каталогом кого-то из работающих в системе пользователей.
Чтобы все-таки демонтировать файловую систему, следует найти и устранить причину ее занятости. Часто для этого достаточно просто самому выйти из того каталога, который собираешься демонтировать. Это типичная ошибка системного администратора: пытаться демонтировать /usr в тот момент, когда находишься в /usr/admin или подобном подкаталоге, который лежит в том же разделе, что и /usr.
Демонтирование файловой системы выполняется командой umount:
umount mount_point
Например
umount /mnt
Монтирование дискет и прочих сменных носителей
Для монтирования дискет, компакт-дисков и других сменных носителей в Solaris имеется специальная программа vold (Volume Management daemon). Она следит за тем, вставлен ли компакт-диск, дискета или, к примеру, zip-диск в соответствующее устройство. Как только диск оказывается в устройстве, vold вызывает программу volcheck, чтобы проверить, действительно ли в привод установили новый диск, а затем программу rmmount для монтирования диска в заранее определенную точку монтирования. Программа rmmount выясняет тип файловой системы вставленного диска, и, если этот тип поддерживается, монтирует диск. Список предопределенных точек монтирования можно посмотреть с помощью
man rmmount
Поведение rmmount определяется файлом конфигурации /etc/rmmount.conf.
Программу rmmount можно запускать и вручную. Кроме того, можно использовать команду volrmmount для форсирования операций перемонтирования или демонтирования файловой системы на сменном носителе. Более подробно об этой команде говорится в man volrmmount.
Проверка файловых систем
Широко известная из систем Windows программа scandisk имеет аналог в UNIX - программу fsck. В Solaris fsck по умолчанию проверяет все файловые системы, перечисленные в /etc/vfstab. Обычно имеет смысл запускать fsck вручную с указанием конкретной файловой системы:
fsck /dev/dsk/c0d0s7
Программа fsck проверяет файловую систему и, если находит ошибки, исправляет их. Обнаружив ошибки, об исправлении которых она не может принять самостоятельное решение, fsck выдает сообщение об этом на терминал, с которого ее запустили, и ждет решения администратора.
Если в настоящий момент файловая система смонтирована, fsck не начинает ее проверку. Это правило можно обойти, если потребовать от fsck обращаться к диску как к символьному устройству, а не как к блочному:
fsck /dev/dsk/c0d0s7 /dev/dsk/c0d0s7 is a mounted file system, ignored fsck /dev/rdsk/c0d0s7 ** /dev/rdsk/c0d0s7 ** Currently Mounted on /export/home ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 2 files, 9 used, 3823540 free (20 frags, 477940 blocks, 0.0% fragmentation)
Упражнения
- Подключите новый IDE-диск, дайте команду format. Виден ли диск системе?
- Выполните программу devfsadm, снова запустите format. Стал ли виден новый диск? Почему?