Подборка вопросов и ответов #3

Почему команда ls добавляет точку (.) или плюс (+) к полю прав доступа некоторых файлов?

Last modified on 2009-07-06 20:03:47 GMT. 0 comments. Top.

Система: Fedora 11

Пример:

[ivan@radon ~]$ ll /boot/vmlinuz-*
-rwxr-xr-x. 1 root root 3089424 2009-05-28 00:39 /boot/vmlinuz-2.6.29.4-167.fc11.i686.PAE
-rwxr-xr-x. 1 root root 3088208 2009-06-17 06:27 /boot/vmlinuz-2.6.29.5-191.fc11.i686.PAE

Это новая функциональность, добавленная в последние версии пакета coreutils, который включён в дистрибутив Fedora 11. Ответ на этот вопрос содержит страница информации команды ls. Посмотреть её можно командой # info ls. Вот выдержка оттуда:

За битами прав доступа следует один символ, который указывает на то, используется ли альтернативный метод контроля доступа, такой, например, как списки контроля доступа. Если этот символ отсутствует, это означает, что альтернативные методы не используется. Если же отображается какой-либо печатный символ — значит используется.

Команда GNU ls использует символ точки (.) для обозначения, что у файла есть только контекст безопасности SELinux. Если у файла присутствуют и другие методы контроля доступа в любой комбинации, он помечается символом плюс (+).


Как определить, выполняется ли текущая система в виртуальной машине?

Last modified on 2009-07-05 09:53:25 GMT. 0 comments. Top.

В только-что загрузившейся системе, чтобы узнать, работает ли она в виртуальном окружении, достаточно проверить вывод команды dmesg. Ниже приведены примеры выполнения команды в разных виртуализационных средах:

Xen

$ dmesg | grep -i virtual 
Xen virtual console successfully installed as xvc0

VMWare

$ dmesg | grep -i virtual  
     VMware vmxnet virtual NIC driver         Vendor: VMware    Model: Virtual disk      Rev: 1.0  
     hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive

QEMU или KVM

$ dmesg | grep -i virtual    
   CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03

Кроме того, можно также использовать команду dmidecode, для получения информации из системного BIOS. Например:

VMWare:

# dmidecode | egrep -i 'manufacturer|product'   
    Manufacturer: VMware, Inc.       Product Name: VMware Virtual Platform

QEMU или KVM:

# dmidecode | egrep -i 'vendor' 
   Vendor: QEMU

Как получить дополнительную информацию о производительности дисков?

Last modified on 2009-07-02 08:32:35 GMT. 0 comments. Top.

Команда iostat предоставляет статистику операций ввода/вывода, но иногда администраторам требуется более детальная информация. В таких случаях может оказаться полезным файл /proc/diskstats. Ниже приведён пример выполнения команды cat /proc/diskstats:

# cat /proc/diskstats
    1       0 ram0 0 0 0 0 0 0 0 0 0 0 0
.........................................
    1      15 ram15 0 0 0 0 0 0 0 0 0 0 0
    8       0 sda 13707 12045 788079 251532 3517 6016 76252 184444 0
 77704 435976
    8       1 sda1 834 1670 2 4
    8       2 sda2 23606 784578 9531 76248
    8       3 sda3 1267 1431 0 0
   22       0 hdc 9 9 144 544 0 0 0 0 0 468 544
    2       0 fd0 0 0 0 0 0 0 0 0 0 0 0
    9       0 md0 0 0 0 0 0 0 0 0 0 0 0

Рассмотрим приведённый вывод:

Первые две колонки — это старший и младший номер устройства.

Третья колонка содержит имя устройства, после которого идут ещё 11 колонок.

Поле 1: количество выполненных операций чтения. Это общее число успешно завершённых операций чтения.

Поле 2: количество объединённых операций чтения.

Поле 3: количество считанных секторов. Это общее число успешно прочитанных секторов.

Поле 4: количество миллисекунд, затраченных на чтение. Это общее число миллисекунд, затраченных на операции чтения (измеряется от вызова __make_request() до end_that_request_last()).

Поле 5: количество выполненных операций записи. Это общее число успешно завершённых операций записи.

Поле 6: количество объединённых операций записи. Последовательные операции чтения и записи могут объединяться для повышения эффективности. Потому две операции считывания по 4K, могут стать одной операцией по считыванию 8K непосредственно перед передачей запроса диску. Таким образом, эти операции будут посчитаны (и выполнены) как одна операция ввода/вывода. Это поле показывает насколько часто происходит такая ситуация.

Поле 7: количество записанных секторов. Это общее число успешно записанных секторов.

Поле 8: количество миллисекунд, затраченных на запись. Это общее число миллисекунд, затраченных на операции записи (измеряется от вызова __make_request() до end_that_request_last()).

Поле 9: количество выполняемых операций ввода/вывода в текущий момент. Единственное поле, значение которого может уменьшаться до нуля. Увеличивается при передаче запросов соответствующей request_queue_t и уменьшается при их завершении.

