Часто обращаю внимание на то, что простые вопросы чаще всего мало освещены в интернете. Наверное, это потому, что все гуру уверены, что никто никогда не задаст таких глупых вопросов, ведь это знает каждый. Но моя практика показала, что именно такие мелкие простые вопросы самые частые не только у новичков, а и у серьезных администраторов, которым просто не приходилось иметь с этим дела. Даже серьезные администраторы не делают это каждый день, а, чтобы не забыть, ведут некую шпаргалку для себя, никому в этом не признаваясь. Давайте все исправим. Сейчас Вы узнаете, как за 5 минут добавить жесткий диск в FreeBSD. Итак. Сначала будет преведена полная инструкция для понимания процесса, а в конце будет краткий список действий , которое будет содержать лишь список команд в качестве шпаргалки.

Подробная инструкция с пояснениями

Выбор имени жесткого диска

Для начала нужно определить имя устройства, которое мы только что добавили. В этом нам поможет следующая команда:

Geom disk list

Или же вот такая команда:

Camcontrol devlist

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

До установки нового устройства мы знали, что наша система установлена на ada0, значит по логике вещей наш новый диск ada1. Это вы можете определить по названию нового устройства, его серийному номеру или же объему.

Теперь проверим, имеется ли разметка на нашем новом диске

Gpart show ada1

Диск не имеет никакой разметки.

Удаление существующей разметки

Если диск уже использовался и есть необходимость удалить с него разметку, просто выполните:

Gpart destroy -F ada1

Создание разметки GPT

Для начала мы должны создать разметку диска. Крайне рекомендую забыть о MBR и перейти на новую, более удобную и функциональную - GPT.

Создаем разметку GPT на диске, затем проверяем, что вышло:

Gpart create -s gpt /dev/ada1 gpart show ada1

Теперь у нас диск имеет разметку GPT. Из вывода можно увидеть, что абсолютно весь диск, начиная с LBA 34 и заканчивая LBA 8388541 пуст. LBA 0−33 - зарезервированы системой под таблицу разделов.

Допустим, нам необходимо создать два раздела на этом диске:

  • swap - раздел подкачки
  • data - раздел типа ufs для хранения каких либо, необходимых нам, данных.

Создание разделов (слайсов)

Если установка производится на современные жесткие диски, у которых размер сектора = 4 кб, то при создании разделов (партиций) необходимо использовать выравнивание. Можно поступить двумя способами: 1) если указываем параметры раздела в блоках, то номер блока вводить кратным 8, например: -b 40 ; 2) если указываем размер раздела в байтах, либо не указываем вообще начало и размер, использовать параметр -a 4k , который подгонит начало и конец раздела под секторы, размером 4 кб. Так как мы в данном примере производим тестовую установку на виртуальный жесткий диск, то этого можно не делать. В любом случае перед созданием разделов нужно точно знать размер сектора вашего накопителя, иначе это выльется жуткими тормозами в работе.

Теперь создадим разделы. Для этого существует команда gpart add с различными параметрами. Первый параметр -t - указывает на тип создаваемой файловой системы. В нашем случае будет использовано два типа: freebsd-swap и freebsd-ufs. Далее идут два необязательных параметра: -b - указывает на номер LBA, начиная с которого необходимо создать раздел. Если не указать данный параметр, то раздел будет создан автоматически с первого свободного LBA. -s - указывает на размер раздела в LBA. Размер одного блока LBA = 512 байт. Желательно указывать в количестве блоков LBA, но можно и в кило/мега/гига/… байтах (суффикс k/M/G). Если не указать данный параметр, то раздел будет создан до максимально возможного LBA в пределах пустой области. Также в качестве параметра можно указать метку раздела, например: -l swap1 - в этом случае будет создана метка /dev/gpt/swap1, по которой можно более удобно обращаться к разделу. Последним обязательным параметром идет путь к диску. В нашем случае: /dev/ada1.

Давайте создадим два раздела, а затем посмотрим, что у нас получилось. Первый раздел будем создавать без указания начального LBA, но с указанием размера 1 Гб (2097152 блоков). Второй раздел создадим без указания начального LBA и без указания размера - таким образом он будет создан на всем свободном пространстве.

Gpart add -t freebsd-swap -s 2097152 /dev/ada1 gpart add -t freebsd-ufs /dev/ada1 gpart show ada1

Размер можно указывать в байтах, а не блоках. Это значительно удобней. Единственный минус - система не всегда может корректно рассчитать количество блоков. Возможны случаи, когда на диске останется пустовать некоторое количество блоков при указании размера раздела в байтах.

Создание файловой системы (форматирование)

Разделы типа swap форматировать нет необходимости. А вот разделы типа ufs перед использованием должны быть отформатированы. Правильнее сказать: на них должна быть создана файловая система.

Для того, чтобы создать файловую систему на втором разделе, достаточно выполнить следующую команду:

Newfs -U /dev/ada1p2

В данном случае использовался параметр -U - он говорит о том, что в данной файловой системе должен использоваться механизм Soft Updates. Вы можете не использовать этот параметр, чтобы не включать данный механизм.

Монтирование

Следующим шагом будет монтирование разделов. Для начала, чтобы не забыть, добавим наши новые разделы в /etc/fstab. Мой файл после редактирования выглядит вот так:

Для того, чтобы перемонтировать все разделы согласно файла /etc/fstab, просто выполним команду:

Mount -a

Как видно из вывода, раздел /dev/ada1p2 смонтирован. Теперь посмотрим, что произошло с разделом SWAP. Выполним команду:

Как видно, новый раздел SWAP не смонтирован. Чтобы смонтировался SWAP, необходимо его включить специальной командой:

Swapon /dev/ada1p1

Точно так же при помощи команды swapoff нужно отключать раздел SWAP перед тем, как произвести над ним какие-то действия.

На этом все действия по добавлению нового жесткого диска в систему завершены.

Краткая инструкция

Дано : жесткий диск /dev/ada1

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

После каждого действия выполняйте gpart show , чтобы наблюдать за результатом. Последовательность действий:

  1. Удалить существующую разметку: gpart destroy -F ada1
  2. Создать новую разметку: gpart create -s gpt /dev/ada1
  3. Создать два раздела: подкачка и данные: gpart add -t freebsd-swap -s 2097152 /dev/ada1 gpart add -t freebsd-ufs /dev/ada1
  4. Создать файловую систему UFSv2 на втором разделе: newfs -U /dev/ada1p2
  5. Добавить в файл /etc/fstab строки для автомонтирования при загрузке: /dev/ada1p1 none swap sw 0 0 /dev/ada1p2 /mnt ufs rw 2 2
  6. Смонтировать новый раздел (команда монтирует все разделы из файла /etc/fstab): mount -a
  7. Включить в работу новый раздел swap командой: swapon /dev/ada1p1

