Файловая система: разделы, файлы и каталоги
Оптимизация размеров разделов
Вопрос об оптимизации дисковой подсистемы обычно встает как неизбежный результат отсутствия детального планирования системы в целом. Поэтому первым правилом, которое следует соблюдать системному администратору, желающему видеть свою систему быстрой и надежной, будет "планируй все заранее".
Когда требуется установить новый сервер Solaris, стоит подумать, чем этот сервер будет занят. В современном мире задачи компьютеров меняются быстрее, чем оборудование. Если пять лет назад почтовый сервер, обслуживающий сто пользователей, мог работать на медленном компьютере с диском 1 Гбайт, то нынче с почтой связано намного больше задач, чем просто прием, передача и хранение. Современный почтовый сервер для тех же ста пользователей принимает почту, проверяет ее на вирусы, блокирует спам, возможно, выполняет контекстный анализ письма для фильтрации спама и только после этого сохраняет его на диске. Объемы передаваемой почты тоже существенно возросли. Письма часто отправляются в формате HTML, а многие адресаты вкладывают в письма не только текстовые документы, но и фотографии, музыкальные файлы и видеоклипы. Поэтому, планируя свой новый почтовый сервер с запасом, вы не ошибетесь. Сейчас средний пользователь хранит в своем почтовом ящике несколько сотен мегабайт информации, следует ожидать, что в ближайшее время придется оценивать возможную нагрузку на файловую систему почтового сервера исходя из 5-10 Гбайт на каждого пользователя. Это не относится к серверам, которые только передают почту, но не хранят почтовые ящики пользователей.
Для передачи и приема нескольких писем в секунду придется установить новый компьютер с процессором Pentium IV, если на сервере будет запущена программа контекстного анализа писем для фильтрации спама (например, spamasassin ). Объем памяти, естественно, тоже должен быть достаточным для одновременного запуска десятков копий программы sendmail или ее аналога.
Из этого видно, что характер работы сервера надо планировать еще до начала его установки. Во время установки следует задать верные размеры файловых систем. Это избавит вас от необходимости модифицировать их размеры в дальнейшем.
В Solaris размер корневой файловой системы / вполне может быть менее 3 Гбайт. Даже с учетом возможного обновления системы этого достаточно. Но файловая система /usr, куда будут устанавливаться все новые пакеты, должна быть спланирована с запасом. Если работа сервера будет связана с большой дисковой нагрузкой (кэширование http-запросов, хранение файлов или почты), то для этих специфических целей (например, кэш http-запросов) можно выделить отдельный раздел и назначить ему такой размер, который соответствует вашим потребностям.
Надо будет учесть такие факторы, как возможный рост потребностей, требуемая производительность (для подсистем SCSI лучше установить шесть дисков по 9 Гбайт, чем один размером 54 Гбайт, - так будет быстрее) и не забыть учесть "запас", который создает система на каждом разделе1См. "минимальное свободное пространство ". .
Как узнать, сколько места осталось на диске?
Оценить, как в текущий момент используется диск, поможет программа df:
df / (/dev/dsk/c0d0s0): 1787406 blocks 419477 files /boot (/dev/dsk/c0d0p0:boot): 19452 blocks -1 files /proc (/proc ): 0 blocks 2896 files /etc/mnttab (mnttab ): 0 blocks 0 files /dev/fd (fd ): 0 blocks 0 files /var/run (swap ): 1265832 blocks 30240 files /tmp (swap ): 1265832 blocks 30240 files /export/home (/dev/dsk/c0d0s7 ): 7647080 blocks 481212 files
Чтобы получить более удобную картину, в которой размер занятых блоков приводится в килобайтах, следует дать команду df -k:
df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0d0s0 1857844 964142 837967 54% / /dev/dsk/c0d0p0:boot 11234 1508 9726 14% /boot /proc 0 0 0 0% /proc Mnttab 0 0 0 0% /etc/mnttab Fd 0 0 0 0% /dev/fd Swap 632924 20 632904 1% /var/run Swap 633208 304 632904 1% /tmp /dev/dsk/c0d0s7 3823549 9 3785305 1% /export/home
Команда
df -o i
сообщит о количестве свободных и занятых индексных дескрипторов на разделе. Обратите внимание на то, что в других вариантах UNIX это делается с помощью команды
df -i
Для оценки размеров подкаталогов любого каталога используйте du. Например, для определения того, сколько места на дисках занимают подкаталоги корневого каталога, дайте команду du -s /*:
du -s /* 2 /bin 3011 /boot 87255 /cdrom 1424 /core 3068 /dev 76 /devices 6262 /etc 26 /export 6 /floppy 4 /format.log 1 /home 20702 /kernel 2 /lib 16 /lost+found 2 /Mail 2 /mnt 1 /net 2 /nsmail 14 /opt 3822 /platform 730131 /proc 50 /qq 2 /qqqq 34154 /sbin 640 /tmp 46 /TT_DB 1811752 /usr 46138 /var 0 /vol 19 /xfn
В этой команде ключ -s указывает, что следует выдать суммарные значения по всем подкаталогам, а аргумент /* требует, чтобы была посчитана статистика по всем подкаталогам и файлам корневого каталога. Без указания ключа -s программа du сообщит о том, сколько места занимает каждый из "листьев" дерева каталогов, т.е. выдаст длинный и подробный список всех подкаталогов вообще, включая подкаталоги подкаталогов подкаталогов...
Минимальное свободное пространство
При создании файловой системы часть раздела диска резервируется на всякий случай. Эта доля задается параметром minfree (параметр free при запуске программы mkfs ) и по умолчанию составляет 10% общего объема файловой системы. Ко "всяким случаям" относят переполнение диска, т.е. превышение выделенного лимита пространства размещенными на разделе файлами, необходимость срочно найти свободный дисковый блок, когда диск почти заполнен, и тому подобное. В современных системах, когда файловые системы размером в сотни гигабайт - явление обычное, 10% свободного объема составляет значительный объем дискового пространства.
Чтобы уменьшить такие колоссальные издержки, значение minfree достаточно установить равным 1%. Кстати, при установке Solaris 9 на мой ноутбук ThinkPad 390X с диском размером 4 Гбайт, по умолчанию файловая система была создана именно с таким minfree. Несмотря на это, документация на mkfs_ufs утверждала, что 10% является значением по умолчанию. При создании файловой системы минимальное свободное пространство можно задать так:
mkfs_ufs -o free=1
или так:
newfs -m 1
Изменить параметры файловой системы UNIX можно с помощью программы tunefs.
После того как на диске осталось свободного пространства менее, чем указано в minfree, запись на диск сможет выполнить только root.