Поле 10: количество миллисекунд, затраченных на выполнение операций ввода/вывода. Это значение возрастает, пока значение поля 9 не равно нулю.

Поле 11: взвешенное число миллисекунд, затраченных на выполнение операций ввода/вывода. При каждом начале, завершении,или объединении операций ввода/вывода, или при считывании этой статистики, это поле увеличивается на число выполняемых в текущий момент операций ввода/вывода (поле 9), умноженное на количество миллисекунд, затраченных на выполнение операций ввода/вывода, с момента последнего обновления данного поля. Это позволяет получить простую статистику как времени выполнения операций ввода/вывода, так и количества незавершённых операций, число которых может возрастать.

Прим.пер.: здесь рассматривается формат записи, относящийся к диску, не разделу. Для разделов представлены только 4 поля, аналоги описанных полей 1,3,5,7. Начиная с ядра 2.6.25 у разделов появился полный набор полей статистики.


Как настроить дополнительные маршруты в Red Hat Enterprise Linux?

Last modified on 2009-06-30 20:16:37 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 3.5, 4 and 5

Чтобы задать статические маршруты, используются файлы /etc/sysconfig/network-scripts/route-interface. Они считываются при инициализации сетевых интерфейсов (ниже описывается синтаксис файлов).

Существуют два варианта синтаксиса этих файлов. Первый — это аргументы к команде ip, второй состоит из директив “сеть/маска/шлюз”.

Синтаксис 1:

Если используется синтаксис с аргументами команды ip, скрипт ifup-route для каждой строки из файла выполняет команду ip route add. Строка в файле должна содержать все необходимые параметры для добавления маршрута. Например, чтобы задать маршрут по-умолчанию, файл должен содержать следующее:

default via X.X.X.X dev bond0
10.10.10.0/24 via X.X.X.X dev bond0

В приведённом примере, X.X.X.X — это IP-адрес шлюза. Вторая строка задаёт другой статический маршрут, где X.X.X.X это тоже IP-адрес шлюза. Каждая строка в файле обрабатывается как отдельный маршрут.

Синтаксис 2:

Альтернативный вариант синтаксиса следующий:

ADDRESS0=10.10.10.0
NETMASK0=255.255.255.0
GATEWAY0=X.X.X.X

Где X.X.X.X это IP-адрес шлюза. Следующие записи должны быть последовательно пронумерованы (например ADDRESS1=, NETMASK1=, GATEWAY1=). Обратите внимание, что нумерация должна идти последовательно без пропусков (после 0 должна идти 1, а не любое число, большее 0).


Как создать файловую систему ext3, оптимизированную для работы на RAID и приложений с прямым вводом/выводом?

Last modified on 2009-06-28 07:56:50 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 3, Red Hat Enterprise Linux 4, Red Hat Enterprise Linux 5

Решение:

RAID уровней 0, 4, 5 и 6 для записи на разные диски, разбивает данные на большие блоки — “полосы”, обычно по 64KB. Выравнивание разделов и файловых систем в соответствии с размером этих полос может повысить производительность, в частности, программ, которые используют прямой ввод/вывод.

Программа fdisk создаёт разделы, выровненные по границам цилиндров, в соответствии с исторической геометрией “цилиндр/дорожка/сектор” (cylinder/head/sector, C/H/S). Это позволяет обеспечить максимальную совместимость с другими операционными системами и утилитами. К сожалению, такая геометрия обычно не соответствует размеру полосы RAID-массива. Если доступ к RAID будет осуществляться только операционными системами и утилитами, полностью поддерживающими логическую адресацию блоков (Logical Block Addressing, LBA), то необходимость в выравнивании по геометрии C/H/S отпадает, а с помощью программы parted можно выровнять разделы под полосы RAID-массива.

Внимание: все приводимые здесь примеры уничтожают существующие разделы и файловые системы. Применяйте их только для создания новых файловых систем.

Пример 1: выровненный по границе цилиндра раздел, созданный утилитой fdisk на диске /dev/sdb.

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 60799.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-60799, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-60799, default 60799):
Using default value 60799

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# parted -s /dev/sdb unit s print

Model: APPLE Xserve RAID (scsi)
Disk /dev/sdb: 976748543s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End         Size        Type     File system  Flags
 1      63s      976735934s  976735872s  primary

[root@localhost ~]#

Parted показывает, что fdisk создал раздел, начиная с 63-сектора (32,256 байта) тома, что совместимо с геометрией C/H/S, но не оптимально для RAID. Поскольку RAID использует полосы размером 64KB, начало раздела должно быть сдвинуто на сектор 128. Начинать раздел с нулевого сектора нельзя, поскольку будет перезаписана таблица разделов. Большинство RAID-массивов используют сектора размером 512 байт, но возможны сектора и большего размера.

Примечание: По-умолчанию, parted использует в единицах размера легко читаемые сокращения системы СИ (степени числа 10). Поскольку они редко совпадают со степенями числа 2, parted нужно перевести в режим работы с секторами (unit s), перед тем как проверять или задавать выравнивание разделов по секторам.

