Европейский Университет в Санкт-Петербурге
Опубликован: 19.10.2005 | Доступ: свободный | Студентов: 1763 / 169 | Оценка: 4.31 / 3.82 | Длительность: 18:28:00
Лекция 7:

Настройка производительности системы

Решение проблем:изменение размеров разделов диска

Если необходимо увеличить размер конкретного раздела, то есть два пути: физически изменить размер раздела или создать метаустройство, которое физически будет состоять из нескольких разделов на одном или нескольких дисках, но система будет его считать одним логическим разделом. Второй путь напоминает создание Volume Set в системах Windows.

Чтобы физически изменить размер раздела, надо, чтобы на диске вслед за этим разделом было свободное пространство, еще не отданное ни одному разделу. Если там есть какой-то другой раздел, то его придется удалить, предварительно сохранив нужные данные из него. После этого потребуется выполнить резервное копирование всех данных увеличиваемого раздела в какой-то каталог другого раздела, удалить старый раздел, создать на его месте новый, больший, с помощью команды newfs, и затем восстановить файлы из резервной копии. Этот метод рекомендован для использования в любых системах UNIX. Однако он требует значительных затрат времени и дискового (или ленточного, в зависимости от того, где вы создаете резервную копию) пространства.

Второй способ годится только для 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, интерпретируется как общее число секторов новой файловой системы на каждом этапе и должно быть кратно размеру цилиндра в секторах. Иначе говоря, файловая система должна содержать целое число цилиндров.

Подробнее об ограничениях, связанных с размером разделов, рассказано в руководстве по newfs и growfs.

Представим себе, что требуется увеличить размер раздела /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 	device	mount	FS	fsck	mount	mount
#to mount 	to fsck	point	type	pass	at boot	options
/dev/md/dsk/d8	/dev/md/dsk/d8	/export	ufs	2	yes	-

Демонтируем /export и снова монтируем его (при монтировании будет использовано новое устройство из /etc/vfstab ):

umount /export
mount /export

Запускаем growfs для расширения файловой системы на новый раздел:

growfs -M /export/dev/md/rdsk/d8

Ключ M нужен программе growfs для того, чтобы можно было увеличить размер смонтированной файловой системы. В процессе изменения размера запись в файловую систему блокируется программой growfs.

Файл /etc/lvm/md.tab содержит таблицу метаустройств, которая служит файлом настроек для запуска программы metainit при старте системы.

Ограничения при работе с growfs

С помощью growfs можно расширять только файловые системы UFS (не важно, смонтированные они или несмонтированные). Расширенная файловая система не может быть уменьшена. Расширение файловой системы невозможно, если:

  • на задействованном в ней устройстве находится файл учета запущенной системы acct, или
  • включена система безопасности на уровне C2 и файл журналирования находится на расширяемом устройстве, или
  • на ней находится локальный файл свопинга, или
  • эта файловая система монтируется в каталог /usr или корневой каталог или является активным разделом свопинга.