На этом настройка завершена.

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

Логика файловой системы

Логически файловая система FreeBSD (как и любой Unix-системы) организована по древовидному принципу: в основании ее лежит корень (корневой каталог, обозначаемый символом / и именуемый также root-каталогом; последнее не должно путать с каталогом /root , который выполняет роль домашнего для суперпользователя).

От корневого каталога, который можно уподобить скорее стволу дерева, отходят ветви - вложенные в него подкаталоги, и побеги - обычные файлы. Последних, правда, немного: в версиях FreeBSD это некий энтропийный файл (/entropy) и файл с описанием авторских прав на систему /COPYRIGHT .

А вот подкаталогов в корневом каталоге довольно много, и некоторые из них устроены внутри весьма сложно, содержа в себе изрядное количество вложенных подкаталогов более глубоких уровней.

В принципе иерархия каталогов во всех Unix-системах похожа, поскольку регламентируется, во-первых, многолетней традицией, во-вторых - всякого рода стандартизирующими документами, в частности, FHS (Filesystem Hierarchy Standard), который ныне доступен в русском переводе (за который спасибо Виктору Костромину).

Стандарт FHS был разработан первоначально для упорядочивания структуры каталогов в многочисленных дистрибутивах Linux. И лишь позднее он был приспособлен для других Unix-подобных систем (в том числе и BSD-клана). Однако именно иерархия каталогов FreeBSD может послужить примером для образцового следования духу FHS. А буквально штучные отступления в ней от его буквы всегда функционально обусловлены.

Стандарт FHS покоится на двух основополагающих принципах - четком отделении в файловой иерархии каталогов разделяемых и неразделяемых, с одной стороны, и неизменяемых и изменяемых - с другой.

Противопоставление разделяемых и неразделяемых каталогов обусловлено изначально сетевой природой Unix вообще и FreeBSD в частности. То есть данные, относящиеся к локальной машине (например, файлы конфигурирования ее устройств) должны лежать в каталогах, отдельных от тех, содержимое которых доступны с других машин в сети, локальной или глобальной (примером чему являются не только пользовательские данные, но и программы).

Суть противопоставления неизменяемых и изменяемых каталогов легко пояснить на примере. Так, те же пользовательские программы по природе своей должны быть неизменяемыми (вернее, доступными для модификации только администратору системы, но не самому пользователю, применяющему их в своей работе). В то же время эти программы при своей работе генерируют не только файлы данных, скажем, тексты или изображения (изменяемая их природа ясна без комментариев), но всякого рода служебную информацию, типа log-файлов, временных файлов и тому подобного). Каковая и должна группироваться в каталогах, отделенных от собственно исполнимых файлов программ, необходимых для их запуска библиотек, конфигурационных файлов и т.д.

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

В Unix-системах всякий файл (в том числе и каталог) опознается системой не по ее имени, а по уникальному идентификатору его записи в таблице inodes . Существуют средства для того, чтобы эти файловые идентификаторы просмотреть. Одно из них - команда ls с опцией -i , которая выведет идентификаторы каждого именованного файла. Данная для корневого каталога -

$ ls -i /

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

2 ../ 2 ./ 2 dev/ 2 home/ 2 tmp/ 2 usr/ 2 var/ 3 cdrom/ 4 mnt/ 5 root/ 8257 dist/ 8258 bin/ 8294 proc/ 8295 sbin/ 16512 stand/ 24768 etc/ 24776 boot/

Из этого примера (относящегося к файловой системе машины, на которой эти строки пишутся) видно, что аж 7 каталогов имеют одинаковые цифровые идентификаторы, равные 2. Спрашивается, какая же здесь уникальность?

С первыми двумя элементами списка разобраться легко: ./ представляет собой обозначение текущего каталога (в данном случае корневого), а../ - каталога, родительского по отношению к текущему; а поскольку выше корня в файловой иерархии по определению ничего нет, то последний обозначает самого себя. Так что неудивительно, что./ и../ имеют один и тот же идентификатор - это разные обозначения (жесткие ссылки, или, иначе говоря, дублирующие имена) для одного и того же, корневого, каталога.

А вот то же, как кажется на первый взгляд, значение идентификатора для каталогов /dev , /home , /tmp , /usr , /var требует объяснения. Однако оно - простое: все это каталоги, в которые смонтированы самостоятельные файловые системы, либо расположенные на отдельных устройствах - дисковых партициях, как каталоги /home , /usr , /var , либо виртуальные файловые системы, не надстраивающие какое-либо реальное дисковой устройство (каталог /dev с файловой системой устройств и, в данном случае, каталог /tmp , в который смонтирована файловая система в оперативной памяти, разговор о которых еще предстоит). А поскольку таблица inodes - своя для каждой файловой системы, нет ничего удивительного в том, что корень каждой из них идентифицируется числом 2 - нумерация inodes в них идет в собственной системе отсчета.

Так вот, монтирование - это и есть включение файловой с системы в какой-либо из существующих в корневой системе каталог (не обязательно непосредственно в корне, он может быть любой степени вложенности, что проиллюстрируется чуть ниже). Без этого каталоги и файлы такой монтируемой системы просто недоступны. Это важно понимать, когда сталкиваешься выражениями вроде "создать файловую систему /usr ". Из сказанного выше очевидно, что создается-то (командой newfs) просто некая абстрактная файловая система, а свое "имя" она обретает только в момент монтирования в указанный каталог.

Интересно, что и идентификатор каталога для монтирования (он еще именуется точкой монтирования, mount point) обретается только в момент монтирования. Чтобы убедиться в этом, проведем простой эксперимент. В каталоге /mnt , предназначенном специально для монтирования временно подключаемых файловых систем) можно увидеть три подкаталога - /mnt/disk , mnt/iso , /mnt/usb (это в моей системе, я их создал для собственного удобства; изначально каталог /mnt во FreeBSD пуст). При старте системы в них ничего не монтируется, и обычное их состояние - быть пустыми. Если просмотреть их идентификаторы, то можно видеть нечто вроде такого:

