Raw-устройства
Материал из Xgu.ru
- Возможно, вас интересует страница RAW (фото)
Raw-устройства (raw devices, сырые устройства) — специальные символьные (character) устройства, предназначенные для организации доступа к блочным устройствам без кэширования. Обычно используются системами, которые сами знают как им кэшировать данные, и не хотят полагаться в этом на операционную систему, в частности системами управления базами данных (СУБД).
В современных Linux-системах raw-устройства считаются устаревшими и использовать их не рекомендуется. Прикладное программное обеспечение должно вместо этого работать с обычным блочным устройством, только при его открытии указывать специальный флаг O_DIRECT.
Если всё же по какой-то причине необходимо использовать raw-устройства, тогда нужно
- Убедиться, что загружен соответствующий модуль ядра (raw);
- Созданы соответствующие устройства в /dev;
- Есть утилита для работы с raw-устройствами, называемая raw.
Привязка raw-устройств:
$ raw /dev/raw/raw1 /dev/sda3 /dev/raw/raw1: bound to major 8, minor 3 $ raw /dev/raw/raw2 /dev/sda /dev/raw/raw2: bound to major 8, minor 0 $ raw -qa /dev/raw/raw1: bound to major 8, minor 3 /dev/raw/raw2: bound to major 8, minor 0
Просмотр файлов устройств:
$ ls -lR /dev/raw* crw-r--r-- 1 root root 162, 0 Dec 6 06:54 /dev/rawctl /dev/raw: total 0 crw-r--r-- 1 root root 162, 1 Dec 6 06:54 raw1 crw-r--r-- 1 root root 162, 2 Dec 6 06:54 raw2
Если в системе используется udev,
raw-устройства можно создавать автоматически.
Для этого в файл /etc/udev/rules.d/60-raw.rules нужно добавить строку:
ACTION=="add", KERNEL=="<device name>“, RUN+=”raw /dev/raw/rawX %N”
Здесь вместо <device name> необходимо указать имя исходного блочного устройства.
Если известно не имя устройства, а его мажорный и минорный номера, строка будет выглядеть так:
ACTION=="add", ENV{MAJOR}="A", ENV{MINOR}="B", RUN+="raw /dev/raw/rawX %M %m"
Если от старой системы в файле /etc/sysconfig/rawdevices (в RHEL) накопилось большое количество raw-устройств, сконвертировать их можно с помощью скрипта:
#!/bin/sh grep -v "^ *#" /etc/sysconfig/rawdevices | grep -v "^$" | while read dev major minor ; do if [ -z "$minor" ]; then echo "ACTION==\"add\", KERNEL==\"${major##/dev/}\", RUN+=\"/usr/bin/raw $dev %N\"" else echo "ACTION==\"add\", ENV{MAJOR}==\"$major\", ENV{MINOR}==\"$minor\", RUN+=\"/usr/bin/raw $dev %M %m\"" fi done
Проверка правил udev:
%# udevtest /block/sdb/sdb1 | grep raw main: run: '/bin/raw /dev/raw/raw1 /dev/.tmp-8-17'
После перезапуска udev убедиться, что устройства создались, можно следующим образом:
%# raw -qa /dev/raw/raw1: bound to major 8, minor 17 %# ls -l /dev/raw total 0 crw-rw---- 1 root disk 162, 1 Jan 29 02:47 raw1