Пример 2: удалите раздел /dev/sdb1 и создайте его заново, начиная с сектора 128.

[root@localhost ~]# parted /dev/sdb
GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) print

Model: APPLE Xserve RAID (scsi)
Disk /dev/sdb: 976748543s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End         Size        Type     File system  Flags
 1      63s      976735934s  976735872s  primary

(parted) rm 1
(parted) mkpart primary 128 976735934
(parted) print

Model: APPLE Xserve RAID (scsi)
Disk /dev/sdb: 976748543s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End         Size        Type     File system  Flags
 1     128s      976735934s  976735807s  primary

(parted) quit
[root@localhost ~]#

Примечание: Команды move и resize утилиты parted пытаются сохранить содержимое файловой системы раздела. Если в разделе нет файловой системы, то эти команды откажутся работать.

Выровненная файловая система ext3 может быть создана на выровненном разделе или на логическом томе, состоящем из выровненных физических томов. LVM не влияет на выравнивание, если размер физического экстента, превосходит размер блока RAID. Обычно размер RAID блока равен 64KB, а размер физического экстента — 4MB.

Команда mke2fs принимает параметр stride, который позволяет оптимизировать размещение метаданных файловой системы для RAID-массивов. Параметр задаётся в блоках файловой системы, которые в большинстве случаев равняются 4KB. Чтобы избежать возможных неточностей и гарантировать правильность вычислений, лучше всего его задать явно.

Пример 3: создайте файловую систему ext3 на /dev/sdb1, оптимизированную для RAID с размером блока 64KB.

[root@localhost ~]# mke2fs -j -b 4096 -E stride=16 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
61046784 inodes, 122091975 blocks
6104598 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
3726 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]#

Как определить и настроить вероятность с которой процесс будет завершён при нехватке оперативной памяти

Last modified on 2009-06-25 12:24:59 GMT. 0 comments. Top.

Ядро Red Hat Enterprise Linux 5.2 создает 2 файла для каждого процесса, которые позволяют управлять вероятностью, с которой этот процесс будет завершён, когда система будет вынуждена заврешать процессы из-за нехватки оперативной памяти (out-of-memory, OOM). Это файлы:

  • /proc/[pid]/oom_adj — используется для изменения “OOM-счёта” (OOM score), который определяет вероятность завершения процесса при нехватке оперативной памяти. Чем больше значение OOM-счёта, тем больше вероятность того, что процесс будет завершён подсистемой oomkill. Допустимые значения находятся в промежутке от -17 до 15; обратите внимание, что OOM-счёт равный -17 означает, что [pid] не будет завершён при нехватке памяти.

    Чтобы задать OOM-счёт, просто выполните команду echo значение с выводом в файл /proc/[pid]/oom_adj. Например, чтобы установить OOM-счёт равный 15 для процесса 1111, выполните:

    echo 15 > /proc/1111/oom_adj

    Учтите, что OOM-счёт наследуется процессом-потомком от родительского процесса при использовании системных вызовов семейства fork().

  • /proc/[pid]/oom_score — содержит текущий OOM-счёт для данного процесса. Используйте команду cat чтобы посмотреть текущий OOM-счёт для процесса с номером [pid]. Например, чтобы узнать текущий OOM-счёт для процесса 1111, выполните:
    cat /proc/1111/oom_score

Прим. пер.: Значение в файле oom_score — динамически вычисляемое, оно не равняется значению, которое передаётся в файл oom_adj. Значение, передаваемое в файл oom_adj, меняет вероятность в большую или меньшую сторону, а не задаёт абсолютное значение.


Как выполнить минимальную установку Red Hat Enterprise Linux 5 с помощью Anaconda?

Last modified on 2009-06-23 10:45:31 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 5

Проблема

Минимальная установка Red Hat Enterprise Linux необходима для некоторых продуктов Red Hat, таких как Red Hat Network Satellite (RHN Satellite). Одной из наиболее распространённых причин неудачной установки RHN Satellite, является установка на “не-минимальную” (или, “не-@base“) систему Red Hat Enterprise Linux.

Решение

Следующие шаги описывают порядок действий для установки минимальной системы Red Hat Enterprise Linux 5 с помощью графического режима утилиты установки Anaconda:

  1. Загрузитесь с установочного носителя и начните установку.
  2. Когда вы дойдёте до экрана выбора пакетов (package customization), выберите опцию “Customize now” и нажмите “Next.”
  3. Следующий экран будет содержать несколько категорий, в каждой из которых находятся разные группы пакетов. Пройдите по всем категориям, снимая отметки со всех групп, кроме группы ‘Base’ в категории ‘Base’.
  4. Нажмите “Next” чтобы продолжить процесс установки.

После завершение установки, система должна автоматически загрузиться в уровень выполнения 3. Зарегистрируйтесь в системе как пользователь root и просмотрите файл /root/anaconda-ks.cfg. Если @base это единственная присутствующая в нём группа пакетов, то система установлена в минимальном варианте.