$ ls -i /mnt 18 disk/ 24 iso/ 19 usb/

Теперь возьмем и смонтируем в /mnt/usb флэш-накопитель с USB-интерфейсом (именно для этого я его и предназначал) и повторим просмотр. И видим:

18 disk/ 24 iso/ 2 usb/

То есть идентификаторы каталогов, оставшихся пустыми (/mnt/disk и /mnt/iso) не изменились, а идентификатор каталога /mnt/usb волшебным образом изменился на 2. Ибо в момент монтирования он стал корневым для своей собственной файловой системы и точкой отсчета для исчисления inodes всех записанных на ней файлов.

Немного отвлечемся и вспомним о жестких ссылках, посредством которых одному и тому же inode и относящимся к нему блокам данных могут быть присвоены разные имена. Теперь понятно, почему все такие файлы-дублеры должны лежать в одной файловой системе: ведь в разных файловых системах - своя, не совпадающая, нумерация inodes , и идентифицировать их по номерам невозможно (иначе как бы система отличила каталоги /usr и /var из нашего примера - ведь имена файлов ей глубоко до лампочки). Для символических же ссылок, имеющих собственные inode (собственно, и почти ничего, кроме них) со своими идентификаторами, нумеруемыми в системе отсчета файловой системы, в которой они находятся, такого ограничения нет. И могут символические ссылки лежать где угодно (в том числе и на удаленной машине - не только на ином разделе).

Вернемся, однако, к примеру нашего корневого каталога. Из всего рассмотренного видно, что целый ряд его ветвей лежит на отдельных партициях и образует собственные файловые системы (собственно, именно для этого мы и создавали и те, и другие). И, следовательно, все они нуждаются в монтировании.

Практика монтирования

Целям монтирования служит команда mount , выполняемая либо в ходе загрузки системы автоматически, либо - вручную, из командной строки. Собственно, в полном смысле автоматически в любом случае монтируется только корневая файловая система. Не обязательно лежащая на диске - при старте с rescue CD или иного страховочного носителя она может располагаться на виртуальном диске в оперативной памяти.

Однако процесс монтирования корневой файловой системы столь же неизбежен, как победа социализма в мировом масштабе: также, как социализм, не победив в мировом масштабе, просто утрачивает способность к существованию (что мы не так давно и наблюдали), так и ОС без корневой системы существовать не может. В Linux это вызывает kernel panic mode - примерно то состояние, в которое впали наши вожди лет 20 назад. Правда, они оказались крепче Linux"а и оклемались довольно быстро - так что до сих пор нас reboot"ят (или reboot? - а мы крепчаем:)). Впрочем, к делу монтирования, которое я попытаюсь вам сейчас представить, это не относится.

Так вот, для монтирования всех файловых систем, кроме корневой, необходимо предпринять некоторые действия. Сначала мы рассмотрим, как выполнить их руками, а потом - как увековечить в соответствующих конфигурационных файлах.

Итак, команда mount . Собственно, это - целое семейство программ, каждая из которой призвана монтировать файловые системы определенных типов - не только UFS, но и любой из числа поддерживаемых FreeBSD. Список таковых весьма обширен - получить о нем представление можно, просмотрев на сей предмет каталог /sbin:

$ ls -1 /sbin/mount*

что даст нам в ответ

/sbin/mount_cd9660* /sbin/mount_devfs* /sbin/mount_ext2fs* /sbin/mount_fdescfs* /sbin/mount_linprocfs* /sbin/mount_mfs* /sbin/mount_msdosfs* /sbin/mount_nfs* /sbin/mount_nfs4* /sbin/mount_ntfs* /sbin/mount_nullfs* /sbin/mount_procfs* /sbin/mount_std* /sbin/mount_udf* /sbin/mount_umapfs* /sbin/mount_unionfs*

Каждая команда из этого списка отвечает за монтирование своего типа файловой системы, к некоторым из которых мы вернемся дальнейшем. А пока заметим только собственно /sbin/mount , предназначенную для работы с UFS и UFS2.

Вызванная из командной строки, она требует двух аргументов - имени монтируемого устройства и точки монтирования (то есть каталога, в который должна монтироваться лежащая на нем файловая система). Имя устройства должно обозначать уже размеченную на существующем BSD-слайсе патрицию с созданной на ней файловой системой UFS2 (UFS), например,

$ mount /dev/ads0d /usr

смонтирует файловую систему на указанном разделе в каталог /usr корня файлового древа. Если файловая система на устройстве не создана или имеет тип, отличный от UFS/UFS2, последует сообщение об ошибке - указание на incorrect super block: в отличие от одноименной утилиты Linux, сама по себе команда mount во FreeBSD распознавать тип файловой системы не умеет.

К точке монтирования предъявляются следующие требования: а) каталог с таким именем должен существовать к моменту монтирования, и б) быть по возможности пустым. Первое - обязательно, второе же - не совсем. Монтирование в каталог с какими-либо файлами пройдет беспрепятственно (помнится, в Linux не так давно это вызывало крах системы), но все его содержимое станет недоступным вплоть до размонтирования. И если файлы, в нем содержащиеся, имеют играют существенную роль для какой-либо подсистемы, это может вызвать всякие нехорошие последствия. Например, если содержимое каталога /tmp будет блокировано монтированием туда какой-либо файловой системы во время работы оконной системы X, результатом будет скорее всего крах X-сервера. Благо, при необходимости можно осуществить объединенное монтирование (см. ниже).

В указанной форме монтирование выполнится с некоторыми умолчальными характеристиками: файловая система будет доступна для чтения/записи в режиме т.н. noasync (том самом, при котором операции с метаданными осуществляются синхронно, а операции с данными - асинхронно). Изменить это положение можно с помощью значений опции -o . Их довольно много, однако практически главными на данном этапе для нас будут:

  • async - обеспечит полностью асинхронный режим (не смотря на грозные предупреждения в предыдущих заметках, я потом расскажу о ситуации, когда это может быть оправдано);
  • sync - напротив, включение полностью синхронного режима (правда, не очень представляю, зачем это практически нужно);
  • noatime - очень полезная опция, которая предотвращает обновление атрибута времени последнего доступа к файлам, чем немало способствует производительности;
  • rdonly - монтирует файловую систему в режиме только для чтения (иногда это бывает необходимо);
  • union - та самая опция, которая позволяет выполнить объединенное монтирование, при котором прежнее содержимое каталога mount point остается видимым; правда - с некоторыми ограничениями - см. man (8) mount .

