Халабия Р.Ф. Администрирование вычислительных систем и сетей (1088254), страница 3
Текст из файла (страница 3)
Однако он требует значительных затрат времени и дискового(или ленточного, в зависимости от того, где вы создаете резервную копию)пространства.Второй способ годится только для Solaris (другие коммерческие системыUNIX имеют свои собственные средства решения этой проблемы, которыездесь необсуждаются).Метаустройство создаетсякомандойmetainit.Программа growfs, которая служит для увеличения размера файловой системы,можетмодифицироватьтаблицуиндексныхдескрипторовидругиеуправляющие структуры так, чтобы можно было работать с увеличеннойфайловой системой без потери старых файлов. Увеличение возможно толькопосле создания метаустройства, причем как для смонтированной, так и длянесмонтированной файловой системы, в том числе даже во время работыдругих пользователей с этой файловой системой.Синтаксис команды growfs:/usr/sbin/growfs[-M точка_монтирования] [параметры_newfs][rawdevice]Аргументы команды growfs обозначают: точка_монтирования - точка монтирования файлововй системы, которуютребуется расширить.
При этом на время расширения произойдет блокировкафайловой системы функцией lockfs(); параметры_newfs - те же параметры, которые может принимать программаnewfs при создании новой файловой системы, см. описание newfs; rawdevice - имя файла прямого доступа для метаустройства в каталоге/dev/md/rdsk.Команда growfs увеличивает размер файловой системы до размерауказанного раздела.Увеличение размера раздела выполняется посредством добавлениянового раздела к метаустройству и последущего запуска growfs.
Приувеличении размера зеркала (т.е. уже существующего метаустройства среализованным зеркалированием, или, иначе говоря, с RAID уровня 1) следуетвначале увеличить каждую из частей зеркала с помощью metaattach, какпоказано ниже, а затем - всю файловую систему с помощью growfs.Особым случаем является расширение журналируемого метаустройства(trans metadevice), которое состоит из двух устройств - главного ижурналирующего. Увеличивается только размер главного устройства, а затемgrowfs "напускается" на само журналируемое метаустройство. Вообще говоря,можно увеличить и размер журналирующего устройства, но это не являетсяобязательным.Програма growfs на время модификации файловой системы блокируетзапись в нее.
Можно сократить время блокировки файловой системы, выполняяее увеличение по частям. Например, мы хотим увеличить файловую системуразмером 2 Гбайт до размера 8 Гбайт. Можно это делать поэтапно, добавляя по16 Мбайт за этап, дав ключ s для явного указания размера общего размерановой файловой системы на каждом этапе. Число, следующее за ключом s,интерпретируется как общее число секторов новой файловой системы накаждом этапе и должно быть кратно размеру цилиндра в секторах.
Иначеговоря, файловая система должна содержать целое число цилиндров.Представимсебе,чтотребуетсяувеличитьразмерраздела/dev/dsk/c1t0d0s3, на котором расположена файловая система /export. Для этогонам потребуется вначале преобразовать этот раздел в метаустройство,посколькудобавлятьдополнительноепространствоможнотолькокметаустройству. Допустим, добавлять к существующему разделу мы будемпока еще пустой, не содержащий файловой системы раздел /dev/dsk/c2t0d0s3:metainit -f d8 2 1 c1t0d0s3 1 c2t0d0s3Эта команда вызывает объединение разделов /dev/dsk/c1t0d0s3 и/dev/dsk/c2t0d0s3 в новое метаустройство d8. Теперь изменяем /etc/vfstab так,чтобы файловая система /export монтировалась на метаустройство d8:#device#to mount/dev/md/dsk/d8devicemount FSfsckto fsckpoint type pass/dev/md/dsk/d8 /export ufsmount mountat boot options2yes-Демонтируем /export и снова монтируем его (при монтировании будетиспользовано новое устройство из /etc/vfstab):umount /exportmount /exportЗапускаем growfs для расширения файловой системы на новый раздел:growfs -M /export/dev/md/rdsk/d8Ключ M нужен программе growfs для того, чтобы можно было увеличитьразмер смонтированной файловой системы.
В процессе изменения размеразапись в файловую систему блокируется программой growfs.Файл /etc/lvm/md.tab содержит таблицу метаустройств, которая служитфайлом настроек для запуска программы metainit при старте системы.Ограничения при работе с growfsС помощью growfs можно расширять только файловые системы UFS (неважно, смонтированные они или несмонтированные). Расширенная файловаясистеманеможетбытьуменьшена.Расширениефайловойсистемыневозможно, если:- на задействованном в ней устройстве находится файл учета запущеннойсистемы acct, или- включена система безопасности на уровне C2 и файл журналированиянаходится на расширяемом устройстве, или- на ней находится локальный файл свопинга, или- эта файловая система монтируется в каталог /usr или корневой каталогили является активным разделом свопинга.Чтобы не искать номер индексного дескриптора по имени файла каждыйраз, когда к файлу происходит обращение, система кэширует имена файлов икаталогов вместе с номерами их виртуальных индексных дескрипторов.
Этотспециальный кэш называется кэш поиска имен каталогов (directory namelookup cache - DNLC).При открытии файла DNLC вычисляет соответствующий индексныйдескриптор по имени этого файла. Если имя уже находится в кэше, то оноотыскивается очень быстро, поскольку не происходит сканирования каталоговнадиске.Каждаязапись DNLCв ранних версиях системыимелафиксированный размер, поэтому пространство для имени файла не моглопревышать 30 символов, а более длинные имена файлов не кэшировались.Начиная с Solaris 7, это ограничение снято. Если каталог содержит несколькотысяч записей, поиск номера индексного дескриптора конкретного файлаотнимет много времени. В том случае, когда в системе открыто много файлов, аколичество файлов в рабочих каталогах велико, высокая частота успешныхобращений к DNLC очень важна.Кэш имен каталогов не нуждается в настройке, хотя его размер зависит отзначения maxusers.
По умолчанию он определяется как (17xmaxusers)+90 (вSolaris 2.5.1) или 4x(maxusers + max_nprocs)+320 (в Solaris 2.6 и выше). Другиепараметры, на которые тоже оказывает влияние maxusers, обсуждены в лекции10.Команда vmstat –s показывает частоту успешных попаданий в DNLC смомента начала работы системы.Если частота промахов велика (попаданий обычно не должно бытьменьше 90%), следует подумать об увеличении размера DNLC. Проверим этотпоказатель работы системы командой vmstat -s |grep 'name lookups'Количество запросов к DNLC в секунду можно получить из поля namei/sв выводе команды sar -a:А теперь запустим операцию, которая точно требует многократногообращения к DNLC: find / -name "top" &sar -a 1 5vmstat -s |grep 'name lookups'При интенсивных файловых операциях и доступе ко многим каталогамодновременно эффективность кэша имен каталогов снижается, но по-прежнемуостается достаточно большой.Присозданиифайловойсистемыдляиндексныхдескриптороввыделяется отдельное пространство на разделе.
Индексные дескрипторы хранятсвойства файла, в том числе теневые индексные дескрипторы - расширенныеправа доступа. Количество индексных дескрипторов - это неизменяемаявеличина. Отсутствие свободных индексных дескрипторов в файловой системеприводит к невозможности записывать файлы в те каталоги, которыерасположены в этой файловой системе. Количество свободных индексныхдескрипторов можно определить, проанализировав вывод команды df -e:Так как размер кластера файловой системы, как правило, составляет 8Кбайт, драйвер файловой системы при записи собирает данные в блоки по 8Кбайт для большей эффективности использования дискового пространства.При записи файлов значительных размеров драйвер файловой системыгруппирует несколько блоков для того, чтобы вместо серии мелких операцийввода-вывода выполнить одну большую по объему операцию.Количество группируемых блоков равно параметру файловой системыmaxcontig .
В версиях, предшествующих Solaris 8, этот параметр по умолчаниюбыл равен семи, и, таким образом, операция ввода-вывода происходилаодновременно с семью последовательными блоками и позволяла одновременнозаписать порцию данных размером 56 Kбайт. Такое значение по умолчаниюсвязано с ограничениями конструкции в раннем оборудовании Sun: системы,основанные на архитектуре sun4, не способны передавать за одну операциюболее 64 Kбайт. В архитектурах sun4c, sun4m, sun4d и sun4u таких ограниченийнет.
В Solaris 8 значение по умолчанию изменилось и составляет 16 блоков (128Kбайт).Изменениепараметраmaxcontigможетсерьезноповлиятьнапроизводительность файловой системы, при работе с которой преобладаютпоследовательные операции по записи средних и больших (более несколькихдесятков килобайт) файлов на диск. Если при доступе к файловой системебольшинство операций ввода-вывода совершается с данными малого размера,то изменение maxcontig не принесет особой пользы.Размер кластера файловой системы задается с помощью ключа -С blocksкоманды newfs при создании файловой системы.