Есть еще несколько значений опции -o , запрещающих размещение на смонтированной файловой системе файлов определенных разновидностей, например, исполняемых (-o noexec), файлов устройств (-o nodev) или файлов с т.н. битом суидности. Однако они имеют практическое значение в основном для администраторов серверов и служат целям безопасности. На настольной же машине обычной формой монтирования будет нечто вроде этой:

$ mount -o noatime /dev/ads0d /usr; $ mount -o noatime /dev/ads0e /var; $ mount -o noatime /dev/ads0f /home

Все сказанное относилось только к монтированию файловых систем FreeBSD. Однако на практике часто возникает необходимость инкорпорации в ее древо каталогов файловых систем других типов. Особенно часто это требуется для ISO9660 (обычная файловая система для всех компакт-дисков, кроме Mac"овских) и FAT"ов разного рода. В этом случае соответствующая случаю команда монтирования должна быть вызвана явно, например,

$ mount_cd9660 /dev/acd0 /cdrom

для монтирования компакта, или

$ mount_msdosfs /dev/ad## /mnt

для FAT"а любого рода (включая FAT32). Впрочем, сделать это можно и косвенно, указанием команде mount опции -t тип_файловой_системы. Так, команда

$ mount -t ext2fs /dev/ad## /mnt/linux

смонтирует файловую систему Linux (если соответствующая возможность включена в ядро). При этом стандартный mount для BSD-разделов просто подменяется командой /mount_ext2fs , призванной монтировать разделы ext2fs (и ext3fs тоже - но, естественно, без всяких функций журналирования). То есть форма

$ mount -t fstype ... ...

будет полным эквивалентом команды

$ mount_fstype ... ...

Все операции по монтированию файловых систем (в том числе и на сменных носителях) во FreeBSD требуют прав суперпользователя. В числе значений опции -o здесь, в отличие от Linux-варианта команды mount , нет параметра -o user , разрешающего монтирование обычным пользователям. Правда, есть несколько способов обойти это, о чем говорится в специальной заметке .

Настройка автоматического монтирования

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

Для автоматического монтирования программа mount запускается в процессе начальной загрузки из инициализационных сценариев. Она отыскивает свой конфигурационный файл - /etc/fstab , и монтирует все, что в нем обнаружит, за некоторыми (оговоренными ниже исключениями).

Сам по себе файл /etc/fstab генерируется автоматически при установке FreeBSD, включая все необходимые для обеспечения жизнедеятельности файловые системы. Однако в дальнейшем он может правиться вручную с целью внесения новых устройств для монтирования или дополнительных опций для уже включенных устройств.

Файл /etc/fstab - это простенькая база данных в текстовом формате (разделение полей - пробелами или табуляцией), включающая следующие поля:

  • Device - имя файла устройства, на котором расположена файловая система, аналогично первому аргументу команды mount при ручном ее использовании;
  • Mountpoint - точка монтирования (соответствует второму аргументу команды mount);
  • FStype - тип файловой системы, указываемый также, как значение опции -t ;
  • Options - дополнительные опции монтирования, аналогично значениям опции -o ;
  • Dump - условия выполнения резервного копирования файловой системы утилитой утилитой dump ;
  • Pass# - условия проверки файловой системы утилитой fsck .

В свежеустановленной FreeBSD /etc/fstab в обязательном порядке будет включать следующие записи (пример для 1-го слайса Master-диска на 1-м IDE-канале):

# Device Mountpoint FStype Options Dump Pass# /dev/ad0s1a / ufs rw 1 1 /dev/ad0s1b none swap sw 0 0

Если последовать советам резонных людей (и умолчаниям sysinstall) и выделить из состава корня некоторые ветки файловой системы, к перечисленным добавятся (при автоматической разметке слайса через sysinstall) еще и записи вроде

/dev/ad0s1d /var ufs rw 0 0 /dev/ad0s1e /usr ufs rw 0 0 /dev/ad0s1f /tmp ufs rw 0 0

/dev/ad0s1g /home ufs rw 0 0

отвечающая за файловую систему с домашними каталогами пользователей.

Очевидно, что в поле Options можно добавить любые доступные (и разумные) значения опции -o (через запятую, без пробелов), например, noatime для всех файловых систем, а для /tmp - еще и async , ведь для содержимого этого каталога не предполагается сохранение после перезагрузки.

Сказанное выше относилось к файловым системам, монтируемым при старте автоматически. Однако никто не мешает сделать в /etc/fstab записи для систем, подключаемым время от времени - в этом случае их можно будет монтировать по упрощенной схеме (именно это я и имел ввиду выше под полуавтоматическим режимом). Так, для CD-накопителя можно добавить строку (на самом деле она автоматически появляется при генерации файла /etc/fstab , если в sysinstall в качестве источника инсталляции выбирался CD)

/dev/acd0 /cdrom cd9660 ro,noauto 0 0

в которой опции, как нетрудно догадаться, предписывают отказ от монтирования при старте (noauto) и режим "только для чтения" (ro). После чего для монтирования CD достаточно будет указать только mount point -

$ mount /cdrom

или. напротив, имя файла устройства

$ mount /dev/acd0

Аналогичные записи можно сделать для всех сменных накопителей (Zip, USB-драйвов, даже флоппи-дисков) и для не-BSD разделов (FAT или Ext2fs). К слову сказать - монтировать файловые системы по упрощенной схеме можно сразу после внесения изменений в /etc/fstab , не дожидаясь перезагрузки машины.

Размонтирование

Все задействованные файловые системы перед выключением питания или перезагрузкой машины в обязательном порядке должны быть размонтированы. При корректном завершении работы это осуществляется автоматически, в результате чего каждая из доступных для записи файловых систем получает бит чистого размонтирования, записываемый в ее своем суперблоке. Наличие этого бита предотвращает при следующем запуске системы проверки файловых систем на непротиворечивость утилитой fsck .

Однако в ряде случаев (например, при подключении или отключении механизма Soft Updates или для выполнения проверки на целостность) возникает необходимость ручного размонтирования (и повторного монтирования) файловых систем, для чего служит команда umount . Она требует единственного аргумента - указания точки монтирования файловой системы, "изымаемой" из древа каталогов, например:

$ umount /tmp

или, как и в случае с полуавтоматическим монтированием, имени файла "выключаемого" устройства:

$ umount /dev/ad#s#?

Одной строкой можно размонтировать несколько файловых систем:

$ umount /usr /var /home

А можно - все смонтированные файловые системы или все файловые системы, перечисленные в файле /etc/fstab (кроме корневой), для чего потребуются опции

$ umount -A

$ umount -a

соответственно. Есть и возможность размонтирования файловых систем определенных типов путем указания значений опции -t . Так, команда

$ umount -t ufs

размонтирует только BSD-разделы, не затронув CD и всего остального, что задействовано в системе.

Файловые системы в момент размонтирования не должны использоваться, то есть не должно быть обращений к находящимся на них файлам. Так, нахождение в каком-либо каталоге файловой системы - достаточное основание для отказа в ее размонтировании (с выдачей сообщения типа device busy), почему ни одной из перечисленных выше команд и не удастся размонтировать корневую файловую систему. Поводом для отказа в размонтировании будет и считывание файла данных какой-либо программой - как и при удалении файла, открытый любым процессом дескриптор файла сделать это не позволит.

Впрочем, можно размонтировать и используемую файловую систему - для этого команду umount потребуется дать с опцией -f (от force - то есть насильно). Правда, это может привести к ошибкам, так что без острой необходимости лучше к ней не прибегать. И на корневую файловую систему опция принудительного размонтирования воздействия не окажет.

Массовое монтирование

Для продолжения работы после выполнения низкоуровневых операций с файловыми системами их потребуется смонтировать обратно. Это можно сделать не только без перезагрузки, но и без нудного индивидуального монтирования. Достаточно прибегнуть к опции -a:

$ mount -a

посредством которой будут смонтированы все файловые системы, для которых имеются записи в /etc/fstab . При этом будет предпринята попытка смонтировать и те из них, которые помечены флагом noauto . Чтобы избежать этого, можно дополнительно определить тип файловой системы. То есть команда

$ mount -a -t ufs

смонтирует только BSD-разделы, не покушаясь на CD или флэш-накопители. А можно, напротив, исключить из процесса глобального монтирования какие-то из перечисленных в /etc/fstab файловых систем, например, ненужные в данный момент FAT"ы:

$ mount -a -t nomsdosfs

Преамбула вместо заключения

К слову сказать, команда mount без опций и аргументов (а в такой форме, в отличие от всех рассмотренных выше случаев, ее может дать и обычный пользователь) выведет список смонтированных в данный момент файловых систем с указанием точки монтирования, условий оного и режима работы. Например, для машины, на которой пишутся эти строки, вывод ее будет выглядеть так:

/dev/ad0s1a on / (ufs, local, noatime, soft-updates) devfs on /dev (devfs, local) /dev/ccd0e on /var (ufs, local, noatime, soft-updates) /dev/ccd1e on /usr (ufs, local, noatime, soft-updates) /dev/ccd2e on /home (ufs, local, noatime, soft-updates) /dev/md0 on /tmp (ufs, local, noatime, async)

Первая строка вывода показывает, что партиция /dev/ad0s1a смонтирована у нас в корневом каталоге, несет на себе файловую систему UFS (конкретно в данном случае - UFS2, но в выводе команды mount они не различаются) с задействованным механизмом Soft Updates, является локальной (то есть расположена на диске этой машины - сетевые диски также монтируются командой mount) и не подвержена обновлению атрибута atime .

$ more /etc/fstab /dev/ad0s1b none swap sw 0 0 /dev/ar0s1b none swap sw 0 0 /dev/ad0s1a / ufs rw,noatime 1 1 /dev/ccd0e /var ufs rw,noatime 2 2 /dev/ccd1e /usr ufs rw,noatime 2 2 /dev/ccd2e /home ufs rw,noatime 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 /dev/da0s1 /mnt/usb ext2fs rw,noauto,noatime 0 0 /dev/md0 /tmp mfs rw,noatime,async,-s32m 2 0

то увидим, что одной из строк вывода

Devfs on /dev (devfs, local)

вообще нет соответствия среди его записей. Что это за устройства и файловые системы?

Флаг копия , равный 1, говорит о том, что опция должна быть скопирована во все фрагменты дейтаграммы. При равенстве этого флага 0 опция копируется только в первый фрагмент. Ниже приведены значения разрядов 2-битового поля класс опции (таблица 1.2.1.).

В таблице, которую вы найдете ниже, приведены значения классов и номеров опций (таблица 1.2.2.).

Наибольший интерес представляют собой опции временные метки и маршрутизация . Опция записать маршрут (RR) создает дейтаграмму, где зарезервировано место, куда каждый маршрутизатор по дороге должен записать свой IP-адрес (например, в случае утилиты traceroute). Формат опции записать маршрут в дейтаграмме представлен ниже на рис. 1.8 (предусмотрено место для записи 9 IP-адресов; к сожалению, реализация RR не является обязательной, да и девяти шагов часто недостаточно):

Таблица 1.2.2.
класс опции номер опции Длина описания назначение
0 0 - Конец списка опций. Используется, если опции не укладываются в поле заголовка (смотри также поле "заполнитель")
0 1 - Никаких операций (используется для выравнивания октетов в списке опций)
0 2 11 Ограничения, связанные с секретностью (для военных приложений)
0 3 * Свободная маршрутизация. Используется для того, чтобы направить дейтаграмму по заданному маршруту
0 7 * Запись маршрута. Используется для трассировки
0 8 4 Идентификатор потока. Устарело
0 9 * Жесткая маршрутизация. Используется, чтобы направить дейтаграмму по заданному маршруту
2 4 * Временная метка Интернет
* в колонке длина означает - переменная.

Поле код содержит номер опции (7 в данном случае). Поле длина определяет размер записи для опций, включая первые 3 октета. Указатель отмечает первую свободную позицию в списке IP-адресов (куда можно произвести запись очередного адреса). Интересную возможность предоставляет опция маршрут отправителя - посылать дейтаграммы по заданному отправителем маршруту. Это позволяет исследовать различные маршруты, в том числе те, которые недоступны через узловые маршрутизаторы. Существует две формы такой маршрутизации: Свободная маршрутизация и Жесткая маршрутизация (маршрутизация отправителя). Форматы для этих опций показаны ниже:


Рис. 1.8.


Рис. 1.8a.

Жесткая маршрутизация означает, что адреса определяют точный маршрут дейтаграммы. Проход от одного адреса к другому может включать только одну сеть. Свободная маршрутизация отличается от предшествующей возможностью прохода между двумя адресами списка более чем через одну сеть. Поле длина задает размер списка адресов, а указатель отмечает адрес очередного маршрутизатора на пути дейтаграммы.

IP-слой имеет маршрутные таблицы, которые просматриваются каждый раз, когда IP-модуль получает дейтаграмму для отправки. Когда дейтаграмма получается от сетевого интерфейса, IP первым делом проверяет, принадлежит ли IP-адрес места назначения к списку локальных адресов или является широковещательным адресом. Если верен один из этих вариантов, дейтаграмма передается программному модулю в соответствии с кодом в поле протокола . IP-процессор может быть сконфигурирован как маршрутизатор, в этом случае дейтаграмма может быть переадресована в другой узел сети. Маршрутизация на IP-уровне носит пошаговый характер. IP не знает всего пути, он владеет лишь информацией, какому маршрутизатору послать дейтаграмму с конкретным адресом места назначения. Просмотр маршрутной таблицы происходит в три этапа:

  1. отыскивается полное соответствие адресу места назначения. В случае успеха пакет посылается соответствующему маршрутизатору или непосредственно интерфейсу адресата. Связи точка-точка выявляются именно на этом этапе;
  2. отыскивается соответствие адресу сети места назначения. В случае успеха система действует так же, как и в предшествующем пункте. Одна запись в таблице маршрутизации соответствует всем ЭВМ, входящим в данную сеть;
  3. осуществляется поиск маршрута по умолчанию и, если он найден, дейтаграмма посылается в соответствующий маршрутизатор.

Чтобы посмотреть, как выглядит простая маршрутная таблица, воспользуемся командой netstat -rn (ЭВМ Sun. Флаг -r выводит на экран маршрутную таблицу, а -n отображает IP-адреса в цифровой форме. С целью экономии места таблица в несколько раз сокращена) (таблица 1.2.3.).

Таблица 1.2.3.
routing tables destination gateway flags refcnt use interface
193.124.225.72 193.124.224.60 ughd 0 61 le0
192.148.166.1 193.124.224.60 ughd 0 409 le0
193.124.226.81 193.124.224.37 ughd 0 464 le0
192.160.233.201 193.124.224.33 ughd 0 222 le0
192.148.166.234 193.124.224.60 ughd 1 3248 le0
193.124.225.66 193.124.224.60 ughd 0 774 le0
192.148.166.10 193.124.224.60 ughd 0 621 le0
192.148.166.250 193.124.224.60 ughd 0 371 le0
192.148.166.4 193.124.224.60 ughd 0 119 le0
145.249.16.20 193.124.224.60 ughd 0 130478 le0
192.102.229.14 193.124.224.33 ughd 0 13206 le0
Default 193.124.224.33 ug 9 5802624 le0
193.124.224.32 193.124.224.35 u 6 1920046 le0
193.124.134.0 193.124.224.50 ugd 1 291672 le0

Колонка destination - место назначения, Default - отмечает маршрут по умолчанию; Gateway - IP-адреса портов подключения (маршрутизаторов); REFCNT ( reference count ) - число активных пользователей маршрута; USE - число пакетов, посланных по этому маршруту; interface - условные имена сетевых интерфейсов. Расшифровка поля FLAGS приведена ниже (таблица 1.2.4.).

Опция временные метки работает так же, как и опция запись маршрута . Каждый маршрутизатор на пути дейтаграммы делает запись в одном из полей дейтаграммы (два слова по 32 разряда). Формат этой опции отображен на

Взаимодействие других протоколов с IP можно представить из схемы на рис. 1.10 . В основании лежат протоколы, обеспечивающие обмен информацией на физическом уровне, далее следуют протоколы IP, ICMP, ARP, RARP, UDP, TCP, IGMP и протоколы маршрутизаторов. Чем выше расположен протокол, тем более высокому уровню он соответствует. Протоколы, имена которых записаны в одной и той же строке, соответствуют одному и тому же уровню. Но все разложить аккуратно по слоям невозможно: некоторые протоколы занимают промежуточное положение, что и отражено на схеме, (области таких протоколов захватывают два уровня). Здесь протоколы IP, ICMP и IGMP помещены на один уровень, для чего имеется немало причин. Но иногда последние два протокола помещают над IP, так как их пакеты вкладываются в IP-дейтаграммы. Так что деление протоколов по уровням довольно условно. На самом верху пирамиды находятся прикладные программы, хотя пользователю доступны и более низкие уровни (например, ICMP), что также отражено на приведенном рисунке 1.10 .


Рис. 1.10.

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

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

Специальные рамки на входе и на выходе устанавливаются практически повсеместно. Как они работают и почему пищат, даже если ничего не украл?

Что вообще такое «антикражка»?

«Антикражка», «антивор» – система в магазинах самообслуживания, которая не даёт вынести товар бесплатно. Видимая (и слышимая!) её часть – ворота на выходе или в прикассовой зоне. Право на установку таких систем магазины имеют в соответствие с приложением 4 к решению ГКРЧ от 7 мая 2007 года N07-20-03-001.

Антикражные ворота включают антенну и приёмник. Антенна отправляет на приёмник сигнал определённой частоты, и создаётся зона обнаружения.

Если в эту зону внести метку, она определённым образом искажает сигнал. Приёмник улавливает это и отправляет команду, которая активирует систему акустического оповещения.

Сама рамка вреда не причинит, она лишь информирует о выносе товара. Со стороны кассы ворота экранируют, чтобы уменьшить количество ложных срабатываний.

Ворота могут подключать к камерам системы безопасности. Как только рамка срабатывает, стартует запись.

Какие «антикражки» сейчас используют в России?

Существует три основных типа противокражных систем: электромагнитные, акустомагнитные и радиочастотные. Соответственно, и датчики, которые они обнаруживают, отличаются.

1. Электромагнитные системы «антивор»

Приёмник и излучатель электромагнитных систем устанавливаются на двух разных стойках. Они создают сильное электромагнитное поле частотой от 10 Гц до 20 кГц. Полярность поля меняется дважды за полный цикл.

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

Остальные (одна или несколько) полоски в метке изготовлены из ферромагнетика . Если такую полоску намагнитить, то она нейтрализует магнитострикционный эффект соседки.

Если потереть такую метку о магнитную поверхность, она деактивируется. Вот зачем ваши покупки проводят по магнитной платформе!

Недостаток системы – в том, что намагнитить и деактивировать метку может не только кассир. Зато решение подходит для предупреждения кражи металлических изделий.

2. Акустомагнитные системы безопасности

Или «зачем на выходе у магазина стоят странные штуки» .

У акустомагнитных меток полоска с магнитострикционными свойствами не закреплена и совершает свободные механические колебания.

Как правило, рамки на выходе у магазинов работают на частоте 58 кГц. Если акустомагнитную метку поместить в переменное магнитное поле между передатчиком и приемником, она начнёт вибрировать на частоте поля.

Максимальной амплитуды вибрации достигнут, если частота поля (внешнего) совпадёт с резонансной частотой полоски (58 кГц).

Акустомагнитная метка продолжает некоторое время вибрировать и после того, как покидает внешнее поле, и создаёт собственное магнитное поле. Если приёмник улавливает поле метки, значит, товар пытаются незаконно вынести из магазина.

Чтобы активировать такую метку, нужно её намагнитить определённым образом – с соблюдением нужного направления поля и его напряженности. А чтобы деактивировать метку, её требуется размагнитить.

Обычный постоянный магнит тут не поможет. Необходимо устройство, генерирующее сильное переменное магнитное поле с убывающей напряженностью.

3. Радиочастотные системы защиты

Радиочастотная метка включает колебательный контур – конденсатор и катушку индуктивности. Система обнаружения на выходе из магазина взаимодействует именно с ним.

Чтобы деактивировать радиочастотную метку, нужно выполнить электрический пробой конденсатора. Для этого метку помещают в сильное магнитное поле нужной частоты (обычно 8,2 МГц).

Если метку порвать или прижать к ней кусок металла (крупную монету и т.п.), рамка может не обнаружить её. Поэтому там, где возможно, устанавливают многоразовые метки-пломбы, которые прочнее и не снимаются без специальных приспособлений.

4. RFID-метки

RFID – особый вид радиочастотных меток. Такие метки используют не только на товарах в магазинах, но и для проезда на общественном транспорте Москвы, картах-ключах для отелей и так далее.

В RFID-метке есть антенна и микрочип . Антенна улавливает электромагнитные волны считывателя или передатчика, а затем преобразует их в сигнал либо использует для питания чипа.

RFID-метки не деактивируют. После продажи в ней лишь меняют информацию – устанавливают новый статус товара. Вы можете даже не знать, что на товаре наклеена метка, а удалить её порой довольно сложно (к примеру, изнутри корешка книги).

Теоретически, RFID-метки позволяют следить за вами. По информации в метке часто можно понять, сколько стоит вещь, кто вам её подарил (по связи данных метки с данными карты, которой оплатили покупку) и т.п. Конечно, пока это больше теория, чем практика, по крайней мере применительно к меткам в магазинах.

Обычно эти системы используются в комбинациях

В магазинах одежды и обуви, а также в гипермаркетах обычно используют акустомагнитные и радиочастотные системы. Они чувствительнее электромагнитных и реагируют на гибкие метки-наклейки и на жесткие съёмные пломбы, которые часто клеят на алкоголь, банки с красной икрой и т.д.

Нередко для таких систем разрабатывают датчики под товары определённых типов: продуктов в пакетах и блистеров, очков, блоков сигарет, бритвенных станков.

Наиболее совершенные системы включают функцию металломагнитодетекции . Они не дадут пронести в магазин тот же неодимовый магнит. Да и на фольгированную сумку отреагируют.

Интересный факт: на выходе из магазинов с такими системами можно «запищать», если, к примеру, у вас в рюкзаке ноутбук. Внутри жесткого диска HDD установлен неодимовый магнит, на него и срабатывает рамка.

А как же тогда крадут из магазинов?

Не существует электронных систем, которые нельзя взломать и обмануть. Шоплифтеры (люди, которые регулярно воруют еду и вещи в магазинах) на специальных форумах щедро делятся секретами.

Самые распространённые варианты – магнитные съёмники в руках, фольгированные сумки и глушилки. Первые работают так же, как съёмники на кассах: деактивируют метки с помощью магнитного поля. Теми же свойствами обладает достаточно крупный магнит.

Но в хороших системах стоят самариевые магниты. Они эффективные, но довольно дорогие. У среднего шоплифтера на такой магнит просто нет денег, да и окупаться он будет долго.

Поэтому чаще всего используют неодимовые магниты из жестких дисков. Но срабатывают они не всегда, ведь имеют значения не только магнитные свойства, но тип используемых меток, форма магнитов, их полярность и расположение в заводских съёмниках. Для снятия акустомагнитной метки неодимовый магнит не подойдёт, для радиочастотной тоже.

Фольгированные сумки (бустер-бэги) отражают сигнал от метки внутрь себя. В результате метка не срабатывает на рамке.

Фольгу кладут даже под подкладку сумок Louis Vuitton, чтобы охрана ничего не заподозрила. Но вычислить бустер-бэги можно. Во-первых, они тяжелее обычных сумок, ведь под подкладкой может быть до 30 слоёв фольги. Во-вторых, владельцы сумок часто ведут себя подозрительно.

Глушилки генерируют белый шум и подходят для систем с радиочастотными метками. Однако с ними также всё непросто. К примеру, если поле глушилки расположить не под тем углом, она не сработает.

Хотите попробовать? Очень зря

Не стоит думать, что если следовать советам шоплифтеров и сделать бустер-бэг, вас не вычислят. Во-первых, есть камеры и люди, которые просматривают записи. Если вы регулярно «трётесь» в одном и том же магазине, то вас могут узнать при следующем визите, задержать до приезда полиции и предъявить записи с камер.

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

Бывают и забавные ситуации. Например, когда лежащий в заднем кармане джинсов магнит с силой притяжения от 30 кг внезапно с грохотом приклеивается к металлическим поверхностям на кассе. После такого уйти незамеченным точно не получится…)

А почему тогда рамки сами по себе не ловят?

Казалось бы, это логично: лови вора, облегчай работу охраннику! Но у рамок сравнительно часто бывают ложные срабатывания .

Чаще всего рамки пищат без причины утром и вечером, особенно в тех магазинах, которые находятся в торговых центрах и жилых домах. Всё дело в том, что утром и вечером нагрузка на электросеть резко возрастает. В результате усиливаются импульсные помехи, которые рамка может спутать с сигналом метки на товаре.

Бывает, рамка срабатывает на метки другого магазина, особенно на RFID. Если вы не срезаете сразу этикетки с одежды, наверняка не раз сталкивались с этим. Система просто не видит нужного статуса товара или обнаруживает неразмагниченную метку, вот и возмущается.

изображение
изображение_пояснение
изображение_автор*
текст1
заголовок2
текст2
заголовок3
метка3 текст3
метка4 текст4
...
метка18 текст18
Описание описание

Основные

название Верхняя строка в шапке карточки. Обычно это название шаблона, соответствующее использующей его категории. предзаголовок Промежуточная строка шапки с уменьшенным шрифтом. Для дополнительных структурных сведений. наименование Индивидуальный заголовок. Используется, например, для оригинального названия описываемого в конкретной статье объекта. изображение Изображение, которое будет отображено под основным заголовком. Параметр изображение допускает стандартный викикод для отображения. изображение_пояснение Текстовый комментарий под изображением. Отображается только в случае, если задано изображение. изображение_автор Имя автора изображения. Обрабатывается только в случае, если задано изображение. При отображении ссылка формируется автоматически.

Шаблон поддерживает до 18 типовых строк с настраиваемым форматированием. Номера строк задают их взаимный порядок отображения. В каждой из таких строк:

Заголовок n Используется для создания заголовков в ряду. метка n Используется для пояснительной надписи перед вводимым текстом. текст n Используется для принятия параметров в специализированных шаблонах-карточках. описание Дополнительная пара метка-текст с фиксированным расположением. внизу, внизу2, внизу3 Ячейка во всю ширину таблицы, располагающаяся внизу тела шаблона (то есть под заголовками/метками и текстом). Для размещения дополнительных данных, отличных по стилю от основных. понедельный флешмоб, понедельный флешмоб2, понедельный флешмоб3 Номера понедельных флешмобов (по одному на параметр), в которых объект статьи стал доминирующей темой. Формируют список ссылок на соответствующие темы в галерее понедельного флешмоба. Стиль отображения совпадает со стилем остального текста в шаблоне. позиция Положение на странице, по умолчанию right.

Стили

Передача классов в шаблон не предусмотрена (возможно, временное решение). Внешний вид карточки стандартизован самим шаблоном, но может быть задан стилями:

Стиль_тела Применяется ко всей карточке, может использоваться, например, для указания её ширины.

  • noborder - параметр, при любом ненулевом значении снимающий полное прочерчивание внутренних рамок шаблона.
стиль_шапки, стиль_изображения, стиль_футера Применяется к ячейкам, в которых располагаются шапка, изображение и его описание, замыкающие карточку полосы соответственно. стиль_заголовков С помощью этого стиля можно настроить отображение всех заголовков стиль_меток Применяется ко всем меткам стиль_текста Применяется ко всему тексту стиль_названия, стиль_предзаголовка, стиль_наименования Применяются ко внутренним ячейкам (строкам) шапки. Позволяет убрать курсивное начертание или измененить размер шрифта: font-style:normal; font-size:medium; стиль_изображение_пояснение Применяется к тексту пояснения под изображением стиль_внизу, стиль_внизу2, стиль_внизу3 позволяют изменить стиль замыкающих шаблон строк, в частности, указать цвет фона: background: #a3eea3;

Возможности

Сдвоенные ячейки

Если для параметра текст n значение метка n не определено, то текст n автоматически расширяется до 2 ячеек.

Необязательные ячейки

Ряд с меткой, но без текста не будет отображён. Это позволяет легко создавать необязательные параметры в специализированных шаблонах-карточках. Для создания опциональной ячейки используйте параметр следующим образом:

|метка5 = Описание |текст5 = {{{описание|}}}

Таким образом, если параметр описание не будет определён, строка «Описание» не будет отображена.

Необязательные заголовки

Приоритеты отображения

В одной строке не может быть отображён одновременно и заголовок, и текст. Если задан заголовок n , то текст n и метка n игнорируются. Если нет заданного заголовка n , то показываются текст n и (если есть) метка n . Пример отображения:

|заголовок1 = |метка1 = текст_в_поле_метка |текст1 = текст_в_поле_текст

Чтобы отобразить и заголовок, и пару метка-текст (либо только текст без метки) под ним, следует воспользоваться разными номерами строк. Чтобы организовать необязательные заголовки, следует использовать проверку на наличие необходимых для вывода заголовка данных. Следующий пример будет выводить заголовок «Структура», если хотя бы один из параметров содержимое или размещение определён:

|заголовок5 = {{#if:{{{содержимое|}}}{{{размещение|}}}|Структура}} |метка6 = Содержимое |текст6 = {{{содержимое|}}} |метка7 = Размещение |текст7 = {{{размещение|}}}

Оформление параметров

Для оформления отображения введённого параметра можно использовать функцию парсера «#if» более полно. Например, следующие строки добавят к параметру текст6 фиксированную подпись «-го уровня», но только если этот параметр определён:

|метка6 = Доступно героям |текст6 = {{#if:{{{доступно героям уровня|}}}|{{{доступно героям уровня}}}-го уровня}}

Пример применения:

|доступно героям уровня = 12
Доступно героям 12-го уровня

Подмену однотипных строк, в том числе ссылок, можно организовать с помощью функции парсера «#switch»:

Пример применения:

|тип = боевое
Тип умения боевое

Заготовка для копирования

{{Карточка |название = |предзаголовок = |наименование = |изображение = |подпись = |заголовок1 = |метка1 = |текст1 = |заголовок2 = |метка2 = |текст2 = |заголовок3 = |метка3 = |текст3 = |заголовок4 = |метка4 = |текст4 = |заголовок5 = |метка5 = |текст5 = |заголовок6 = |метка6 = |текст6 = |заголовок7 = |метка7 = |текст7 = |заголовок8 = |метка8 = |текст8 = ... |заголовок18 = |метка18 = |текст18 = |внизу = |внизу2 = |внизу3 = |позиция = {{{позиция|right}}} |noborder = |стиль_тела = |стиль_шапки = |стиль_названия = |стиль_предзаголовка = |стиль_наименования = |стиль_изображения = |стиль_подписи = |стиль_заголовков = |стиль_меток = |стиль_текста = |стиль_футера = |стиль_внизу = |стиль_внизу2 = |стиль_внизу3 = |понедельный флешмоб = |понедельный флешмоб2 = |понедельный флешмоб3 = }} В месте применения шаблона заведомо лишние параметры могут быть удалены из заготовки.